{"version":3,"file":"main-CvUzajmE.js","sources":["../../../Frontend/js/helpers.js","../../../Frontend/node_modules/js-cookie/dist/js.cookie.mjs","../../../Frontend/js/modules/sticky-header.js","../../../Frontend/js/modules/nav.js","../../../Frontend/js/modules/accordion.js","../../../Frontend/node_modules/gsap/gsap-core.js","../../../Frontend/node_modules/gsap/CSSPlugin.js","../../../Frontend/node_modules/gsap/index.js","../../../Frontend/js/modules/video.js","../../../Frontend/node_modules/ev-emitter/ev-emitter.js","../../../Frontend/node_modules/get-size/get-size.js","../../../Frontend/node_modules/fizzy-ui-utils/utils.js","../../../Frontend/node_modules/flickity/js/cell.js","../../../Frontend/node_modules/flickity/js/slide.js","../../../Frontend/node_modules/flickity/js/animate.js","../../../Frontend/node_modules/flickity/js/core.js","../../../Frontend/node_modules/unidragger/unidragger.js","../../../Frontend/node_modules/flickity/js/drag.js","../../../Frontend/node_modules/flickity/js/prev-next-button.js","../../../Frontend/node_modules/flickity/js/page-dots.js","../../../Frontend/node_modules/flickity/js/player.js","../../../Frontend/node_modules/flickity/js/add-remove-cell.js","../../../Frontend/node_modules/flickity/js/lazyload.js","../../../Frontend/node_modules/imagesloaded/imagesloaded.js","../../../Frontend/node_modules/flickity/js/imagesloaded.js","../../../Frontend/node_modules/flickity/js/index.js","../../../Frontend/js/modules/slider.js","../../../Frontend/node_modules/lottie-web/build/player/lottie.js","../../../Frontend/js/modules/usp-icon.js","../../../Frontend/js/modules/observer.js","../../../Frontend/js/api/vacancies.js","../../../Frontend/js/modules/vacancies.js","../../../Frontend/js/api/news.js","../../../Frontend/js/modules/news.js","../../../Frontend/js/modules/calcHeight.js","../../../Frontend/js/modules/mobile-menu.js","../../../Frontend/js/main.js"],"sourcesContent":["if (!Element.prototype.matches) {\r\n    Element.prototype.matches = Element.prototype.msMatchesSelector\r\n        || Element.prototype.webkitMatchesSelector;\r\n}\r\n\r\nif (!Element.prototype.closest) {\r\n    Element.prototype.closest = function (s) {\r\n        let el = this;\r\n        if (!document.documentElement.contains(el)) return null;\r\n        do {\r\n            if (el.matches(s)) return el;\r\n            el = el.parentElement || el.parentNode;\r\n        } while (el !== null && el.nodeType === 1);\r\n        return null;\r\n    };\r\n}\r\n\r\n\r\n(function (arr) {\r\n    arr.forEach(function (item) {\r\n        if (item.hasOwnProperty('remove')) {\r\n            return;\r\n        }\r\n        Object.defineProperty(item, 'remove', {\r\n            configurable: true,\r\n            enumerable: true,\r\n            writable: true,\r\n            value: function remove() {\r\n                if (this.parentNode === null) {\r\n                    return;\r\n                }\r\n                this.parentNode.removeChild(this);\r\n            }\r\n        });\r\n    });\r\n})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n  function set (name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get (name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        jar[found] = converter.read(value, found);\n\n        if (name === found) {\n          break\n        }\n      } catch (e) {}\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set,\n      get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","'use strict';\r\n\r\nfunction fStickyHeader () {\r\n    const oHeader = document.querySelector('[data-sticky-header]');\r\n\r\n    if (!oHeader) return;\r\n\r\n    const oHeaderOffset = oHeader.offsetTop;\r\n\r\n    function fSwitchState () {\r\n        const iScrollPosition = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n        if (iScrollPosition > oHeaderOffset) {\r\n            oHeader.classList.add('is-sticky');\r\n        } else {\r\n            oHeader.classList.remove('is-sticky');\r\n        }\r\n    }\r\n\r\n    fSwitchState();\r\n    document.addEventListener('scroll', fSwitchState);\r\n}\r\n\r\nexport default fStickyHeader;\r\n","const navModule = () => {\r\n    const navDropdowns = document.querySelectorAll('[data-module-nav-dropdown]');\r\n    const navToggle = document.querySelector('[data-module-nav-toggle]');\r\n    const offscreenNav = document.querySelector('[data-module-nav-offscreen]');\r\n\r\n    function openDropdown(toggle, dropdown) {\r\n        dropdown.classList.add('is-open');\r\n        if (toggle) toggle.setAttribute('aria-expanded', 'true');\r\n    }\r\n\r\n    function closeDropdown(toggle, dropdown) {\r\n        dropdown.classList.remove('is-open');\r\n        if (toggle) toggle.setAttribute('aria-expanded', 'false');\r\n    }\r\n\r\n    function toggleNavigation(e) {\r\n        // Close all submenus when closing navigation\r\n        if (offscreenNav.classList.contains('is-open')) {\r\n            navDropdowns.forEach((item) => {\r\n                const dropdown = item.querySelector('.navigation__dropdown__menu');\r\n                const toggle = item.querySelector('.navigation__dropdown__toggle');\r\n                closeDropdown(toggle, dropdown);\r\n            });\r\n        }\r\n\r\n        offscreenNav.classList.contains('is-open') ? offscreenNav.classList.remove('is-open') : offscreenNav.classList.add('is-open');\r\n        document.body.classList.contains('no-scroll') ? document.body.classList.remove('no-scroll') : document.body.classList.add('no-scroll');\r\n\r\n        navToggle.classList.contains('is-active') ? navToggle.classList.remove('is-active') : navToggle.classList.add('is-active');\r\n        navToggle.querySelector('span').innerText = offscreenNav.classList.contains('is-open') ? 'Sluiten' : 'Menu';\r\n    }\r\n\r\n    function toggleDropdown(toggle, dropdown) {\r\n        if (dropdown.classList.contains('is-open')) {\r\n            closeDropdown(toggle, dropdown);\r\n        } else {\r\n            openDropdown(toggle, dropdown);\r\n        }\r\n    }\r\n\r\n    function initNavigation() {\r\n        if(navToggle) {\r\n            navToggle.addEventListener('click', toggleNavigation);\r\n        }\r\n\r\n\r\n        Array.prototype.forEach.call(navDropdowns, (el, i) => {\r\n            const dropdown = el.querySelector('.navigation__dropdown__menu');\r\n            const toggles = el.querySelectorAll('.navigation__dropdown__toggle');\r\n\r\n            // Check if parent nav isnt offscreen navigation\r\n            if (el.closest('nav').getAttribute('data-module-nav-offscreen') === null) {\r\n                el.addEventListener('mouseover', () => {\r\n                    openDropdown(toggles[0], dropdown);\r\n                });\r\n\r\n                el.addEventListener('mouseout', () => {\r\n                    closeDropdown(toggles[0], dropdown);\r\n                });\r\n            }\r\n\r\n            toggles.forEach((toggle) => {\r\n                toggle.addEventListener('touchend', (event) => {\r\n                    toggleDropdown(toggle, dropdown);\r\n                    event.preventDefault();\r\n                    return false;\r\n                });\r\n\r\n                toggle.addEventListener('click', (event) => {\r\n                    toggleDropdown(toggle, dropdown);\r\n                    return false;\r\n                });\r\n            });\r\n        });\r\n    }\r\n\r\n    initNavigation();\r\n}\r\n\r\nexport default navModule;","'use strict';\r\n\r\nconst accordionModule = {\r\n    init: () => {\r\n        const aAccordions = document.querySelectorAll('[data-module-accordion]');\r\n        const fInitAccordion = oAccordion => {\r\n            if (!oAccordion.classList.contains('activated')) {\r\n                oAccordion.classList.add('activated');\r\n                const aTriggers = oAccordion.querySelectorAll('[data-module-accordion-open]');\r\n                const bOpenOne = oAccordion.getAttribute('data-accordion-openOne') === 'true';\r\n\r\n                for (let b = 0; b < aTriggers.length; b += 1) {\r\n                    const oParent = aTriggers[b].parentNode;\r\n                    const oCollapse = oParent.querySelector('[data-module-accordion-collapse]');\r\n                    const oCollapseHeight = oCollapse.offsetHeight;\r\n                    const oChevron = aTriggers[b].querySelector('.icon-chevron');\r\n\r\n                    oCollapse.style.height = '0px';\r\n                    oCollapse.style.position = 'relative';\r\n                    oCollapse.style.opacity = 1;\r\n                    oCollapse.style.visibility = 'visible';\r\n\r\n                    if (oParent.getAttribute('data-accordion-active')) {\r\n                        oCollapse.style.height = `${oCollapseHeight}px`;\r\n                        if (oChevron) {\r\n                            //Using Attribute here, IE11 Doenst support classList on SVG's\r\n                            oChevron.removeAttribute('class', 'icon-chevron icon-chevron--down');\r\n                            oChevron.setAttribute('class', 'icon-chevron icon-chevron--up');\r\n                        }\r\n                    }\r\n\r\n                    aTriggers[b].addEventListener('click', () => {\r\n                        if (oParent.getAttribute('data-accordion-active')) {\r\n                            oCollapse.style.height = '0px';\r\n                            oParent.removeAttribute('data-accordion-active');\r\n\r\n                            if (oChevron) {\r\n                                oChevron.removeAttribute('class', 'icon-chevron icon-chevron--up');\r\n                                oChevron.setAttribute('class', 'icon-chevron icon-chevron--down');\r\n                            }\r\n                        } else {\r\n                            if (bOpenOne) {\r\n                                const oCurrent = oAccordion.querySelector('[data-accordion-active=\"true\"]');\r\n\r\n                                if (oCurrent) {\r\n                                    const oCurrentCollapse = oCurrent.querySelector('[data-module-accordion-collapse]');\r\n\r\n                                    oCurrentCollapse.style.height = '0px';\r\n                                    oCurrent.removeAttribute('data-accordion-active');\r\n                                }\r\n                            }\r\n\r\n                            oCollapse.style.height = `${oCollapseHeight}px`;\r\n                            oParent.setAttribute('data-accordion-active', true);\r\n\r\n                            if (oChevron) {\r\n                                oChevron.removeAttribute('class', 'icon-chevron icon-chevron--down');\r\n                                oChevron.setAttribute('class', 'icon-chevron icon-chevron--up');\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n        };\r\n\r\n        for (let a = 0; a < aAccordions.length; a += 1) {\r\n            fInitAccordion(aAccordions[a]);\r\n        }\r\n    }\r\n}\r\n\r\nexport default accordionModule;","function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\n/*!\n * GSAP 3.12.5\n * https://gsap.com\n *\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nvar _config = {\n  autoSleep: 120,\n  force3D: \"auto\",\n  nullTargetWarn: 1,\n  units: {\n    lineHeight: \"\"\n  }\n},\n    _defaults = {\n  duration: .5,\n  overwrite: false,\n  delay: 0\n},\n    _suppressOverwrites,\n    _reverting,\n    _context,\n    _bigNum = 1e8,\n    _tinyNum = 1 / _bigNum,\n    _2PI = Math.PI * 2,\n    _HALF_PI = _2PI / 4,\n    _gsID = 0,\n    _sqrt = Math.sqrt,\n    _cos = Math.cos,\n    _sin = Math.sin,\n    _isString = function _isString(value) {\n  return typeof value === \"string\";\n},\n    _isFunction = function _isFunction(value) {\n  return typeof value === \"function\";\n},\n    _isNumber = function _isNumber(value) {\n  return typeof value === \"number\";\n},\n    _isUndefined = function _isUndefined(value) {\n  return typeof value === \"undefined\";\n},\n    _isObject = function _isObject(value) {\n  return typeof value === \"object\";\n},\n    _isNotFalse = function _isNotFalse(value) {\n  return value !== false;\n},\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _isFuncOrString = function _isFuncOrString(value) {\n  return _isFunction(value) || _isString(value);\n},\n    _isTypedArray = typeof ArrayBuffer === \"function\" && ArrayBuffer.isView || function () {},\n    // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\n_isArray = Array.isArray,\n    _strictNumExp = /(?:-?\\.?\\d|\\.)+/gi,\n    //only numbers (including negatives and decimals) but NOT relative values.\n_numExp = /[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,\n    //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\n_numWithUnitExp = /[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,\n    _complexStringNumExp = /[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,\n    //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\n_relExp = /[+-]=-?[.\\d]+/,\n    _delimitedValueExp = /[^,'\"\\[\\]\\s]+/gi,\n    // previously /[#\\-+.]*\\b[a-z\\d\\-=+%.]+/gi but didn't catch special characters.\n_unitExp = /^[+\\-=e\\s\\d]*\\d+[.\\d]*([a-z]*|%)\\s*$/i,\n    _globalTimeline,\n    _win,\n    _coreInitted,\n    _doc,\n    _globals = {},\n    _installScope = {},\n    _coreReady,\n    _install = function _install(scope) {\n  return (_installScope = _merge(scope, _globals)) && gsap;\n},\n    _missingPlugin = function _missingPlugin(property, value) {\n  return console.warn(\"Invalid property\", property, \"set to\", value, \"Missing plugin? gsap.registerPlugin()\");\n},\n    _warn = function _warn(message, suppress) {\n  return !suppress && console.warn(message);\n},\n    _addGlobal = function _addGlobal(name, obj) {\n  return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\n},\n    _emptyFunc = function _emptyFunc() {\n  return 0;\n},\n    _startAtRevertConfig = {\n  suppressEvents: true,\n  isStart: true,\n  kill: false\n},\n    _revertConfigNoKill = {\n  suppressEvents: true,\n  kill: false\n},\n    _revertConfig = {\n  suppressEvents: true\n},\n    _reservedProps = {},\n    _lazyTweens = [],\n    _lazyLookup = {},\n    _lastRenderedFrame,\n    _plugins = {},\n    _effects = {},\n    _nextGCFrame = 30,\n    _harnessPlugins = [],\n    _callbackNames = \"\",\n    _harness = function _harness(targets) {\n  var target = targets[0],\n      harnessPlugin,\n      i;\n  _isObject(target) || _isFunction(target) || (targets = [targets]);\n\n  if (!(harnessPlugin = (target._gsap || {}).harness)) {\n    // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\n    i = _harnessPlugins.length;\n\n    while (i-- && !_harnessPlugins[i].targetTest(target)) {}\n\n    harnessPlugin = _harnessPlugins[i];\n  }\n\n  i = targets.length;\n\n  while (i--) {\n    targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\n  }\n\n  return targets;\n},\n    _getCache = function _getCache(target) {\n  return target._gsap || _harness(toArray(target))[0]._gsap;\n},\n    _getProperty = function _getProperty(target, property, v) {\n  return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\n},\n    _forEachName = function _forEachName(names, func) {\n  return (names = names.split(\",\")).forEach(func) || names;\n},\n    //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\n_round = function _round(value) {\n  return Math.round(value * 100000) / 100000 || 0;\n},\n    _roundPrecise = function _roundPrecise(value) {\n  return Math.round(value * 10000000) / 10000000 || 0;\n},\n    // increased precision mostly for timing values.\n_parseRelative = function _parseRelative(start, value) {\n  var operator = value.charAt(0),\n      end = parseFloat(value.substr(2));\n  start = parseFloat(start);\n  return operator === \"+\" ? start + end : operator === \"-\" ? start - end : operator === \"*\" ? start * end : start / end;\n},\n    _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\n  //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\n  var l = toFind.length,\n      i = 0;\n\n  for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\n\n  return i < l;\n},\n    _lazyRender = function _lazyRender() {\n  var l = _lazyTweens.length,\n      a = _lazyTweens.slice(0),\n      i,\n      tween;\n\n  _lazyLookup = {};\n  _lazyTweens.length = 0;\n\n  for (i = 0; i < l; i++) {\n    tween = a[i];\n    tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\n  }\n},\n    _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\n  _lazyTweens.length && !_reverting && _lazyRender();\n  animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));\n  _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\n},\n    _numericIfPossible = function _numericIfPossible(value) {\n  var n = parseFloat(value);\n  return (n || n === 0) && (value + \"\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\n},\n    _passThrough = function _passThrough(p) {\n  return p;\n},\n    _setDefaults = function _setDefaults(obj, defaults) {\n  for (var p in defaults) {\n    p in obj || (obj[p] = defaults[p]);\n  }\n\n  return obj;\n},\n    _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\n  return function (obj, defaults) {\n    for (var p in defaults) {\n      p in obj || p === \"duration\" && excludeDuration || p === \"ease\" || (obj[p] = defaults[p]);\n    }\n  };\n},\n    _merge = function _merge(base, toMerge) {\n  for (var p in toMerge) {\n    base[p] = toMerge[p];\n  }\n\n  return base;\n},\n    _mergeDeep = function _mergeDeep(base, toMerge) {\n  for (var p in toMerge) {\n    p !== \"__proto__\" && p !== \"constructor\" && p !== \"prototype\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\n  }\n\n  return base;\n},\n    _copyExcluding = function _copyExcluding(obj, excluding) {\n  var copy = {},\n      p;\n\n  for (p in obj) {\n    p in excluding || (copy[p] = obj[p]);\n  }\n\n  return copy;\n},\n    _inheritDefaults = function _inheritDefaults(vars) {\n  var parent = vars.parent || _globalTimeline,\n      func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\n\n  if (_isNotFalse(vars.inherit)) {\n    while (parent) {\n      func(vars, parent.vars.defaults);\n      parent = parent.parent || parent._dp;\n    }\n  }\n\n  return vars;\n},\n    _arraysMatch = function _arraysMatch(a1, a2) {\n  var i = a1.length,\n      match = i === a2.length;\n\n  while (match && i-- && a1[i] === a2[i]) {}\n\n  return i < 0;\n},\n    _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\n  if (firstProp === void 0) {\n    firstProp = \"_first\";\n  }\n\n  if (lastProp === void 0) {\n    lastProp = \"_last\";\n  }\n\n  var prev = parent[lastProp],\n      t;\n\n  if (sortBy) {\n    t = child[sortBy];\n\n    while (prev && prev[sortBy] > t) {\n      prev = prev._prev;\n    }\n  }\n\n  if (prev) {\n    child._next = prev._next;\n    prev._next = child;\n  } else {\n    child._next = parent[firstProp];\n    parent[firstProp] = child;\n  }\n\n  if (child._next) {\n    child._next._prev = child;\n  } else {\n    parent[lastProp] = child;\n  }\n\n  child._prev = prev;\n  child.parent = child._dp = parent;\n  return child;\n},\n    _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\n  if (firstProp === void 0) {\n    firstProp = \"_first\";\n  }\n\n  if (lastProp === void 0) {\n    lastProp = \"_last\";\n  }\n\n  var prev = child._prev,\n      next = child._next;\n\n  if (prev) {\n    prev._next = next;\n  } else if (parent[firstProp] === child) {\n    parent[firstProp] = next;\n  }\n\n  if (next) {\n    next._prev = prev;\n  } else if (parent[lastProp] === child) {\n    parent[lastProp] = prev;\n  }\n\n  child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\n},\n    _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\n  child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);\n  child._act = 0;\n},\n    _uncache = function _uncache(animation, child) {\n  if (animation && (!child || child._end > animation._dur || child._start < 0)) {\n    // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\n    var a = animation;\n\n    while (a) {\n      a._dirty = 1;\n      a = a.parent;\n    }\n  }\n\n  return animation;\n},\n    _recacheAncestors = function _recacheAncestors(animation) {\n  var parent = animation.parent;\n\n  while (parent && parent.parent) {\n    //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\n    parent._dirty = 1;\n    parent.totalDuration();\n    parent = parent.parent;\n  }\n\n  return animation;\n},\n    _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {\n  return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));\n},\n    _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\n  return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\n},\n    _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\n  return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\n},\n    // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\n  var whole = Math.floor(tTime /= cycleDuration);\n  return tTime && whole === tTime ? whole - 1 : whole;\n},\n    _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\n  return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\n},\n    _setEnd = function _setEnd(animation) {\n  return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\n},\n    _alignPlayhead = function _alignPlayhead(animation, totalTime) {\n  // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\n  var parent = animation._dp;\n\n  if (parent && parent.smoothChildTiming && animation._ts) {\n    animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\n\n    _setEnd(animation);\n\n    parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\n  }\n\n  return animation;\n},\n\n/*\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\n\tlet cycleDuration = duration + repeatDelay,\n\t\ttime = _round(clampedTotalTime % cycleDuration);\n\tif (time > duration) {\n\t\ttime = duration;\n\t}\n\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\n},\n*/\n_postAddChecks = function _postAddChecks(timeline, child) {\n  var t;\n\n  if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {\n    // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true).\n    t = _parentToChildTotalTime(timeline.rawTime(), child);\n\n    if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\n      child.render(t, true);\n    }\n  } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\n\n\n  if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\n    //in case any of the ancestors had completed but should now be enabled...\n    if (timeline._dur < timeline.duration()) {\n      t = timeline;\n\n      while (t._dp) {\n        t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\n\n        t = t._dp;\n      }\n    }\n\n    timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\n  }\n},\n    _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\n  child.parent && _removeFromParent(child);\n  child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\n  child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\n\n  _addLinkedListItem(timeline, child, \"_first\", \"_last\", timeline._sort ? \"_start\" : 0);\n\n  _isFromOrFromStart(child) || (timeline._recent = child);\n  skipChecks || _postAddChecks(timeline, child);\n  timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)\n\n  return timeline;\n},\n    _scrollTrigger = function _scrollTrigger(animation, trigger) {\n  return (_globals.ScrollTrigger || _missingPlugin(\"scrollTrigger\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\n},\n    _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {\n  _initTween(tween, time, tTime);\n\n  if (!tween._initted) {\n    return 1;\n  }\n\n  if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\n    _lazyTweens.push(tween);\n\n    tween._lazy = [tTime, suppressEvents];\n    return 1;\n  }\n},\n    _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\n  var parent = _ref.parent;\n  return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\n},\n    // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\n  var data = _ref2.data;\n  return data === \"isFromStart\" || data === \"isStart\";\n},\n    _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\n  var prevRatio = tween.ratio,\n      ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\n      // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \"startAt\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \"from\" and \"fromTo\" startAt tweens are rendered the first time at a ratio of 1.\n  repeatDelay = tween._rDelay,\n      tTime = 0,\n      pt,\n      iteration,\n      prevIteration;\n\n  if (repeatDelay && tween._repeat) {\n    // in case there's a zero-duration tween that has a repeat with a repeatDelay\n    tTime = _clamp(0, tween._tDur, totalTime);\n    iteration = _animationCycle(tTime, repeatDelay);\n    tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\n\n    if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\n      // if iteration changed\n      prevRatio = 1 - ratio;\n      tween.vars.repeatRefresh && tween._initted && tween.invalidate();\n    }\n  }\n\n  if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\n    if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {\n      // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\n      return;\n    }\n\n    prevIteration = tween._zTime;\n    tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n    suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\n\n    tween.ratio = ratio;\n    tween._from && (ratio = 1 - ratio);\n    tween._time = 0;\n    tween._tTime = tTime;\n    pt = tween._pt;\n\n    while (pt) {\n      pt.r(ratio, pt.d);\n      pt = pt._next;\n    }\n\n    totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);\n    tween._onUpdate && !suppressEvents && _callback(tween, \"onUpdate\");\n    tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \"onRepeat\");\n\n    if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\n      ratio && _removeFromParent(tween, 1);\n\n      if (!suppressEvents && !_reverting) {\n        _callback(tween, ratio ? \"onComplete\" : \"onReverseComplete\", true);\n\n        tween._prom && tween._prom();\n      }\n    }\n  } else if (!tween._zTime) {\n    tween._zTime = totalTime;\n  }\n},\n    _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\n  var child;\n\n  if (time > prevTime) {\n    child = animation._first;\n\n    while (child && child._start <= time) {\n      if (child.data === \"isPause\" && child._start > prevTime) {\n        return child;\n      }\n\n      child = child._next;\n    }\n  } else {\n    child = animation._last;\n\n    while (child && child._start >= time) {\n      if (child.data === \"isPause\" && child._start < prevTime) {\n        return child;\n      }\n\n      child = child._prev;\n    }\n  }\n},\n    _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\n  var repeat = animation._repeat,\n      dur = _roundPrecise(duration) || 0,\n      totalProgress = animation._tTime / animation._tDur;\n  totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\n  animation._dur = dur;\n  animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\n  totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);\n  animation.parent && _setEnd(animation);\n  skipUncache || _uncache(animation.parent, animation);\n  return animation;\n},\n    _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\n  return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\n},\n    _zeroPosition = {\n  _start: 0,\n  endTime: _emptyFunc,\n  totalDuration: _emptyFunc\n},\n    _parsePosition = function _parsePosition(animation, position, percentAnimation) {\n  var labels = animation.labels,\n      recent = animation._recent || _zeroPosition,\n      clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\n      //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\n  i,\n      offset,\n      isPercent;\n\n  if (_isString(position) && (isNaN(position) || position in labels)) {\n    //if the string is a number like \"1\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\n    offset = position.charAt(0);\n    isPercent = position.substr(-1) === \"%\";\n    i = position.indexOf(\"=\");\n\n    if (offset === \"<\" || offset === \">\") {\n      i >= 0 && (position = position.replace(/=/, \"\"));\n      return (offset === \"<\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\n    }\n\n    if (i < 0) {\n      position in labels || (labels[position] = clippedDuration);\n      return labels[position];\n    }\n\n    offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\n\n    if (isPercent && percentAnimation) {\n      offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\n    }\n\n    return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\n  }\n\n  return position == null ? clippedDuration : +position;\n},\n    _createTweenType = function _createTweenType(type, params, timeline) {\n  var isLegacy = _isNumber(params[1]),\n      varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\n      vars = params[varsIndex],\n      irVars,\n      parent;\n\n  isLegacy && (vars.duration = params[1]);\n  vars.parent = timeline;\n\n  if (type) {\n    irVars = vars;\n    parent = timeline;\n\n    while (parent && !(\"immediateRender\" in irVars)) {\n      // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\n      irVars = parent.vars.defaults || {};\n      parent = _isNotFalse(parent.vars.inherit) && parent.parent;\n    }\n\n    vars.immediateRender = _isNotFalse(irVars.immediateRender);\n    type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \"from\" vars\n  }\n\n  return new Tween(params[0], vars, params[varsIndex + 1]);\n},\n    _conditionalReturn = function _conditionalReturn(value, func) {\n  return value || value === 0 ? func(value) : func;\n},\n    _clamp = function _clamp(min, max, value) {\n  return value < min ? min : value > max ? max : value;\n},\n    getUnit = function getUnit(value, v) {\n  return !_isString(value) || !(v = _unitExp.exec(value)) ? \"\" : v[1];\n},\n    // note: protect against padded numbers as strings, like \"100.100\". That shouldn't return \"00\" as the unit. If it's numeric, return no unit.\nclamp = function clamp(min, max, value) {\n  return _conditionalReturn(value, function (v) {\n    return _clamp(min, max, v);\n  });\n},\n    _slice = [].slice,\n    _isArrayLike = function _isArrayLike(value, nonEmpty) {\n  return value && _isObject(value) && \"length\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\n},\n    _flatten = function _flatten(ar, leaveStrings, accumulator) {\n  if (accumulator === void 0) {\n    accumulator = [];\n  }\n\n  return ar.forEach(function (value) {\n    var _accumulator;\n\n    return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\n  }) || accumulator;\n},\n    //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\ntoArray = function toArray(value, scope, leaveStrings) {\n  return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\n},\n    selector = function selector(value) {\n  value = toArray(value)[0] || _warn(\"Invalid scope\") || {};\n  return function (v) {\n    var el = value.current || value.nativeElement || value;\n    return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\"Invalid scope\") || _doc.createElement(\"div\") : value);\n  };\n},\n    shuffle = function shuffle(a) {\n  return a.sort(function () {\n    return .5 - Math.random();\n  });\n},\n    // alternative that's a bit faster and more reliably diverse but bigger:   for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a;\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\ndistribute = function distribute(v) {\n  if (_isFunction(v)) {\n    return v;\n  }\n\n  var vars = _isObject(v) ? v : {\n    each: v\n  },\n      //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \"amount\" that's chunked out among them all.\n  ease = _parseEase(vars.ease),\n      from = vars.from || 0,\n      base = parseFloat(vars.base) || 0,\n      cache = {},\n      isDecimal = from > 0 && from < 1,\n      ratios = isNaN(from) || isDecimal,\n      axis = vars.axis,\n      ratioX = from,\n      ratioY = from;\n\n  if (_isString(from)) {\n    ratioX = ratioY = {\n      center: .5,\n      edges: .5,\n      end: 1\n    }[from] || 0;\n  } else if (!isDecimal && ratios) {\n    ratioX = from[0];\n    ratioY = from[1];\n  }\n\n  return function (i, target, a) {\n    var l = (a || vars).length,\n        distances = cache[l],\n        originX,\n        originY,\n        x,\n        y,\n        d,\n        j,\n        max,\n        min,\n        wrapAt;\n\n    if (!distances) {\n      wrapAt = vars.grid === \"auto\" ? 0 : (vars.grid || [1, _bigNum])[1];\n\n      if (!wrapAt) {\n        max = -_bigNum;\n\n        while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\n\n        wrapAt < l && wrapAt--;\n      }\n\n      distances = cache[l] = [];\n      originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\n      originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\n      max = 0;\n      min = _bigNum;\n\n      for (j = 0; j < l; j++) {\n        x = j % wrapAt - originX;\n        y = originY - (j / wrapAt | 0);\n        distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \"y\" ? y : x);\n        d > max && (max = d);\n        d < min && (min = d);\n      }\n\n      from === \"random\" && shuffle(distances);\n      distances.max = max - min;\n      distances.min = min;\n      distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \"y\" ? l / wrapAt : wrapAt) || 0) * (from === \"edges\" ? -1 : 1);\n      distances.b = l < 0 ? base - l : base;\n      distances.u = getUnit(vars.amount || vars.each) || 0; //unit\n\n      ease = ease && l < 0 ? _invertEase(ease) : ease;\n    }\n\n    l = (distances[i] - distances.min) / distances.max || 0;\n    return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\n  };\n},\n    _roundModifier = function _roundModifier(v) {\n  //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\n  var p = Math.pow(10, ((v + \"\").split(\".\")[1] || \"\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\n\n  return function (raw) {\n    var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);\n\n    return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\n  };\n},\n    snap = function snap(snapTo, value) {\n  var isArray = _isArray(snapTo),\n      radius,\n      is2D;\n\n  if (!isArray && _isObject(snapTo)) {\n    radius = isArray = snapTo.radius || _bigNum;\n\n    if (snapTo.values) {\n      snapTo = toArray(snapTo.values);\n\n      if (is2D = !_isNumber(snapTo[0])) {\n        radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\n      }\n    } else {\n      snapTo = _roundModifier(snapTo.increment);\n    }\n  }\n\n  return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\n    is2D = snapTo(raw);\n    return Math.abs(is2D - raw) <= radius ? is2D : raw;\n  } : function (raw) {\n    var x = parseFloat(is2D ? raw.x : raw),\n        y = parseFloat(is2D ? raw.y : 0),\n        min = _bigNum,\n        closest = 0,\n        i = snapTo.length,\n        dx,\n        dy;\n\n    while (i--) {\n      if (is2D) {\n        dx = snapTo[i].x - x;\n        dy = snapTo[i].y - y;\n        dx = dx * dx + dy * dy;\n      } else {\n        dx = Math.abs(snapTo[i] - x);\n      }\n\n      if (dx < min) {\n        min = dx;\n        closest = i;\n      }\n    }\n\n    closest = !radius || min <= radius ? snapTo[closest] : raw;\n    return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\n  });\n},\n    random = function random(min, max, roundingIncrement, returnFunction) {\n  return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\n    return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \"\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\n  });\n},\n    pipe = function pipe() {\n  for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\n    functions[_key] = arguments[_key];\n  }\n\n  return function (value) {\n    return functions.reduce(function (v, f) {\n      return f(v);\n    }, value);\n  };\n},\n    unitize = function unitize(func, unit) {\n  return function (value) {\n    return func(parseFloat(value)) + (unit || getUnit(value));\n  };\n},\n    normalize = function normalize(min, max, value) {\n  return mapRange(min, max, 0, 1, value);\n},\n    _wrapArray = function _wrapArray(a, wrapper, value) {\n  return _conditionalReturn(value, function (index) {\n    return a[~~wrapper(index)];\n  });\n},\n    wrap = function wrap(min, max, value) {\n  // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\n  var range = max - min;\n  return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\n    return (range + (value - min) % range) % range + min;\n  });\n},\n    wrapYoyo = function wrapYoyo(min, max, value) {\n  var range = max - min,\n      total = range * 2;\n  return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\n    value = (total + (value - min) % total) % total || 0;\n    return min + (value > range ? total - value : value);\n  });\n},\n    _replaceRandom = function _replaceRandom(value) {\n  //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\n  var prev = 0,\n      s = \"\",\n      i,\n      nums,\n      end,\n      isArray;\n\n  while (~(i = value.indexOf(\"random(\", prev))) {\n    end = value.indexOf(\")\", i);\n    isArray = value.charAt(i + 7) === \"[\";\n    nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\n    s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\n    prev = end + 1;\n  }\n\n  return s + value.substr(prev, value.length - prev);\n},\n    mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\n  var inRange = inMax - inMin,\n      outRange = outMax - outMin;\n  return _conditionalReturn(value, function (value) {\n    return outMin + ((value - inMin) / inRange * outRange || 0);\n  });\n},\n    interpolate = function interpolate(start, end, progress, mutate) {\n  var func = isNaN(start + end) ? 0 : function (p) {\n    return (1 - p) * start + p * end;\n  };\n\n  if (!func) {\n    var isString = _isString(start),\n        master = {},\n        p,\n        i,\n        interpolators,\n        l,\n        il;\n\n    progress === true && (mutate = 1) && (progress = null);\n\n    if (isString) {\n      start = {\n        p: start\n      };\n      end = {\n        p: end\n      };\n    } else if (_isArray(start) && !_isArray(end)) {\n      interpolators = [];\n      l = start.length;\n      il = l - 2;\n\n      for (i = 1; i < l; i++) {\n        interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\n      }\n\n      l--;\n\n      func = function func(p) {\n        p *= l;\n        var i = Math.min(il, ~~p);\n        return interpolators[i](p - i);\n      };\n\n      progress = end;\n    } else if (!mutate) {\n      start = _merge(_isArray(start) ? [] : {}, start);\n    }\n\n    if (!interpolators) {\n      for (p in end) {\n        _addPropTween.call(master, start, p, \"get\", end[p]);\n      }\n\n      func = function func(p) {\n        return _renderPropTweens(p, master) || (isString ? start.p : start);\n      };\n    }\n  }\n\n  return _conditionalReturn(progress, func);\n},\n    _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\n  //used for nextLabel() and previousLabel()\n  var labels = timeline.labels,\n      min = _bigNum,\n      p,\n      distance,\n      label;\n\n  for (p in labels) {\n    distance = labels[p] - fromTime;\n\n    if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\n      label = p;\n      min = distance;\n    }\n  }\n\n  return label;\n},\n    _callback = function _callback(animation, type, executeLazyFirst) {\n  var v = animation.vars,\n      callback = v[type],\n      prevContext = _context,\n      context = animation._ctx,\n      params,\n      scope,\n      result;\n\n  if (!callback) {\n    return;\n  }\n\n  params = v[type + \"Params\"];\n  scope = v.callbackScope || animation;\n  executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\n\n  context && (_context = context);\n  result = params ? callback.apply(scope, params) : callback.call(scope);\n  _context = prevContext;\n  return result;\n},\n    _interrupt = function _interrupt(animation) {\n  _removeFromParent(animation);\n\n  animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);\n  animation.progress() < 1 && _callback(animation, \"onInterrupt\");\n  return animation;\n},\n    _quickTween,\n    _registerPluginQueue = [],\n    _createPlugin = function _createPlugin(config) {\n  if (!config) return;\n  config = !config.name && config[\"default\"] || config; // UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\n\n  if (_windowExists() || config.headless) {\n    // edge case: some build tools may pass in a null/undefined value\n    var name = config.name,\n        isFunc = _isFunction(config),\n        Plugin = name && !isFunc && config.init ? function () {\n      this._props = [];\n    } : config,\n        //in case someone passes in an object that's not a plugin, like CustomEase\n    instanceDefaults = {\n      init: _emptyFunc,\n      render: _renderPropTweens,\n      add: _addPropTween,\n      kill: _killPropTweensOf,\n      modifier: _addPluginModifier,\n      rawVars: 0\n    },\n        statics = {\n      targetTest: 0,\n      get: 0,\n      getSetter: _getSetter,\n      aliases: {},\n      register: 0\n    };\n\n    _wake();\n\n    if (config !== Plugin) {\n      if (_plugins[name]) {\n        return;\n      }\n\n      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\n\n\n      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\n\n\n      _plugins[Plugin.prop = name] = Plugin;\n\n      if (config.targetTest) {\n        _harnessPlugins.push(Plugin);\n\n        _reservedProps[name] = 1;\n      }\n\n      name = (name === \"css\" ? \"CSS\" : name.charAt(0).toUpperCase() + name.substr(1)) + \"Plugin\"; //for the global name. \"motionPath\" should become MotionPathPlugin\n    }\n\n    _addGlobal(name, Plugin);\n\n    config.register && config.register(gsap, Plugin, PropTween);\n  } else {\n    _registerPluginQueue.push(config);\n  }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * COLORS\n * --------------------------------------------------------------------------------------\n */\n_255 = 255,\n    _colorLookup = {\n  aqua: [0, _255, _255],\n  lime: [0, _255, 0],\n  silver: [192, 192, 192],\n  black: [0, 0, 0],\n  maroon: [128, 0, 0],\n  teal: [0, 128, 128],\n  blue: [0, 0, _255],\n  navy: [0, 0, 128],\n  white: [_255, _255, _255],\n  olive: [128, 128, 0],\n  yellow: [_255, _255, 0],\n  orange: [_255, 165, 0],\n  gray: [128, 128, 128],\n  purple: [128, 0, 128],\n  green: [0, 128, 0],\n  red: [_255, 0, 0],\n  pink: [_255, 192, 203],\n  cyan: [0, _255, _255],\n  transparent: [_255, _255, _255, 0]\n},\n    // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:\n// let ctx = _doc.createElement(\"canvas\").getContext(\"2d\");\n// _forEachName(\"aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan\", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});\n_hue = function _hue(h, m1, m2) {\n  h += h < 0 ? 1 : h > 1 ? -1 : 0;\n  return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\n},\n    splitColor = function splitColor(v, toHSL, forceAlpha) {\n  var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\n      r,\n      g,\n      b,\n      h,\n      s,\n      l,\n      max,\n      min,\n      d,\n      wasHSL;\n\n  if (!a) {\n    if (v.substr(-1) === \",\") {\n      //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\" - in this example \"blue,\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\n      v = v.substr(0, v.length - 1);\n    }\n\n    if (_colorLookup[v]) {\n      a = _colorLookup[v];\n    } else if (v.charAt(0) === \"#\") {\n      if (v.length < 6) {\n        //for shorthand like #9F0 or #9F0F (could have alpha)\n        r = v.charAt(1);\n        g = v.charAt(2);\n        b = v.charAt(3);\n        v = \"#\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \"\");\n      }\n\n      if (v.length === 9) {\n        // hex with alpha, like #fd5e53ff\n        a = parseInt(v.substr(1, 6), 16);\n        return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\n      }\n\n      v = parseInt(v.substr(1), 16);\n      a = [v >> 16, v >> 8 & _255, v & _255];\n    } else if (v.substr(0, 3) === \"hsl\") {\n      a = wasHSL = v.match(_strictNumExp);\n\n      if (!toHSL) {\n        h = +a[0] % 360 / 360;\n        s = +a[1] / 100;\n        l = +a[2] / 100;\n        g = l <= .5 ? l * (s + 1) : l + s - l * s;\n        r = l * 2 - g;\n        a.length > 3 && (a[3] *= 1); //cast as number\n\n        a[0] = _hue(h + 1 / 3, r, g);\n        a[1] = _hue(h, r, g);\n        a[2] = _hue(h - 1 / 3, r, g);\n      } else if (~v.indexOf(\"=\")) {\n        //if relative values are found, just return the raw strings with the relative prefixes in place.\n        a = v.match(_numExp);\n        forceAlpha && a.length < 4 && (a[3] = 1);\n        return a;\n      }\n    } else {\n      a = v.match(_strictNumExp) || _colorLookup.transparent;\n    }\n\n    a = a.map(Number);\n  }\n\n  if (toHSL && !wasHSL) {\n    r = a[0] / _255;\n    g = a[1] / _255;\n    b = a[2] / _255;\n    max = Math.max(r, g, b);\n    min = Math.min(r, g, b);\n    l = (max + min) / 2;\n\n    if (max === min) {\n      h = s = 0;\n    } else {\n      d = max - min;\n      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n      h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\n      h *= 60;\n    }\n\n    a[0] = ~~(h + .5);\n    a[1] = ~~(s * 100 + .5);\n    a[2] = ~~(l * 100 + .5);\n  }\n\n  forceAlpha && a.length < 4 && (a[3] = 1);\n  return a;\n},\n    _colorOrderData = function _colorOrderData(v) {\n  // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \"c\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\n  var values = [],\n      c = [],\n      i = -1;\n  v.split(_colorExp).forEach(function (v) {\n    var a = v.match(_numWithUnitExp) || [];\n    values.push.apply(values, a);\n    c.push(i += a.length + 1);\n  });\n  values.c = c;\n  return values;\n},\n    _formatColors = function _formatColors(s, toHSL, orderMatchData) {\n  var result = \"\",\n      colors = (s + result).match(_colorExp),\n      type = toHSL ? \"hsla(\" : \"rgba(\",\n      i = 0,\n      c,\n      shell,\n      d,\n      l;\n\n  if (!colors) {\n    return s;\n  }\n\n  colors = colors.map(function (color) {\n    return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \",\" + color[1] + \"%,\" + color[2] + \"%,\" + color[3] : color.join(\",\")) + \")\";\n  });\n\n  if (orderMatchData) {\n    d = _colorOrderData(s);\n    c = orderMatchData.c;\n\n    if (c.join(result) !== d.c.join(result)) {\n      shell = s.replace(_colorExp, \"1\").split(_numWithUnitExp);\n      l = shell.length - 1;\n\n      for (; i < l; i++) {\n        result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \"0,0,0,0)\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\n      }\n    }\n  }\n\n  if (!shell) {\n    shell = s.split(_colorExp);\n    l = shell.length - 1;\n\n    for (; i < l; i++) {\n      result += shell[i] + colors[i];\n    }\n  }\n\n  return result + shell[l];\n},\n    _colorExp = function () {\n  var s = \"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",\n      //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\n  p;\n\n  for (p in _colorLookup) {\n    s += \"|\" + p + \"\\\\b\";\n  }\n\n  return new RegExp(s + \")\", \"gi\");\n}(),\n    _hslExp = /hsl[a]?\\(/,\n    _colorStringFilter = function _colorStringFilter(a) {\n  var combined = a.join(\" \"),\n      toHSL;\n  _colorExp.lastIndex = 0;\n\n  if (_colorExp.test(combined)) {\n    toHSL = _hslExp.test(combined);\n    a[1] = _formatColors(a[1], toHSL);\n    a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\n\n    return true;\n  }\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TICKER\n * --------------------------------------------------------------------------------------\n */\n_tickerActive,\n    _ticker = function () {\n  var _getTime = Date.now,\n      _lagThreshold = 500,\n      _adjustedLag = 33,\n      _startTime = _getTime(),\n      _lastUpdate = _startTime,\n      _gap = 1000 / 240,\n      _nextTime = _gap,\n      _listeners = [],\n      _id,\n      _req,\n      _raf,\n      _self,\n      _delta,\n      _i,\n      _tick = function _tick(v) {\n    var elapsed = _getTime() - _lastUpdate,\n        manual = v === true,\n        overlap,\n        dispatch,\n        time,\n        frame;\n\n    (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);\n    _lastUpdate += elapsed;\n    time = _lastUpdate - _startTime;\n    overlap = time - _nextTime;\n\n    if (overlap > 0 || manual) {\n      frame = ++_self.frame;\n      _delta = time - _self.time * 1000;\n      _self.time = time = time / 1000;\n      _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\n      dispatch = 1;\n    }\n\n    manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \"tick\" event so that timing is maintained. Otherwise, if processing the \"tick\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\n\n    if (dispatch) {\n      for (_i = 0; _i < _listeners.length; _i++) {\n        // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\n        _listeners[_i](time, _delta, frame, v);\n      }\n    }\n  };\n\n  _self = {\n    time: 0,\n    frame: 0,\n    tick: function tick() {\n      _tick(true);\n    },\n    deltaRatio: function deltaRatio(fps) {\n      return _delta / (1000 / (fps || 60));\n    },\n    wake: function wake() {\n      if (_coreReady) {\n        if (!_coreInitted && _windowExists()) {\n          _win = _coreInitted = window;\n          _doc = _win.document || {};\n          _globals.gsap = gsap;\n          (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\n\n          _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\n\n          _registerPluginQueue.forEach(_createPlugin);\n        }\n\n        _raf = typeof requestAnimationFrame !== \"undefined\" && requestAnimationFrame;\n        _id && _self.sleep();\n\n        _req = _raf || function (f) {\n          return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\n        };\n\n        _tickerActive = 1;\n\n        _tick(2);\n      }\n    },\n    sleep: function sleep() {\n      (_raf ? cancelAnimationFrame : clearTimeout)(_id);\n      _tickerActive = 0;\n      _req = _emptyFunc;\n    },\n    lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\n      _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited\n\n      _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);\n    },\n    fps: function fps(_fps) {\n      _gap = 1000 / (_fps || 240);\n      _nextTime = _self.time * 1000 + _gap;\n    },\n    add: function add(callback, once, prioritize) {\n      var func = once ? function (t, d, f, v) {\n        callback(t, d, f, v);\n\n        _self.remove(func);\n      } : callback;\n\n      _self.remove(callback);\n\n      _listeners[prioritize ? \"unshift\" : \"push\"](func);\n\n      _wake();\n\n      return func;\n    },\n    remove: function remove(callback, i) {\n      ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\n    },\n    _listeners: _listeners\n  };\n  return _self;\n}(),\n    _wake = function _wake() {\n  return !_tickerActive && _ticker.wake();\n},\n    //also ensures the core classes are initialized.\n\n/*\n* -------------------------------------------------\n* EASING\n* -------------------------------------------------\n*/\n_easeMap = {},\n    _customEaseExp = /^[\\d.\\-M][\\d.\\-,\\s]/,\n    _quotesExp = /[\"']/g,\n    _parseObjectInString = function _parseObjectInString(value) {\n  //takes a string like \"{wiggles:10, type:anticipate})\" and turns it into a real object. Notice it ends in \")\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\n  var obj = {},\n      split = value.substr(1, value.length - 3).split(\":\"),\n      key = split[0],\n      i = 1,\n      l = split.length,\n      index,\n      val,\n      parsedVal;\n\n  for (; i < l; i++) {\n    val = split[i];\n    index = i !== l - 1 ? val.lastIndexOf(\",\") : val.length;\n    parsedVal = val.substr(0, index);\n    obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \"\").trim() : +parsedVal;\n    key = val.substr(index + 1).trim();\n  }\n\n  return obj;\n},\n    _valueInParentheses = function _valueInParentheses(value) {\n  var open = value.indexOf(\"(\") + 1,\n      close = value.indexOf(\")\"),\n      nested = value.indexOf(\"(\", open);\n  return value.substring(open, ~nested && nested < close ? value.indexOf(\")\", close + 1) : close);\n},\n    _configEaseFromString = function _configEaseFromString(name) {\n  //name can be a string like \"elastic.out(1,0.5)\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\n  var split = (name + \"\").split(\"(\"),\n      ease = _easeMap[split[0]];\n  return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\"{\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\",\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\"\", name) : ease;\n},\n    _invertEase = function _invertEase(ease) {\n  return function (p) {\n    return 1 - ease(1 - p);\n  };\n},\n    // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\n  var child = timeline._first,\n      ease;\n\n  while (child) {\n    if (child instanceof Timeline) {\n      _propagateYoyoEase(child, isYoyo);\n    } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\n      if (child.timeline) {\n        _propagateYoyoEase(child.timeline, isYoyo);\n      } else {\n        ease = child._ease;\n        child._ease = child._yEase;\n        child._yEase = ease;\n        child._yoyo = isYoyo;\n      }\n    }\n\n    child = child._next;\n  }\n},\n    _parseEase = function _parseEase(ease, defaultEase) {\n  return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\n},\n    _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\n  if (easeOut === void 0) {\n    easeOut = function easeOut(p) {\n      return 1 - easeIn(1 - p);\n    };\n  }\n\n  if (easeInOut === void 0) {\n    easeInOut = function easeInOut(p) {\n      return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\n    };\n  }\n\n  var ease = {\n    easeIn: easeIn,\n    easeOut: easeOut,\n    easeInOut: easeInOut\n  },\n      lowercaseName;\n\n  _forEachName(names, function (name) {\n    _easeMap[name] = _globals[name] = ease;\n    _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\n\n    for (var p in ease) {\n      _easeMap[lowercaseName + (p === \"easeIn\" ? \".in\" : p === \"easeOut\" ? \".out\" : \".inOut\")] = _easeMap[name + \".\" + p] = ease[p];\n    }\n  });\n\n  return ease;\n},\n    _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\n  return function (p) {\n    return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\n  };\n},\n    _configElastic = function _configElastic(type, amplitude, period) {\n  var p1 = amplitude >= 1 ? amplitude : 1,\n      //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\n  p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\n      p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\n      easeOut = function easeOut(p) {\n    return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\n  },\n      ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n    return 1 - easeOut(1 - p);\n  } : _easeInOutFromOut(easeOut);\n\n  p2 = _2PI / p2; //precalculate to optimize\n\n  ease.config = function (amplitude, period) {\n    return _configElastic(type, amplitude, period);\n  };\n\n  return ease;\n},\n    _configBack = function _configBack(type, overshoot) {\n  if (overshoot === void 0) {\n    overshoot = 1.70158;\n  }\n\n  var easeOut = function easeOut(p) {\n    return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\n  },\n      ease = type === \"out\" ? easeOut : type === \"in\" ? function (p) {\n    return 1 - easeOut(1 - p);\n  } : _easeInOutFromOut(easeOut);\n\n  ease.config = function (overshoot) {\n    return _configBack(type, overshoot);\n  };\n\n  return ease;\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEase = ratio => {\n// \tlet y = 0.5 + ratio / 2;\n// \treturn p => (2 * (1 - p) * p * y + p * p);\n// },\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\n// _weightedEaseStrong = ratio => {\n// \tratio = .5 + ratio / 2;\n// \tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\n// \t\tb = ratio - o,\n// \t\tc = ratio + o;\n// \treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\n// };\n\n\n_forEachName(\"Linear,Quad,Cubic,Quart,Quint,Strong\", function (name, i) {\n  var power = i < 5 ? i + 1 : i;\n\n  _insertEase(name + \",Power\" + (power - 1), i ? function (p) {\n    return Math.pow(p, power);\n  } : function (p) {\n    return p;\n  }, function (p) {\n    return 1 - Math.pow(1 - p, power);\n  }, function (p) {\n    return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\n  });\n});\n\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\n\n_insertEase(\"Elastic\", _configElastic(\"in\"), _configElastic(\"out\"), _configElastic());\n\n(function (n, c) {\n  var n1 = 1 / c,\n      n2 = 2 * n1,\n      n3 = 2.5 * n1,\n      easeOut = function easeOut(p) {\n    return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\n  };\n\n  _insertEase(\"Bounce\", function (p) {\n    return 1 - easeOut(1 - p);\n  }, easeOut);\n})(7.5625, 2.75);\n\n_insertEase(\"Expo\", function (p) {\n  return p ? Math.pow(2, 10 * (p - 1)) : 0;\n});\n\n_insertEase(\"Circ\", function (p) {\n  return -(_sqrt(1 - p * p) - 1);\n});\n\n_insertEase(\"Sine\", function (p) {\n  return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\n});\n\n_insertEase(\"Back\", _configBack(\"in\"), _configBack(\"out\"), _configBack());\n\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\n  config: function config(steps, immediateStart) {\n    if (steps === void 0) {\n      steps = 1;\n    }\n\n    var p1 = 1 / steps,\n        p2 = steps + (immediateStart ? 0 : 1),\n        p3 = immediateStart ? 1 : 0,\n        max = 1 - _tinyNum;\n    return function (p) {\n      return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\n    };\n  }\n};\n_defaults.ease = _easeMap[\"quad.out\"];\n\n_forEachName(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\", function (name) {\n  return _callbackNames += name + \",\" + name + \"Params,\";\n});\n/*\n * --------------------------------------------------------------------------------------\n * CACHE\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var GSCache = function GSCache(target, harness) {\n  this.id = _gsID++;\n  target._gsap = this;\n  this.target = target;\n  this.harness = harness;\n  this.get = harness ? harness.get : _getProperty;\n  this.set = harness ? harness.getSetter : _getSetter;\n};\n/*\n * --------------------------------------------------------------------------------------\n * ANIMATION\n * --------------------------------------------------------------------------------------\n */\n\nexport var Animation = /*#__PURE__*/function () {\n  function Animation(vars) {\n    this.vars = vars;\n    this._delay = +vars.delay || 0;\n\n    if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\n      // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\n      this._rDelay = vars.repeatDelay || 0;\n      this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\n    }\n\n    this._ts = 1;\n\n    _setDuration(this, +vars.duration, 1, 1);\n\n    this.data = vars.data;\n\n    if (_context) {\n      this._ctx = _context;\n\n      _context.data.push(this);\n    }\n\n    _tickerActive || _ticker.wake();\n  }\n\n  var _proto = Animation.prototype;\n\n  _proto.delay = function delay(value) {\n    if (value || value === 0) {\n      this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\n      this._delay = value;\n      return this;\n    }\n\n    return this._delay;\n  };\n\n  _proto.duration = function duration(value) {\n    return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\n  };\n\n  _proto.totalDuration = function totalDuration(value) {\n    if (!arguments.length) {\n      return this._tDur;\n    }\n\n    this._dirty = 0;\n    return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\n  };\n\n  _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\n    _wake();\n\n    if (!arguments.length) {\n      return this._tTime;\n    }\n\n    var parent = this._dp;\n\n    if (parent && parent.smoothChildTiming && this._ts) {\n      _alignPlayhead(this, _totalTime);\n\n      !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\n      //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\n\n      while (parent && parent.parent) {\n        if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\n          parent.totalTime(parent._tTime, true);\n        }\n\n        parent = parent.parent;\n      }\n\n      if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\n        //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\n        _addToTimeline(this._dp, this, this._start - this._delay);\n      }\n    }\n\n    if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\n      // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\n      this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\n      //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\n      //   this._lock = 1;\n\n      _lazySafeRender(this, _totalTime, suppressEvents); //   this._lock = 0;\n      //}\n\n    }\n\n    return this;\n  };\n\n  _proto.time = function time(value, suppressEvents) {\n    return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\n  };\n\n  _proto.totalProgress = function totalProgress(value, suppressEvents) {\n    return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() > 0 ? 1 : 0;\n  };\n\n  _proto.progress = function progress(value, suppressEvents) {\n    return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;\n  };\n\n  _proto.iteration = function iteration(value, suppressEvents) {\n    var cycleDuration = this.duration() + this._rDelay;\n\n    return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\n  } // potential future addition:\n  // isPlayingBackwards() {\n  // \tlet animation = this,\n  // \t\torientation = 1; // 1 = forward, -1 = backward\n  // \twhile (animation) {\n  // \t\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\n  // \t\tanimation = animation.parent;\n  // \t}\n  // \treturn orientation < 0;\n  // }\n  ;\n\n  _proto.timeScale = function timeScale(value, suppressEvents) {\n    if (!arguments.length) {\n      return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\n    }\n\n    if (this._rts === value) {\n      return this;\n    }\n\n    var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\n    // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\n    //(+value < 0 && this._rts >= 0) && _callback(this, \"onReverse\", true);\n    // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\n\n    this._rts = +value || 0;\n    this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\n\n    this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), suppressEvents !== false);\n\n    _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\n\n\n    return _recacheAncestors(this);\n  };\n\n  _proto.paused = function paused(value) {\n    if (!arguments.length) {\n      return this._ps;\n    }\n\n    if (this._ps !== value) {\n      this._ps = value;\n\n      if (value) {\n        this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\n\n        this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \"real\" timeScale as _rts (recorded time scale)\n      } else {\n        _wake();\n\n        this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\n\n        this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\n      }\n    }\n\n    return this;\n  };\n\n  _proto.startTime = function startTime(value) {\n    if (arguments.length) {\n      this._start = value;\n      var parent = this.parent || this._dp;\n      parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\n      return this;\n    }\n\n    return this._start;\n  };\n\n  _proto.endTime = function endTime(includeRepeats) {\n    return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\n  };\n\n  _proto.rawTime = function rawTime(wrapRepeats) {\n    var parent = this.parent || this._dp; // _dp = detached parent\n\n    return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\n  };\n\n  _proto.revert = function revert(config) {\n    if (config === void 0) {\n      config = _revertConfig;\n    }\n\n    var prevIsReverting = _reverting;\n    _reverting = config;\n\n    if (this._initted || this._startAt) {\n      this.timeline && this.timeline.revert(config);\n      this.totalTime(-0.01, config.suppressEvents);\n    }\n\n    this.data !== \"nested\" && config.kill !== false && this.kill();\n    _reverting = prevIsReverting;\n    return this;\n  };\n\n  _proto.globalTime = function globalTime(rawTime) {\n    var animation = this,\n        time = arguments.length ? rawTime : animation.rawTime();\n\n    while (animation) {\n      time = animation._start + time / (Math.abs(animation._ts) || 1);\n      animation = animation._dp;\n    }\n\n    return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). \"_sat\" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().\n  };\n\n  _proto.repeat = function repeat(value) {\n    if (arguments.length) {\n      this._repeat = value === Infinity ? -2 : value;\n      return _onUpdateTotalDuration(this);\n    }\n\n    return this._repeat === -2 ? Infinity : this._repeat;\n  };\n\n  _proto.repeatDelay = function repeatDelay(value) {\n    if (arguments.length) {\n      var time = this._time;\n      this._rDelay = value;\n\n      _onUpdateTotalDuration(this);\n\n      return time ? this.time(time) : this;\n    }\n\n    return this._rDelay;\n  };\n\n  _proto.yoyo = function yoyo(value) {\n    if (arguments.length) {\n      this._yoyo = value;\n      return this;\n    }\n\n    return this._yoyo;\n  };\n\n  _proto.seek = function seek(position, suppressEvents) {\n    return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\n  };\n\n  _proto.restart = function restart(includeDelay, suppressEvents) {\n    return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\n  };\n\n  _proto.play = function play(from, suppressEvents) {\n    from != null && this.seek(from, suppressEvents);\n    return this.reversed(false).paused(false);\n  };\n\n  _proto.reverse = function reverse(from, suppressEvents) {\n    from != null && this.seek(from || this.totalDuration(), suppressEvents);\n    return this.reversed(true).paused(false);\n  };\n\n  _proto.pause = function pause(atTime, suppressEvents) {\n    atTime != null && this.seek(atTime, suppressEvents);\n    return this.paused(true);\n  };\n\n  _proto.resume = function resume() {\n    return this.paused(false);\n  };\n\n  _proto.reversed = function reversed(value) {\n    if (arguments.length) {\n      !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\n\n      return this;\n    }\n\n    return this._rts < 0;\n  };\n\n  _proto.invalidate = function invalidate() {\n    this._initted = this._act = 0;\n    this._zTime = -_tinyNum;\n    return this;\n  };\n\n  _proto.isActive = function isActive() {\n    var parent = this.parent || this._dp,\n        start = this._start,\n        rawTime;\n    return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\n  };\n\n  _proto.eventCallback = function eventCallback(type, callback, params) {\n    var vars = this.vars;\n\n    if (arguments.length > 1) {\n      if (!callback) {\n        delete vars[type];\n      } else {\n        vars[type] = callback;\n        params && (vars[type + \"Params\"] = params);\n        type === \"onUpdate\" && (this._onUpdate = callback);\n      }\n\n      return this;\n    }\n\n    return vars[type];\n  };\n\n  _proto.then = function then(onFulfilled) {\n    var self = this;\n    return new Promise(function (resolve) {\n      var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\n          _resolve = function _resolve() {\n        var _then = self.then;\n        self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\n\n        _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\n        resolve(f);\n        self.then = _then;\n      };\n\n      if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\n        _resolve();\n      } else {\n        self._prom = _resolve;\n      }\n    });\n  };\n\n  _proto.kill = function kill() {\n    _interrupt(this);\n  };\n\n  return Animation;\n}();\n\n_setDefaults(Animation.prototype, {\n  _time: 0,\n  _start: 0,\n  _end: 0,\n  _tTime: 0,\n  _tDur: 0,\n  _dirty: 0,\n  _repeat: 0,\n  _yoyo: false,\n  parent: null,\n  _initted: false,\n  _rDelay: 0,\n  _ts: 1,\n  _dp: 0,\n  ratio: 0,\n  _zTime: -_tinyNum,\n  _prom: 0,\n  _ps: false,\n  _rts: 1\n});\n/*\n * -------------------------------------------------\n * TIMELINE\n * -------------------------------------------------\n */\n\n\nexport var Timeline = /*#__PURE__*/function (_Animation) {\n  _inheritsLoose(Timeline, _Animation);\n\n  function Timeline(vars, position) {\n    var _this;\n\n    if (vars === void 0) {\n      vars = {};\n    }\n\n    _this = _Animation.call(this, vars) || this;\n    _this.labels = {};\n    _this.smoothChildTiming = !!vars.smoothChildTiming;\n    _this.autoRemoveChildren = !!vars.autoRemoveChildren;\n    _this._sort = _isNotFalse(vars.sortChildren);\n    _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\n    vars.reversed && _this.reverse();\n    vars.paused && _this.paused(true);\n    vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\n    return _this;\n  }\n\n  var _proto2 = Timeline.prototype;\n\n  _proto2.to = function to(targets, vars, position) {\n    _createTweenType(0, arguments, this);\n\n    return this;\n  };\n\n  _proto2.from = function from(targets, vars, position) {\n    _createTweenType(1, arguments, this);\n\n    return this;\n  };\n\n  _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\n    _createTweenType(2, arguments, this);\n\n    return this;\n  };\n\n  _proto2.set = function set(targets, vars, position) {\n    vars.duration = 0;\n    vars.parent = this;\n    _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\n    vars.immediateRender = !!vars.immediateRender;\n    new Tween(targets, vars, _parsePosition(this, position), 1);\n    return this;\n  };\n\n  _proto2.call = function call(callback, params, position) {\n    return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\n  } //ONLY for backward compatibility! Maybe delete?\n  ;\n\n  _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    vars.duration = duration;\n    vars.stagger = vars.stagger || stagger;\n    vars.onComplete = onCompleteAll;\n    vars.onCompleteParams = onCompleteAllParams;\n    vars.parent = this;\n    new Tween(targets, vars, _parsePosition(this, position));\n    return this;\n  };\n\n  _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    vars.runBackwards = 1;\n    _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\n    return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\n  };\n\n  _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\n    toVars.startAt = fromVars;\n    _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\n    return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\n  };\n\n  _proto2.render = function render(totalTime, suppressEvents, force) {\n    var prevTime = this._time,\n        tDur = this._dirty ? this.totalDuration() : this._tDur,\n        dur = this._dur,\n        tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\n        // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\n    crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\n        time,\n        child,\n        next,\n        iteration,\n        cycleDuration,\n        prevPaused,\n        pauseTween,\n        timeScale,\n        prevStart,\n        prevIteration,\n        yoyo,\n        isYoyo;\n    this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\n\n    if (tTime !== this._tTime || force || crossingStart) {\n      if (prevTime !== this._time && dur) {\n        //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\n        tTime += this._time - prevTime;\n        totalTime += this._time - prevTime;\n      }\n\n      time = tTime;\n      prevStart = this._start;\n      timeScale = this._ts;\n      prevPaused = !timeScale;\n\n      if (crossingStart) {\n        dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\n\n        (totalTime || !suppressEvents) && (this._zTime = totalTime);\n      }\n\n      if (this._repeat) {\n        //adjust the time for repeats and yoyos\n        yoyo = this._yoyo;\n        cycleDuration = dur + this._rDelay;\n\n        if (this._repeat < -1 && totalTime < 0) {\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n        }\n\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n        if (tTime === tDur) {\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n          iteration = this._repeat;\n          time = dur;\n        } else {\n          iteration = ~~(tTime / cycleDuration);\n\n          if (iteration && iteration === tTime / cycleDuration) {\n            time = dur;\n            iteration--;\n          }\n\n          time > dur && (time = dur);\n        }\n\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\n        !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://gsap.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the \"repeatDelay\" portion\n\n        if (yoyo && iteration & 1) {\n          time = dur - time;\n          isYoyo = 1;\n        }\n        /*\n        make sure children at the end/beginning of the timeline are rendered properly. If, for example,\n        a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\n        would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\n        could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\n        we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\n        ensure that zero-duration tweens at the very beginning or end of the Timeline work.\n        */\n\n\n        if (iteration !== prevIteration && !this._lock) {\n          var rewinding = yoyo && prevIteration & 1,\n              doesWrap = rewinding === (yoyo && iteration & 1);\n          iteration < prevIteration && (rewinding = !rewinding);\n          prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time.\n\n          this._lock = 1;\n          this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\n          this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\n\n          !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n          this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\n\n          if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\n            // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\n            return this;\n          }\n\n          dur = this._dur; // in case the duration changed in the onRepeat\n\n          tDur = this._tDur;\n\n          if (doesWrap) {\n            this._lock = 2;\n            prevTime = rewinding ? dur : -0.0001;\n            this.render(prevTime, true);\n            this.vars.repeatRefresh && !isYoyo && this.invalidate();\n          }\n\n          this._lock = 0;\n\n          if (!this._ts && !prevPaused) {\n            return this;\n          } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\n\n\n          _propagateYoyoEase(this, isYoyo);\n        }\n      }\n\n      if (this._hasPause && !this._forcing && this._lock < 2) {\n        pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\n\n        if (pauseTween) {\n          tTime -= time - (time = pauseTween._start);\n        }\n      }\n\n      this._tTime = tTime;\n      this._time = time;\n      this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n      if (!this._initted) {\n        this._onUpdate = this.vars.onUpdate;\n        this._initted = 1;\n        this._zTime = totalTime;\n        prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\n      }\n\n      if (!prevTime && time && !suppressEvents && !iteration) {\n        _callback(this, \"onStart\");\n\n        if (this._tTime !== tTime) {\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n          return this;\n        }\n      }\n\n      if (time >= prevTime && totalTime >= 0) {\n        child = this._first;\n\n        while (child) {\n          next = child._next;\n\n          if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\n            if (child.parent !== this) {\n              // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n              return this.render(totalTime, suppressEvents, force);\n            }\n\n            child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\n\n            if (time !== this._time || !this._ts && !prevPaused) {\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n              pauseTween = 0;\n              next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n              break;\n            }\n          }\n\n          child = next;\n        }\n      } else {\n        child = this._last;\n        var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\n\n        while (child) {\n          next = child._prev;\n\n          if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\n            if (child.parent !== this) {\n              // an extreme edge case - the child's render could do something like kill() the \"next\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\n              return this.render(totalTime, suppressEvents, force);\n            }\n\n            child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.\n\n            if (time !== this._time || !this._ts && !prevPaused) {\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\n              pauseTween = 0;\n              next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\n\n              break;\n            }\n          }\n\n          child = next;\n        }\n      }\n\n      if (pauseTween && !suppressEvents) {\n        this.pause();\n        pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\n\n        if (this._ts) {\n          //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\n          this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\n\n          _setEnd(this);\n\n          return this.render(totalTime, suppressEvents, force);\n        }\n      }\n\n      this._onUpdate && !suppressEvents && _callback(this, \"onUpdate\", true);\n      if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\n        // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.\n        (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n        if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\n          _callback(this, tTime === tDur && totalTime >= 0 ? \"onComplete\" : \"onReverseComplete\", true);\n\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n        }\n      }\n    }\n\n    return this;\n  };\n\n  _proto2.add = function add(child, position) {\n    var _this2 = this;\n\n    _isNumber(position) || (position = _parsePosition(this, position, child));\n\n    if (!(child instanceof Animation)) {\n      if (_isArray(child)) {\n        child.forEach(function (obj) {\n          return _this2.add(obj, position);\n        });\n        return this;\n      }\n\n      if (_isString(child)) {\n        return this.addLabel(child, position);\n      }\n\n      if (_isFunction(child)) {\n        child = Tween.delayedCall(0, child);\n      } else {\n        return this;\n      }\n    }\n\n    return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\n  };\n\n  _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\n    if (nested === void 0) {\n      nested = true;\n    }\n\n    if (tweens === void 0) {\n      tweens = true;\n    }\n\n    if (timelines === void 0) {\n      timelines = true;\n    }\n\n    if (ignoreBeforeTime === void 0) {\n      ignoreBeforeTime = -_bigNum;\n    }\n\n    var a = [],\n        child = this._first;\n\n    while (child) {\n      if (child._start >= ignoreBeforeTime) {\n        if (child instanceof Tween) {\n          tweens && a.push(child);\n        } else {\n          timelines && a.push(child);\n          nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\n        }\n      }\n\n      child = child._next;\n    }\n\n    return a;\n  };\n\n  _proto2.getById = function getById(id) {\n    var animations = this.getChildren(1, 1, 1),\n        i = animations.length;\n\n    while (i--) {\n      if (animations[i].vars.id === id) {\n        return animations[i];\n      }\n    }\n  };\n\n  _proto2.remove = function remove(child) {\n    if (_isString(child)) {\n      return this.removeLabel(child);\n    }\n\n    if (_isFunction(child)) {\n      return this.killTweensOf(child);\n    }\n\n    _removeLinkedListItem(this, child);\n\n    if (child === this._recent) {\n      this._recent = this._last;\n    }\n\n    return _uncache(this);\n  };\n\n  _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\n    if (!arguments.length) {\n      return this._tTime;\n    }\n\n    this._forcing = 1;\n\n    if (!this._dp && this._ts) {\n      //special case for the global timeline (or any other that has no parent or detached parent).\n      this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\n    }\n\n    _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\n\n    this._forcing = 0;\n    return this;\n  };\n\n  _proto2.addLabel = function addLabel(label, position) {\n    this.labels[label] = _parsePosition(this, position);\n    return this;\n  };\n\n  _proto2.removeLabel = function removeLabel(label) {\n    delete this.labels[label];\n    return this;\n  };\n\n  _proto2.addPause = function addPause(position, callback, params) {\n    var t = Tween.delayedCall(0, callback || _emptyFunc, params);\n    t.data = \"isPause\";\n    this._hasPause = 1;\n    return _addToTimeline(this, t, _parsePosition(this, position));\n  };\n\n  _proto2.removePause = function removePause(position) {\n    var child = this._first;\n    position = _parsePosition(this, position);\n\n    while (child) {\n      if (child._start === position && child.data === \"isPause\") {\n        _removeFromParent(child);\n      }\n\n      child = child._next;\n    }\n  };\n\n  _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n    var tweens = this.getTweensOf(targets, onlyActive),\n        i = tweens.length;\n\n    while (i--) {\n      _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\n    }\n\n    return this;\n  };\n\n  _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\n    var a = [],\n        parsedTargets = toArray(targets),\n        child = this._first,\n        isGlobalTime = _isNumber(onlyActive),\n        // a number is interpreted as a global time. If the animation spans\n    children;\n\n    while (child) {\n      if (child instanceof Tween) {\n        if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\n          // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\n          a.push(child);\n        }\n      } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\n        a.push.apply(a, children);\n      }\n\n      child = child._next;\n    }\n\n    return a;\n  } // potential future feature - targets() on timelines\n  // targets() {\n  // \tlet result = [];\n  // \tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\n  // \treturn result.filter((v, i) => result.indexOf(v) === i);\n  // }\n  ;\n\n  _proto2.tweenTo = function tweenTo(position, vars) {\n    vars = vars || {};\n\n    var tl = this,\n        endTime = _parsePosition(tl, position),\n        _vars = vars,\n        startAt = _vars.startAt,\n        _onStart = _vars.onStart,\n        onStartParams = _vars.onStartParams,\n        immediateRender = _vars.immediateRender,\n        initted,\n        tween = Tween.to(tl, _setDefaults({\n      ease: vars.ease || \"none\",\n      lazy: false,\n      immediateRender: false,\n      time: endTime,\n      overwrite: \"auto\",\n      duration: vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\n      onStart: function onStart() {\n        tl.pause();\n\n        if (!initted) {\n          var duration = vars.duration || Math.abs((endTime - (startAt && \"time\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\n          tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\n          initted = 1;\n        }\n\n        _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\n      }\n    }, vars));\n\n    return immediateRender ? tween.render(0) : tween;\n  };\n\n  _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\n    return this.tweenTo(toPosition, _setDefaults({\n      startAt: {\n        time: _parsePosition(this, fromPosition)\n      }\n    }, vars));\n  };\n\n  _proto2.recent = function recent() {\n    return this._recent;\n  };\n\n  _proto2.nextLabel = function nextLabel(afterTime) {\n    if (afterTime === void 0) {\n      afterTime = this._time;\n    }\n\n    return _getLabelInDirection(this, _parsePosition(this, afterTime));\n  };\n\n  _proto2.previousLabel = function previousLabel(beforeTime) {\n    if (beforeTime === void 0) {\n      beforeTime = this._time;\n    }\n\n    return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\n  };\n\n  _proto2.currentLabel = function currentLabel(value) {\n    return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\n  };\n\n  _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\n    if (ignoreBeforeTime === void 0) {\n      ignoreBeforeTime = 0;\n    }\n\n    var child = this._first,\n        labels = this.labels,\n        p;\n\n    while (child) {\n      if (child._start >= ignoreBeforeTime) {\n        child._start += amount;\n        child._end += amount;\n      }\n\n      child = child._next;\n    }\n\n    if (adjustLabels) {\n      for (p in labels) {\n        if (labels[p] >= ignoreBeforeTime) {\n          labels[p] += amount;\n        }\n      }\n    }\n\n    return _uncache(this);\n  };\n\n  _proto2.invalidate = function invalidate(soft) {\n    var child = this._first;\n    this._lock = 0;\n\n    while (child) {\n      child.invalidate(soft);\n      child = child._next;\n    }\n\n    return _Animation.prototype.invalidate.call(this, soft);\n  };\n\n  _proto2.clear = function clear(includeLabels) {\n    if (includeLabels === void 0) {\n      includeLabels = true;\n    }\n\n    var child = this._first,\n        next;\n\n    while (child) {\n      next = child._next;\n      this.remove(child);\n      child = next;\n    }\n\n    this._dp && (this._time = this._tTime = this._pTime = 0);\n    includeLabels && (this.labels = {});\n    return _uncache(this);\n  };\n\n  _proto2.totalDuration = function totalDuration(value) {\n    var max = 0,\n        self = this,\n        child = self._last,\n        prevStart = _bigNum,\n        prev,\n        start,\n        parent;\n\n    if (arguments.length) {\n      return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\n    }\n\n    if (self._dirty) {\n      parent = self.parent;\n\n      while (child) {\n        prev = child._prev; //record it here in case the tween changes position in the sequence...\n\n        child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\n\n        start = child._start;\n\n        if (start > prevStart && self._sort && child._ts && !self._lock) {\n          //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\n          self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\n\n          _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\n        } else {\n          prevStart = start;\n        }\n\n        if (start < 0 && child._ts) {\n          //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\n          max -= start;\n\n          if (!parent && !self._dp || parent && parent.smoothChildTiming) {\n            self._start += start / self._ts;\n            self._time -= start;\n            self._tTime -= start;\n          }\n\n          self.shiftChildren(-start, false, -1e999);\n          prevStart = 0;\n        }\n\n        child._end > max && child._ts && (max = child._end);\n        child = prev;\n      }\n\n      _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\n\n      self._dirty = 0;\n    }\n\n    return self._tDur;\n  };\n\n  Timeline.updateRoot = function updateRoot(time) {\n    if (_globalTimeline._ts) {\n      _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\n\n      _lastRenderedFrame = _ticker.frame;\n    }\n\n    if (_ticker.frame >= _nextGCFrame) {\n      _nextGCFrame += _config.autoSleep || 120;\n      var child = _globalTimeline._first;\n      if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\n        while (child && !child._ts) {\n          child = child._next;\n        }\n\n        child || _ticker.sleep();\n      }\n    }\n  };\n\n  return Timeline;\n}(Animation);\n\n_setDefaults(Timeline.prototype, {\n  _lock: 0,\n  _hasPause: 0,\n  _forcing: 0\n});\n\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\n  //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n  var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\n      index = 0,\n      matchIndex = 0,\n      result,\n      startNums,\n      color,\n      endNum,\n      chunk,\n      startNum,\n      hasRandom,\n      a;\n  pt.b = start;\n  pt.e = end;\n  start += \"\"; //ensure values are strings\n\n  end += \"\";\n\n  if (hasRandom = ~end.indexOf(\"random(\")) {\n    end = _replaceRandom(end);\n  }\n\n  if (stringFilter) {\n    a = [start, end];\n    stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\n\n    start = a[0];\n    end = a[1];\n  }\n\n  startNums = start.match(_complexStringNumExp) || [];\n\n  while (result = _complexStringNumExp.exec(end)) {\n    endNum = result[0];\n    chunk = end.substring(index, result.index);\n\n    if (color) {\n      color = (color + 1) % 5;\n    } else if (chunk.substr(-5) === \"rgba(\") {\n      color = 1;\n    }\n\n    if (endNum !== startNums[matchIndex++]) {\n      startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n      pt._pt = {\n        _next: pt._pt,\n        p: chunk || matchIndex === 1 ? chunk : \",\",\n        //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n        s: startNum,\n        c: endNum.charAt(1) === \"=\" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,\n        m: color && color < 4 ? Math.round : 0\n      };\n      index = _complexStringNumExp.lastIndex;\n    }\n  }\n\n  pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n\n  pt.fp = funcParam;\n\n  if (_relExp.test(end) || hasRandom) {\n    pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n  }\n\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n\n  return pt;\n},\n    _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {\n  _isFunction(end) && (end = end(index || 0, target, targets));\n  var currentValue = target[prop],\n      parsedStart = start !== \"get\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\"set\") || !_isFunction(target[\"get\" + prop.substr(3)]) ? prop : \"get\" + prop.substr(3)](funcParam) : target[prop](),\n      setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\n      pt;\n\n  if (_isString(end)) {\n    if (~end.indexOf(\"random(\")) {\n      end = _replaceRandom(end);\n    }\n\n    if (end.charAt(1) === \"=\") {\n      pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);\n\n      if (pt || pt === 0) {\n        // to avoid isNaN, like if someone passes in a value like \"!= whatever\"\n        end = pt;\n      }\n    }\n  }\n\n  if (!optional || parsedStart !== end || _forceAllPropTweens) {\n    if (!isNaN(parsedStart * end) && end !== \"\") {\n      // fun fact: any number multiplied by \"\" is evaluated as the number 0!\n      pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \"boolean\" ? _renderBoolean : _renderPlain, 0, setter);\n      funcParam && (pt.fp = funcParam);\n      modifier && pt.modifier(modifier, this, target);\n      return this._pt = pt;\n    }\n\n    !currentValue && !(prop in target) && _missingPlugin(prop, end);\n    return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\n  }\n},\n    //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \"random()\" in them. It does NOT process relative values.\n_processVars = function _processVars(vars, index, target, targets, tween) {\n  _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\n\n  if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\n    return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\n  }\n\n  var copy = {},\n      p;\n\n  for (p in vars) {\n    copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\n  }\n\n  return copy;\n},\n    _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\n  var plugin, pt, ptLookup, i;\n\n  if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\n    tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n    if (tween !== _quickTween) {\n      ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\n\n      i = plugin._props.length;\n\n      while (i--) {\n        ptLookup[plugin._props[i]] = pt;\n      }\n    }\n  }\n\n  return plugin;\n},\n    _overwritingTween,\n    //store a reference temporarily so we can avoid overwriting itself.\n_forceAllPropTweens,\n    _initTween = function _initTween(tween, time, tTime) {\n  var vars = tween.vars,\n      ease = vars.ease,\n      startAt = vars.startAt,\n      immediateRender = vars.immediateRender,\n      lazy = vars.lazy,\n      onUpdate = vars.onUpdate,\n      runBackwards = vars.runBackwards,\n      yoyoEase = vars.yoyoEase,\n      keyframes = vars.keyframes,\n      autoRevert = vars.autoRevert,\n      dur = tween._dur,\n      prevStartAt = tween._startAt,\n      targets = tween._targets,\n      parent = tween.parent,\n      fullTargets = parent && parent.data === \"nested\" ? parent.vars.targets : targets,\n      autoOverwrite = tween._overwrite === \"auto\" && !_suppressOverwrites,\n      tl = tween.timeline,\n      cleanVars,\n      i,\n      p,\n      pt,\n      target,\n      hasPriority,\n      gsData,\n      harness,\n      plugin,\n      ptLookup,\n      index,\n      harnessVars,\n      overwritten;\n  tl && (!keyframes || !ease) && (ease = \"none\");\n  tween._ease = _parseEase(ease, _defaults.ease);\n  tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\n\n  if (yoyoEase && tween._yoyo && !tween._repeat) {\n    //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\n    yoyoEase = tween._yEase;\n    tween._yEase = tween._ease;\n    tween._ease = yoyoEase;\n  }\n\n  tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\n\n  if (!tl || keyframes && !vars.stagger) {\n    //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\n    harness = targets[0] ? _getCache(targets[0]).harness : 0;\n    harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \"x\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\n\n    cleanVars = _copyExcluding(vars, _reservedProps);\n\n    if (prevStartAt) {\n      prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.\n\n      time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a \"startAt\" (not \"from()\" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)\n      // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for \"startAt\" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.\n\n      prevStartAt._lazy = 0;\n    }\n\n    if (startAt) {\n      _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\n        data: \"isStart\",\n        overwrite: false,\n        parent: parent,\n        immediateRender: true,\n        lazy: !prevStartAt && _isNotFalse(lazy),\n        startAt: null,\n        delay: 0,\n        onUpdate: onUpdate && function () {\n          return _callback(tween, \"onUpdate\");\n        },\n        stagger: 0\n      }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\n\n\n      tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.\n\n      tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween\n\n      time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\n\n      if (immediateRender) {\n        if (dur && time <= 0 && tTime <= 0) {\n          // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.\n          time && (tween._zTime = time);\n          return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\n        }\n      }\n    } else if (runBackwards && dur) {\n      //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\n      if (!prevStartAt) {\n        time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\n\n        p = _setDefaults({\n          overwrite: false,\n          data: \"isFromStart\",\n          //we tag the tween with as \"isFromStart\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \"from()\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\"height\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\n          lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),\n          immediateRender: immediateRender,\n          //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\n          stagger: 0,\n          parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\".class\", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})\n\n        }, cleanVars);\n        harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\n\n        _removeFromParent(tween._startAt = Tween.set(targets, p));\n\n        tween._startAt._dp = 0; // don't allow it to get put back into root timeline!\n\n        tween._startAt._sat = tween; // used in globalTime()\n\n        time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));\n        tween._zTime = time;\n\n        if (!immediateRender) {\n          _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded\n\n        } else if (!time) {\n          return;\n        }\n      }\n    }\n\n    tween._pt = tween._ptCache = 0;\n    lazy = dur && _isNotFalse(lazy) || lazy && !dur;\n\n    for (i = 0; i < targets.length; i++) {\n      target = targets[i];\n      gsData = target._gsap || _harness(targets)[i]._gsap;\n      tween._ptLookup[i] = ptLookup = {};\n      _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\n\n      index = fullTargets === targets ? i : fullTargets.indexOf(target);\n\n      if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\n        tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\n\n        plugin._props.forEach(function (name) {\n          ptLookup[name] = pt;\n        });\n\n        plugin.priority && (hasPriority = 1);\n      }\n\n      if (!harness || harnessVars) {\n        for (p in cleanVars) {\n          if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\n            plugin.priority && (hasPriority = 1);\n          } else {\n            ptLookup[p] = pt = _addPropTween.call(tween, target, p, \"get\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\n          }\n        }\n      }\n\n      tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\n\n      if (autoOverwrite && tween._pt) {\n        _overwritingTween = tween;\n\n        _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\n\n\n        overwritten = !tween.parent;\n        _overwritingTween = 0;\n      }\n\n      tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\n    }\n\n    hasPriority && _sortPropTweensByPriority(tween);\n    tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\n  }\n\n  tween._onUpdate = onUpdate;\n  tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\n\n  keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the \"before\" state for any staggered/delayed animations thus when the following tween initializes, it'll use the \"before\" state instead of the \"after\" state as the initial values.\n},\n    _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {\n  var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],\n      pt,\n      rootPT,\n      lookup,\n      i;\n\n  if (!ptCache) {\n    ptCache = tween._ptCache[property] = [];\n    lookup = tween._ptLookup;\n    i = tween._targets.length;\n\n    while (i--) {\n      pt = lookup[i][property];\n\n      if (pt && pt.d && pt.d._pt) {\n        // it's a plugin, so find the nested PropTween\n        pt = pt.d._pt;\n\n        while (pt && pt.p !== property && pt.fp !== property) {\n          // \"fp\" is functionParam for things like setting CSS variables which require .setProperty(\"--var-name\", value)\n          pt = pt._next;\n        }\n      }\n\n      if (!pt) {\n        // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this\n        // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo(\"x\", 200) for example.\n        _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.\n\n        tween.vars[property] = \"+=0\";\n\n        _initTween(tween, time);\n\n        _forceAllPropTweens = 0;\n        return skipRecursion ? _warn(property + \" not eligible for reset\") : 1; // if someone tries to do a quickTo() on a special property like borderRadius which must get split into 4 different properties, that's not eligible for .resetTo().\n      }\n\n      ptCache.push(pt);\n    }\n  }\n\n  i = ptCache.length;\n\n  while (i--) {\n    rootPT = ptCache[i];\n    pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.\n\n    pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;\n    pt.c = value - pt.s;\n    rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)\n\n    rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)\n  }\n},\n    _addAliasesToVars = function _addAliasesToVars(targets, vars) {\n  var harness = targets[0] ? _getCache(targets[0]).harness : 0,\n      propertyAliases = harness && harness.aliases,\n      copy,\n      p,\n      i,\n      aliases;\n\n  if (!propertyAliases) {\n    return vars;\n  }\n\n  copy = _merge({}, vars);\n\n  for (p in propertyAliases) {\n    if (p in copy) {\n      aliases = propertyAliases[p].split(\",\");\n      i = aliases.length;\n\n      while (i--) {\n        copy[aliases[i]] = copy[p];\n      }\n    }\n  }\n\n  return copy;\n},\n    // parses multiple formats, like {\"0%\": {x: 100}, {\"50%\": {x: -20}} and { x: {\"0%\": 100, \"50%\": -20} }, and an \"ease\" can be set on any object. We populate an \"allProps\" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a \"t\" (time), \"v\", (value), and \"e\" (ease) property. This allows us to piece together a timeline later.\n_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\n  var ease = obj.ease || easeEach || \"power1.inOut\",\n      p,\n      a;\n\n  if (_isArray(obj)) {\n    a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease\n\n    obj.forEach(function (value, i) {\n      return a.push({\n        t: i / (obj.length - 1) * 100,\n        v: value,\n        e: ease\n      });\n    });\n  } else {\n    for (p in obj) {\n      a = allProps[p] || (allProps[p] = []);\n      p === \"ease\" || a.push({\n        t: parseFloat(prop),\n        v: obj[p],\n        e: ease\n      });\n    }\n  }\n},\n    _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\n  return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\"random(\") ? _replaceRandom(value) : value;\n},\n    _staggerTweenProps = _callbackNames + \"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert\",\n    _staggerPropsToSkip = {};\n\n_forEachName(_staggerTweenProps + \",id,stagger,delay,duration,paused,scrollTrigger\", function (name) {\n  return _staggerPropsToSkip[name] = 1;\n});\n/*\n * --------------------------------------------------------------------------------------\n * TWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nexport var Tween = /*#__PURE__*/function (_Animation2) {\n  _inheritsLoose(Tween, _Animation2);\n\n  function Tween(targets, vars, position, skipInherit) {\n    var _this3;\n\n    if (typeof vars === \"number\") {\n      position.duration = vars;\n      vars = position;\n      position = null;\n    }\n\n    _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\n    var _this3$vars = _this3.vars,\n        duration = _this3$vars.duration,\n        delay = _this3$vars.delay,\n        immediateRender = _this3$vars.immediateRender,\n        stagger = _this3$vars.stagger,\n        overwrite = _this3$vars.overwrite,\n        keyframes = _this3$vars.keyframes,\n        defaults = _this3$vars.defaults,\n        scrollTrigger = _this3$vars.scrollTrigger,\n        yoyoEase = _this3$vars.yoyoEase,\n        parent = vars.parent || _globalTimeline,\n        parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \"length\" in vars) ? [targets] : toArray(targets),\n        tl,\n        i,\n        copy,\n        l,\n        p,\n        curTarget,\n        staggerFunc,\n        staggerVarsToMerge;\n    _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\"GSAP target \" + targets + \" not found. https://gsap.com\", !_config.nullTargetWarn) || [];\n    _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\n\n    _this3._overwrite = overwrite;\n\n    if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n      vars = _this3.vars;\n      tl = _this3.timeline = new Timeline({\n        data: \"nested\",\n        defaults: defaults || {},\n        targets: parent && parent.data === \"nested\" ? parent.vars.targets : parsedTargets\n      }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.\n\n      tl.kill();\n      tl.parent = tl._dp = _assertThisInitialized(_this3);\n      tl._start = 0;\n\n      if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\n        l = parsedTargets.length;\n        staggerFunc = stagger && distribute(stagger);\n\n        if (_isObject(stagger)) {\n          //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\n          for (p in stagger) {\n            if (~_staggerTweenProps.indexOf(p)) {\n              staggerVarsToMerge || (staggerVarsToMerge = {});\n              staggerVarsToMerge[p] = stagger[p];\n            }\n          }\n        }\n\n        for (i = 0; i < l; i++) {\n          copy = _copyExcluding(vars, _staggerPropsToSkip);\n          copy.stagger = 0;\n          yoyoEase && (copy.yoyoEase = yoyoEase);\n          staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\n          curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\n\n          copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\n          copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\n\n          if (!stagger && l === 1 && copy.delay) {\n            // if someone does delay:\"random(1, 5)\", repeat:-1, for example, the delay shouldn't be inside the repeat.\n            _this3._delay = delay = copy.delay;\n            _this3._start += delay;\n            copy.delay = 0;\n          }\n\n          tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\n          tl._ease = _easeMap.none;\n        }\n\n        tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\n      } else if (keyframes) {\n        _inheritDefaults(_setDefaults(tl.vars.defaults, {\n          ease: \"none\"\n        }));\n\n        tl._ease = _parseEase(keyframes.ease || vars.ease || \"none\");\n        var time = 0,\n            a,\n            kf,\n            v;\n\n        if (_isArray(keyframes)) {\n          keyframes.forEach(function (frame) {\n            return tl.to(parsedTargets, frame, \">\");\n          });\n          tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.\n        } else {\n          copy = {};\n\n          for (p in keyframes) {\n            p === \"ease\" || p === \"easeEach\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\n          }\n\n          for (p in copy) {\n            a = copy[p].sort(function (a, b) {\n              return a.t - b.t;\n            });\n            time = 0;\n\n            for (i = 0; i < a.length; i++) {\n              kf = a[i];\n              v = {\n                ease: kf.e,\n                duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\n              };\n              v[p] = kf.v;\n              tl.to(parsedTargets, v, time);\n              time += v.duration;\n            }\n          }\n\n          tl.duration() < duration && tl.to({}, {\n            duration: duration - tl.duration()\n          }); // in case keyframes didn't go to 100%\n        }\n      }\n\n      duration || _this3.duration(duration = tl.duration());\n    } else {\n      _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\n    }\n\n    if (overwrite === true && !_suppressOverwrites) {\n      _overwritingTween = _assertThisInitialized(_this3);\n\n      _globalTimeline.killTweensOf(parsedTargets);\n\n      _overwritingTween = 0;\n    }\n\n    _addToTimeline(parent, _assertThisInitialized(_this3), position);\n\n    vars.reversed && _this3.reverse();\n    vars.paused && _this3.paused(true);\n\n    if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \"nested\") {\n      _this3._tTime = -_tinyNum; //forces a render without having to set the render() \"force\" parameter to true because we want to allow lazying by default (using the \"force\" parameter always forces an immediate full render)\n\n      _this3.render(Math.max(0, -delay) || 0); //in case delay is negative\n\n    }\n\n    scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\n    return _this3;\n  }\n\n  var _proto3 = Tween.prototype;\n\n  _proto3.render = function render(totalTime, suppressEvents, force) {\n    var prevTime = this._time,\n        tDur = this._tDur,\n        dur = this._dur,\n        isNegative = totalTime < 0,\n        tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,\n        time,\n        pt,\n        iteration,\n        cycleDuration,\n        prevIteration,\n        isYoyo,\n        ratio,\n        timeline,\n        yoyoEase;\n\n    if (!dur) {\n      _renderZeroDurationTween(this, totalTime, suppressEvents, force);\n    } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) {\n      //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\n      time = tTime;\n      timeline = this.timeline;\n\n      if (this._repeat) {\n        //adjust the time for repeats and yoyos\n        cycleDuration = dur + this._rDelay;\n\n        if (this._repeat < -1 && isNegative) {\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\n        }\n\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\n\n        if (tTime === tDur) {\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\n          iteration = this._repeat;\n          time = dur;\n        } else {\n          iteration = ~~(tTime / cycleDuration);\n\n          if (iteration && iteration === _roundPrecise(tTime / cycleDuration)) {\n            time = dur;\n            iteration--;\n          }\n\n          time > dur && (time = dur);\n        }\n\n        isYoyo = this._yoyo && iteration & 1;\n\n        if (isYoyo) {\n          yoyoEase = this._yEase;\n          time = dur - time;\n        }\n\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\n\n        if (time === prevTime && !force && this._initted && iteration === prevIteration) {\n          //could be during the repeatDelay part. No need to render and fire callbacks.\n          this._tTime = tTime;\n          return this;\n        }\n\n        if (iteration !== prevIteration) {\n          timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\n\n          if (this.vars.repeatRefresh && !isYoyo && !this._lock && this._time !== cycleDuration && this._initted) {\n            // this._time will === cycleDuration when we render at EXACTLY the end of an iteration. Without this condition, it'd often do the repeatRefresh render TWICE (again on the very next tick).\n            this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\n\n            this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\n          }\n        }\n      }\n\n      if (!this._initted) {\n        if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {\n          this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\n\n          return this;\n        }\n\n        if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {\n          // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. But we also don't want to dump if we're doing a repeatRefresh render!\n          return this;\n        }\n\n        if (dur !== this._dur) {\n          // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\n          return this.render(totalTime, suppressEvents, force);\n        }\n      }\n\n      this._tTime = tTime;\n      this._time = time;\n\n      if (!this._act && this._ts) {\n        this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\n\n        this._lazy = 0;\n      }\n\n      this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\n\n      if (this._from) {\n        this.ratio = ratio = 1 - ratio;\n      }\n\n      if (time && !prevTime && !suppressEvents && !iteration) {\n        _callback(this, \"onStart\");\n\n        if (this._tTime !== tTime) {\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\n          return this;\n        }\n      }\n\n      pt = this._pt;\n\n      while (pt) {\n        pt.r(ratio, pt.d);\n        pt = pt._next;\n      }\n\n      timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\n\n      if (this._onUpdate && !suppressEvents) {\n        isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\n\n        _callback(this, \"onUpdate\");\n      }\n\n      this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \"onRepeat\");\n\n      if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\n        isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);\n        (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\n\n        if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {\n          // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\n          _callback(this, tTime === tDur ? \"onComplete\" : \"onReverseComplete\", true);\n\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\n        }\n      }\n    }\n\n    return this;\n  };\n\n  _proto3.targets = function targets() {\n    return this._targets;\n  };\n\n  _proto3.invalidate = function invalidate(soft) {\n    // \"soft\" gives us a way to clear out everything EXCEPT the recorded pre-\"from\" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the \"from\" values would persist and then on the next render, the from() tweens would initialize and the current value would match the \"from\" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.\n    (!soft || !this.vars.runBackwards) && (this._startAt = 0);\n    this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;\n    this._ptLookup = [];\n    this.timeline && this.timeline.invalidate(soft);\n    return _Animation2.prototype.invalidate.call(this, soft);\n  };\n\n  _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {\n    _tickerActive || _ticker.wake();\n    this._ts || this.play();\n    var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),\n        ratio;\n    this._initted || _initTween(this, time);\n    ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.\n    // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.\n    // if (_isObject(property)) { // performance optimization\n    // \tfor (p in property) {\n    // \t\tif (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {\n    // \t\t\treturn this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n    // \t\t}\n    // \t}\n    // } else {\n\n    if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {\n      return this.resetTo(property, value, start, startIsRelative, 1); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\n    } //}\n\n\n    _alignPlayhead(this, 0);\n\n    this.parent || _addLinkedListItem(this._dp, this, \"_first\", \"_last\", this._dp._sort ? \"_start\" : 0);\n    return this.render(0);\n  };\n\n  _proto3.kill = function kill(targets, vars) {\n    if (vars === void 0) {\n      vars = \"all\";\n    }\n\n    if (!targets && (!vars || vars === \"all\")) {\n      this._lazy = this._pt = 0;\n      return this.parent ? _interrupt(this) : this;\n    }\n\n    if (this.timeline) {\n      var tDur = this.timeline.totalDuration();\n      this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\n\n      this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\n\n      return this;\n    }\n\n    var parsedTargets = this._targets,\n        killingTargets = targets ? toArray(targets) : parsedTargets,\n        propTweenLookup = this._ptLookup,\n        firstPT = this._pt,\n        overwrittenProps,\n        curLookup,\n        curOverwriteProps,\n        props,\n        p,\n        pt,\n        i;\n\n    if ((!vars || vars === \"all\") && _arraysMatch(parsedTargets, killingTargets)) {\n      vars === \"all\" && (this._pt = 0);\n      return _interrupt(this);\n    }\n\n    overwrittenProps = this._op = this._op || [];\n\n    if (vars !== \"all\") {\n      //so people can pass in a comma-delimited list of property names\n      if (_isString(vars)) {\n        p = {};\n\n        _forEachName(vars, function (name) {\n          return p[name] = 1;\n        });\n\n        vars = p;\n      }\n\n      vars = _addAliasesToVars(parsedTargets, vars);\n    }\n\n    i = parsedTargets.length;\n\n    while (i--) {\n      if (~killingTargets.indexOf(parsedTargets[i])) {\n        curLookup = propTweenLookup[i];\n\n        if (vars === \"all\") {\n          overwrittenProps[i] = vars;\n          props = curLookup;\n          curOverwriteProps = {};\n        } else {\n          curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\n          props = vars;\n        }\n\n        for (p in props) {\n          pt = curLookup && curLookup[p];\n\n          if (pt) {\n            if (!(\"kill\" in pt.d) || pt.d.kill(p) === true) {\n              _removeLinkedListItem(this, pt, \"_pt\");\n            }\n\n            delete curLookup[p];\n          }\n\n          if (curOverwriteProps !== \"all\") {\n            curOverwriteProps[p] = 1;\n          }\n        }\n      }\n    }\n\n    this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\n\n    return this;\n  };\n\n  Tween.to = function to(targets, vars) {\n    return new Tween(targets, vars, arguments[2]);\n  };\n\n  Tween.from = function from(targets, vars) {\n    return _createTweenType(1, arguments);\n  };\n\n  Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\n    return new Tween(callback, 0, {\n      immediateRender: false,\n      lazy: false,\n      overwrite: false,\n      delay: delay,\n      onComplete: callback,\n      onReverseComplete: callback,\n      onCompleteParams: params,\n      onReverseCompleteParams: params,\n      callbackScope: scope\n    }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)\n  };\n\n  Tween.fromTo = function fromTo(targets, fromVars, toVars) {\n    return _createTweenType(2, arguments);\n  };\n\n  Tween.set = function set(targets, vars) {\n    vars.duration = 0;\n    vars.repeatDelay || (vars.repeat = 0);\n    return new Tween(targets, vars);\n  };\n\n  Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\n    return _globalTimeline.killTweensOf(targets, props, onlyActive);\n  };\n\n  return Tween;\n}(Animation);\n\n_setDefaults(Tween.prototype, {\n  _targets: [],\n  _lazy: 0,\n  _startAt: 0,\n  _op: 0,\n  _onInit: 0\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\n// _forEachName(\"to,from,fromTo,set,call,add,addLabel,addPause\", name => {\n// \tTween.prototype[name] = function() {\n// \t\tlet tl = new Timeline();\n// \t\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\n// \t}\n// });\n//for backward compatibility. Leverage the timeline calls.\n\n\n_forEachName(\"staggerTo,staggerFrom,staggerFromTo\", function (name) {\n  Tween[name] = function () {\n    var tl = new Timeline(),\n        params = _slice.call(arguments, 0);\n\n    params.splice(name === \"staggerFromTo\" ? 5 : 4, 0, 0);\n    return tl[name].apply(tl, params);\n  };\n});\n/*\n * --------------------------------------------------------------------------------------\n * PROPTWEEN\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _setterPlain = function _setterPlain(target, property, value) {\n  return target[property] = value;\n},\n    _setterFunc = function _setterFunc(target, property, value) {\n  return target[property](value);\n},\n    _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\n  return target[property](data.fp, value);\n},\n    _setterAttribute = function _setterAttribute(target, property, value) {\n  return target.setAttribute(property, value);\n},\n    _getSetter = function _getSetter(target, property) {\n  return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\n},\n    _renderPlain = function _renderPlain(ratio, data) {\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\n},\n    _renderBoolean = function _renderBoolean(ratio, data) {\n  return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\n},\n    _renderComplexString = function _renderComplexString(ratio, data) {\n  var pt = data._pt,\n      s = \"\";\n\n  if (!ratio && data.b) {\n    //b = beginning string\n    s = data.b;\n  } else if (ratio === 1 && data.e) {\n    //e = ending string\n    s = data.e;\n  } else {\n    while (pt) {\n      s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \"p\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\n\n      pt = pt._next;\n    }\n\n    s += data.c; //we use the \"c\" of the PropTween to store the final chunk of non-numeric text.\n  }\n\n  data.set(data.t, data.p, s, data);\n},\n    _renderPropTweens = function _renderPropTweens(ratio, data) {\n  var pt = data._pt;\n\n  while (pt) {\n    pt.r(ratio, pt.d);\n    pt = pt._next;\n  }\n},\n    _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\n  var pt = this._pt,\n      next;\n\n  while (pt) {\n    next = pt._next;\n    pt.p === property && pt.modifier(modifier, tween, target);\n    pt = next;\n  }\n},\n    _killPropTweensOf = function _killPropTweensOf(property) {\n  var pt = this._pt,\n      hasNonDependentRemaining,\n      next;\n\n  while (pt) {\n    next = pt._next;\n\n    if (pt.p === property && !pt.op || pt.op === property) {\n      _removeLinkedListItem(this, pt, \"_pt\");\n    } else if (!pt.dep) {\n      hasNonDependentRemaining = 1;\n    }\n\n    pt = next;\n  }\n\n  return !hasNonDependentRemaining;\n},\n    _setterWithModifier = function _setterWithModifier(target, property, value, data) {\n  data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\n},\n    _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\n  var pt = parent._pt,\n      next,\n      pt2,\n      first,\n      last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\n\n  while (pt) {\n    next = pt._next;\n    pt2 = first;\n\n    while (pt2 && pt2.pr > pt.pr) {\n      pt2 = pt2._next;\n    }\n\n    if (pt._prev = pt2 ? pt2._prev : last) {\n      pt._prev._next = pt;\n    } else {\n      first = pt;\n    }\n\n    if (pt._next = pt2) {\n      pt2._prev = pt;\n    } else {\n      last = pt;\n    }\n\n    pt = next;\n  }\n\n  parent._pt = first;\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\n\n\nexport var PropTween = /*#__PURE__*/function () {\n  function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\n    this.t = target;\n    this.s = start;\n    this.c = change;\n    this.p = prop;\n    this.r = renderer || _renderPlain;\n    this.d = data || this;\n    this.set = setter || _setterPlain;\n    this.pr = priority || 0;\n    this._next = next;\n\n    if (next) {\n      next._prev = this;\n    }\n  }\n\n  var _proto4 = PropTween.prototype;\n\n  _proto4.modifier = function modifier(func, tween, target) {\n    this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\n\n    this.set = _setterWithModifier;\n    this.m = func;\n    this.mt = target; //modifier target\n\n    this.tween = tween;\n  };\n\n  return PropTween;\n}(); //Initialization tasks\n\n_forEachName(_callbackNames + \"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\", function (name) {\n  return _reservedProps[name] = 1;\n});\n\n_globals.TweenMax = _globals.TweenLite = Tween;\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\n_globalTimeline = new Timeline({\n  sortChildren: false,\n  defaults: _defaults,\n  autoRemoveChildren: true,\n  id: \"root\",\n  smoothChildTiming: true\n});\n_config.stringFilter = _colorStringFilter;\n\nvar _media = [],\n    _listeners = {},\n    _emptyArray = [],\n    _lastMediaTime = 0,\n    _contextID = 0,\n    _dispatch = function _dispatch(type) {\n  return (_listeners[type] || _emptyArray).map(function (f) {\n    return f();\n  });\n},\n    _onMediaChange = function _onMediaChange() {\n  var time = Date.now(),\n      matches = [];\n\n  if (time - _lastMediaTime > 2) {\n    _dispatch(\"matchMediaInit\");\n\n    _media.forEach(function (c) {\n      var queries = c.queries,\n          conditions = c.conditions,\n          match,\n          p,\n          anyMatch,\n          toggled;\n\n      for (p in queries) {\n        match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the \"matches\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\n\n        match && (anyMatch = 1);\n\n        if (match !== conditions[p]) {\n          conditions[p] = match;\n          toggled = 1;\n        }\n      }\n\n      if (toggled) {\n        c.revert();\n        anyMatch && matches.push(c);\n      }\n    });\n\n    _dispatch(\"matchMediaRevert\");\n\n    matches.forEach(function (c) {\n      return c.onMatch(c, function (func) {\n        return c.add(null, func);\n      });\n    });\n    _lastMediaTime = time;\n\n    _dispatch(\"matchMedia\");\n  }\n};\n\nvar Context = /*#__PURE__*/function () {\n  function Context(func, scope) {\n    this.selector = scope && selector(scope);\n    this.data = [];\n    this._r = []; // returned/cleanup functions\n\n    this.isReverted = false;\n    this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because \"this\" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely\n\n    func && this.add(func);\n  }\n\n  var _proto5 = Context.prototype;\n\n  _proto5.add = function add(name, func, scope) {\n    // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.\n    // if (name && _isFunction(name.revert)) {\n    // \tthis.data.push(name);\n    // \treturn (name._ctx = this);\n    // }\n    if (_isFunction(name)) {\n      scope = func;\n      func = name;\n      name = _isFunction;\n    }\n\n    var self = this,\n        f = function f() {\n      var prev = _context,\n          prevSelector = self.selector,\n          result;\n      prev && prev !== self && prev.data.push(self);\n      scope && (self.selector = selector(scope));\n      _context = self;\n      result = func.apply(self, arguments);\n      _isFunction(result) && self._r.push(result);\n      _context = prev;\n      self.selector = prevSelector;\n      self.isReverted = false;\n      return result;\n    };\n\n    self.last = f;\n    return name === _isFunction ? f(self, function (func) {\n      return self.add(null, func);\n    }) : name ? self[name] = f : f;\n  };\n\n  _proto5.ignore = function ignore(func) {\n    var prev = _context;\n    _context = null;\n    func(this);\n    _context = prev;\n  };\n\n  _proto5.getTweens = function getTweens() {\n    var a = [];\n    this.data.forEach(function (e) {\n      return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === \"nested\") && a.push(e);\n    });\n    return a;\n  };\n\n  _proto5.clear = function clear() {\n    this._r.length = this.data.length = 0;\n  };\n\n  _proto5.kill = function kill(revert, matchMedia) {\n    var _this4 = this;\n\n    if (revert) {\n      (function () {\n        var tweens = _this4.getTweens(),\n            i = _this4.data.length,\n            t;\n\n        while (i--) {\n          // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.\n          t = _this4.data[i];\n\n          if (t.data === \"isFlip\") {\n            t.revert();\n            t.getChildren(true, true, false).forEach(function (tween) {\n              return tweens.splice(tweens.indexOf(tween), 1);\n            });\n          }\n        } // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort\n\n\n        tweens.map(function (t) {\n          return {\n            g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,\n            t: t\n          };\n        }).sort(function (a, b) {\n          return b.g - a.g || -Infinity;\n        }).forEach(function (o) {\n          return o.t.revert(revert);\n        }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the \" || -1\" in the sort keeps the order properly.\n\n        i = _this4.data.length;\n\n        while (i--) {\n          // make sure we loop backwards so that, for example, SplitTexts that were created later on the same element get reverted first\n          t = _this4.data[i];\n\n          if (t instanceof Timeline) {\n            if (t.data !== \"nested\") {\n              t.scrollTrigger && t.scrollTrigger.revert();\n              t.kill(); // don't revert() the timeline because that's duplicating efforts since we already reverted all the tweens\n            }\n          } else {\n            !(t instanceof Tween) && t.revert && t.revert(revert);\n          }\n        }\n\n        _this4._r.forEach(function (f) {\n          return f(revert, _this4);\n        });\n\n        _this4.isReverted = true;\n      })();\n    } else {\n      this.data.forEach(function (e) {\n        return e.kill && e.kill();\n      });\n    }\n\n    this.clear();\n\n    if (matchMedia) {\n      var i = _media.length;\n\n      while (i--) {\n        // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead.\n        _media[i].id === this.id && _media.splice(i, 1);\n      }\n    }\n  };\n\n  _proto5.revert = function revert(config) {\n    this.kill(config || {});\n  };\n\n  return Context;\n}();\n\nvar MatchMedia = /*#__PURE__*/function () {\n  function MatchMedia(scope) {\n    this.contexts = [];\n    this.scope = scope;\n    _context && _context.data.push(this);\n  }\n\n  var _proto6 = MatchMedia.prototype;\n\n  _proto6.add = function add(conditions, func, scope) {\n    _isObject(conditions) || (conditions = {\n      matches: conditions\n    });\n    var context = new Context(0, scope || this.scope),\n        cond = context.conditions = {},\n        mq,\n        p,\n        active;\n    _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context()\n\n    this.contexts.push(context);\n    func = context.add(\"onMatch\", func);\n    context.queries = conditions;\n\n    for (p in conditions) {\n      if (p === \"all\") {\n        active = 1;\n      } else {\n        mq = _win.matchMedia(conditions[p]);\n\n        if (mq) {\n          _media.indexOf(context) < 0 && _media.push(context);\n          (cond[p] = mq.matches) && (active = 1);\n          mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\"change\", _onMediaChange);\n        }\n      }\n    }\n\n    active && func(context, function (f) {\n      return context.add(null, f);\n    });\n    return this;\n  } // refresh() {\n  // \tlet time = _lastMediaTime,\n  // \t\tmedia = _media;\n  // \t_lastMediaTime = -1;\n  // \t_media = this.contexts;\n  // \t_onMediaChange();\n  // \t_lastMediaTime = time;\n  // \t_media = media;\n  // }\n  ;\n\n  _proto6.revert = function revert(config) {\n    this.kill(config || {});\n  };\n\n  _proto6.kill = function kill(revert) {\n    this.contexts.forEach(function (c) {\n      return c.kill(revert, true);\n    });\n  };\n\n  return MatchMedia;\n}();\n/*\n * --------------------------------------------------------------------------------------\n * GSAP\n * --------------------------------------------------------------------------------------\n */\n\n\nvar _gsap = {\n  registerPlugin: function registerPlugin() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    args.forEach(function (config) {\n      return _createPlugin(config);\n    });\n  },\n  timeline: function timeline(vars) {\n    return new Timeline(vars);\n  },\n  getTweensOf: function getTweensOf(targets, onlyActive) {\n    return _globalTimeline.getTweensOf(targets, onlyActive);\n  },\n  getProperty: function getProperty(target, property, unit, uncache) {\n    _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\n\n    var getter = _getCache(target || {}).get,\n        format = unit ? _passThrough : _numericIfPossible;\n\n    unit === \"native\" && (unit = \"\");\n    return !target ? target : !property ? function (property, unit, uncache) {\n      return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n    } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\n  },\n  quickSetter: function quickSetter(target, property, unit) {\n    target = toArray(target);\n\n    if (target.length > 1) {\n      var setters = target.map(function (t) {\n        return gsap.quickSetter(t, property, unit);\n      }),\n          l = setters.length;\n      return function (value) {\n        var i = l;\n\n        while (i--) {\n          setters[i](value);\n        }\n      };\n    }\n\n    target = target[0] || {};\n\n    var Plugin = _plugins[property],\n        cache = _getCache(target),\n        p = cache.harness && (cache.harness.aliases || {})[property] || property,\n        // in case it's an alias, like \"rotate\" for \"rotation\".\n    setter = Plugin ? function (value) {\n      var p = new Plugin();\n      _quickTween._pt = 0;\n      p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\n      p.render(1, p);\n      _quickTween._pt && _renderPropTweens(1, _quickTween);\n    } : cache.set(target, p);\n\n    return Plugin ? setter : function (value) {\n      return setter(target, p, unit ? value + unit : value, cache, 1);\n    };\n  },\n  quickTo: function quickTo(target, property, vars) {\n    var _merge2;\n\n    var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = \"+=0.1\", _merge2.paused = true, _merge2), vars || {})),\n        func = function func(value, start, startIsRelative) {\n      return tween.resetTo(property, value, start, startIsRelative);\n    };\n\n    func.tween = tween;\n    return func;\n  },\n  isTweening: function isTweening(targets) {\n    return _globalTimeline.getTweensOf(targets, true).length > 0;\n  },\n  defaults: function defaults(value) {\n    value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\n    return _mergeDeep(_defaults, value || {});\n  },\n  config: function config(value) {\n    return _mergeDeep(_config, value || {});\n  },\n  registerEffect: function registerEffect(_ref3) {\n    var name = _ref3.name,\n        effect = _ref3.effect,\n        plugins = _ref3.plugins,\n        defaults = _ref3.defaults,\n        extendTimeline = _ref3.extendTimeline;\n    (plugins || \"\").split(\",\").forEach(function (pluginName) {\n      return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \" effect requires \" + pluginName + \" plugin.\");\n    });\n\n    _effects[name] = function (targets, vars, tl) {\n      return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\n    };\n\n    if (extendTimeline) {\n      Timeline.prototype[name] = function (targets, vars, position) {\n        return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\n      };\n    }\n  },\n  registerEase: function registerEase(name, ease) {\n    _easeMap[name] = _parseEase(ease);\n  },\n  parseEase: function parseEase(ease, defaultEase) {\n    return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\n  },\n  getById: function getById(id) {\n    return _globalTimeline.getById(id);\n  },\n  exportRoot: function exportRoot(vars, includeDelayedCalls) {\n    if (vars === void 0) {\n      vars = {};\n    }\n\n    var tl = new Timeline(vars),\n        child,\n        next;\n    tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\n\n    _globalTimeline.remove(tl);\n\n    tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\n\n    tl._time = tl._tTime = _globalTimeline._time;\n    child = _globalTimeline._first;\n\n    while (child) {\n      next = child._next;\n\n      if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\n        _addToTimeline(tl, child, child._start - child._delay);\n      }\n\n      child = next;\n    }\n\n    _addToTimeline(_globalTimeline, tl, 0);\n\n    return tl;\n  },\n  context: function context(func, scope) {\n    return func ? new Context(func, scope) : _context;\n  },\n  matchMedia: function matchMedia(scope) {\n    return new MatchMedia(scope);\n  },\n  matchMediaRefresh: function matchMediaRefresh() {\n    return _media.forEach(function (c) {\n      var cond = c.conditions,\n          found,\n          p;\n\n      for (p in cond) {\n        if (cond[p]) {\n          cond[p] = false;\n          found = 1;\n        }\n      }\n\n      found && c.revert();\n    }) || _onMediaChange();\n  },\n  addEventListener: function addEventListener(type, callback) {\n    var a = _listeners[type] || (_listeners[type] = []);\n    ~a.indexOf(callback) || a.push(callback);\n  },\n  removeEventListener: function removeEventListener(type, callback) {\n    var a = _listeners[type],\n        i = a && a.indexOf(callback);\n    i >= 0 && a.splice(i, 1);\n  },\n  utils: {\n    wrap: wrap,\n    wrapYoyo: wrapYoyo,\n    distribute: distribute,\n    random: random,\n    snap: snap,\n    normalize: normalize,\n    getUnit: getUnit,\n    clamp: clamp,\n    splitColor: splitColor,\n    toArray: toArray,\n    selector: selector,\n    mapRange: mapRange,\n    pipe: pipe,\n    unitize: unitize,\n    interpolate: interpolate,\n    shuffle: shuffle\n  },\n  install: _install,\n  effects: _effects,\n  ticker: _ticker,\n  updateRoot: Timeline.updateRoot,\n  plugins: _plugins,\n  globalTimeline: _globalTimeline,\n  core: {\n    PropTween: PropTween,\n    globals: _addGlobal,\n    Tween: Tween,\n    Timeline: Timeline,\n    Animation: Animation,\n    getCache: _getCache,\n    _removeLinkedListItem: _removeLinkedListItem,\n    reverting: function reverting() {\n      return _reverting;\n    },\n    context: function context(toAdd) {\n      if (toAdd && _context) {\n        _context.data.push(toAdd);\n\n        toAdd._ctx = _context;\n      }\n\n      return _context;\n    },\n    suppressOverwrites: function suppressOverwrites(value) {\n      return _suppressOverwrites = value;\n    }\n  }\n};\n\n_forEachName(\"to,from,fromTo,delayedCall,set,killTweensOf\", function (name) {\n  return _gsap[name] = Tween[name];\n});\n\n_ticker.add(Timeline.updateRoot);\n\n_quickTween = _gsap.to({}, {\n  duration: 0\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\n\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\n  var pt = plugin._pt;\n\n  while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\n    pt = pt._next;\n  }\n\n  return pt;\n},\n    _addModifiers = function _addModifiers(tween, modifiers) {\n  var targets = tween._targets,\n      p,\n      i,\n      pt;\n\n  for (p in modifiers) {\n    i = targets.length;\n\n    while (i--) {\n      pt = tween._ptLookup[i][p];\n\n      if (pt && (pt = pt.d)) {\n        if (pt._pt) {\n          // is a plugin\n          pt = _getPluginPropTween(pt, p);\n        }\n\n        pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\n      }\n    }\n  }\n},\n    _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\n  return {\n    name: name,\n    rawVars: 1,\n    //don't pre-process function-based values or \"random()\" strings.\n    init: function init(target, vars, tween) {\n      tween._onInit = function (tween) {\n        var temp, p;\n\n        if (_isString(vars)) {\n          temp = {};\n\n          _forEachName(vars, function (name) {\n            return temp[name] = 1;\n          }); //if the user passes in a comma-delimited list of property names to roundProps, like \"x,y\", we round to whole numbers.\n\n\n          vars = temp;\n        }\n\n        if (modifier) {\n          temp = {};\n\n          for (p in vars) {\n            temp[p] = modifier(vars[p]);\n          }\n\n          vars = temp;\n        }\n\n        _addModifiers(tween, vars);\n      };\n    }\n  };\n}; //register core plugins\n\n\nexport var gsap = _gsap.registerPlugin({\n  name: \"attr\",\n  init: function init(target, vars, tween, index, targets) {\n    var p, pt, v;\n    this.tween = tween;\n\n    for (p in vars) {\n      v = target.getAttribute(p) || \"\";\n      pt = this.add(target, \"setAttribute\", (v || 0) + \"\", vars[p], index, targets, 0, 0, p);\n      pt.op = p;\n      pt.b = v; // record the beginning value so we can revert()\n\n      this._props.push(p);\n    }\n  },\n  render: function render(ratio, data) {\n    var pt = data._pt;\n\n    while (pt) {\n      _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)\n\n      pt = pt._next;\n    }\n  }\n}, {\n  name: \"endArray\",\n  init: function init(target, value) {\n    var i = value.length;\n\n    while (i--) {\n      this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);\n    }\n  }\n}, _buildModifierPlugin(\"roundProps\", _roundModifier), _buildModifierPlugin(\"modifiers\"), _buildModifierPlugin(\"snap\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\n\nTween.version = Timeline.version = gsap.version = \"3.12.5\";\n_coreReady = 1;\n_windowExists() && _wake();\nvar Power0 = _easeMap.Power0,\n    Power1 = _easeMap.Power1,\n    Power2 = _easeMap.Power2,\n    Power3 = _easeMap.Power3,\n    Power4 = _easeMap.Power4,\n    Linear = _easeMap.Linear,\n    Quad = _easeMap.Quad,\n    Cubic = _easeMap.Cubic,\n    Quart = _easeMap.Quart,\n    Quint = _easeMap.Quint,\n    Strong = _easeMap.Strong,\n    Elastic = _easeMap.Elastic,\n    Back = _easeMap.Back,\n    SteppedEase = _easeMap.SteppedEase,\n    Bounce = _easeMap.Bounce,\n    Sine = _easeMap.Sine,\n    Expo = _easeMap.Expo,\n    Circ = _easeMap.Circ;\nexport { Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };\nexport { Tween as TweenMax, Tween as TweenLite, Timeline as TimelineMax, Timeline as TimelineLite, gsap as default, wrap, wrapYoyo, distribute, random, snap, normalize, getUnit, clamp, splitColor, toArray, selector, mapRange, pipe, unitize, interpolate, shuffle }; //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\n\nexport { _getProperty, _numExp, _numWithUnitExp, _isString, _isUndefined, _renderComplexString, _relExp, _setDefaults, _removeLinkedListItem, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _replaceRandom, _checkPlugin, _plugins, _ticker, _config, _roundModifier, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative };","/*!\n * CSSPlugin 3.12.5\n * https://gsap.com\n *\n * Copyright 2008-2024, GreenSock. All rights reserved.\n * Subject to the terms at https://gsap.com/standard-license or for\n * Club GSAP members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/\n\n/* eslint-disable */\nimport { gsap, _getProperty, _numExp, _numWithUnitExp, getUnit, _isString, _isUndefined, _renderComplexString, _relExp, _forEachName, _sortPropTweensByPriority, _colorStringFilter, _checkPlugin, _replaceRandom, _plugins, GSCache, PropTween, _config, _ticker, _round, _missingPlugin, _getSetter, _getCache, _colorExp, _parseRelative, _setDefaults, _removeLinkedListItem //for the commented-out className feature.\n} from \"./gsap-core.js\";\n\nvar _win,\n    _doc,\n    _docElement,\n    _pluginInitted,\n    _tempDiv,\n    _tempDivStyler,\n    _recentSetterPlugin,\n    _reverting,\n    _windowExists = function _windowExists() {\n  return typeof window !== \"undefined\";\n},\n    _transformProps = {},\n    _RAD2DEG = 180 / Math.PI,\n    _DEG2RAD = Math.PI / 180,\n    _atan2 = Math.atan2,\n    _bigNum = 1e8,\n    _capsExp = /([A-Z])/g,\n    _horizontalExp = /(left|right|width|margin|padding|x)/i,\n    _complexExp = /[\\s,\\(]\\S/,\n    _propertyAliases = {\n  autoAlpha: \"opacity,visibility\",\n  scale: \"scaleX,scaleY\",\n  alpha: \"opacity\"\n},\n    _renderCSSProp = function _renderCSSProp(ratio, data) {\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n    _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\n  return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\n},\n    _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\n  return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\n},\n    //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\n  var value = data.s + data.c * ratio;\n  data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\n},\n    _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\n  return data.set(data.t, data.p, ratio ? data.e : data.b, data);\n},\n    _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\n  return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\n},\n    _setterCSSStyle = function _setterCSSStyle(target, property, value) {\n  return target.style[property] = value;\n},\n    _setterCSSProp = function _setterCSSProp(target, property, value) {\n  return target.style.setProperty(property, value);\n},\n    _setterTransform = function _setterTransform(target, property, value) {\n  return target._gsap[property] = value;\n},\n    _setterScale = function _setterScale(target, property, value) {\n  return target._gsap.scaleX = target._gsap.scaleY = value;\n},\n    _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\n  var cache = target._gsap;\n  cache.scaleX = cache.scaleY = value;\n  cache.renderTransform(ratio, cache);\n},\n    _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\n  var cache = target._gsap;\n  cache[property] = value;\n  cache.renderTransform(ratio, cache);\n},\n    _transformProp = \"transform\",\n    _transformOriginProp = _transformProp + \"Origin\",\n    _saveStyle = function _saveStyle(property, isNotCSS) {\n  var _this = this;\n\n  var target = this.target,\n      style = target.style,\n      cache = target._gsap;\n\n  if (property in _transformProps && style) {\n    this.tfm = this.tfm || {};\n\n    if (property !== \"transform\") {\n      property = _propertyAliases[property] || property;\n      ~property.indexOf(\",\") ? property.split(\",\").forEach(function (a) {\n        return _this.tfm[a] = _get(target, a);\n      }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property); // note: scale would map to \"scaleX,scaleY\", thus we loop and apply them both.\n\n      property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);\n    } else {\n      return _propertyAliases.transform.split(\",\").forEach(function (p) {\n        return _saveStyle.call(_this, p, isNotCSS);\n      });\n    }\n\n    if (this.props.indexOf(_transformProp) >= 0) {\n      return;\n    }\n\n    if (cache.svg) {\n      this.svgo = target.getAttribute(\"data-svg-origin\");\n      this.props.push(_transformOriginProp, isNotCSS, \"\");\n    }\n\n    property = _transformProp;\n  }\n\n  (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);\n},\n    _removeIndependentTransforms = function _removeIndependentTransforms(style) {\n  if (style.translate) {\n    style.removeProperty(\"translate\");\n    style.removeProperty(\"scale\");\n    style.removeProperty(\"rotate\");\n  }\n},\n    _revertStyle = function _revertStyle() {\n  var props = this.props,\n      target = this.target,\n      style = target.style,\n      cache = target._gsap,\n      i,\n      p;\n\n  for (i = 0; i < props.length; i += 3) {\n    // stored like this: property, isNotCSS, value\n    props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === \"--\" ? props[i] : props[i].replace(_capsExp, \"-$1\").toLowerCase());\n  }\n\n  if (this.tfm) {\n    for (p in this.tfm) {\n      cache[p] = this.tfm[p];\n    }\n\n    if (cache.svg) {\n      cache.renderTransform();\n      target.setAttribute(\"data-svg-origin\", this.svgo || \"\");\n    }\n\n    i = _reverting();\n\n    if ((!i || !i.isStart) && !style[_transformProp]) {\n      _removeIndependentTransforms(style);\n\n      if (cache.zOrigin && style[_transformOriginProp]) {\n        style[_transformOriginProp] += \" \" + cache.zOrigin + \"px\"; // since we're uncaching, we must put the zOrigin back into the transformOrigin so that we can pull it out accurately when we parse again. Otherwise, we'd lose the z portion of the origin since we extract it to protect from Safari bugs.\n\n        cache.zOrigin = 0;\n        cache.renderTransform();\n      }\n\n      cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.\n    }\n  }\n},\n    _getStyleSaver = function _getStyleSaver(target, properties) {\n  var saver = {\n    target: target,\n    props: [],\n    revert: _revertStyle,\n    save: _saveStyle\n  };\n  target._gsap || gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.\n\n  properties && properties.split(\",\").forEach(function (p) {\n    return saver.save(p);\n  });\n  return saver;\n},\n    _supports3D,\n    _createElement = function _createElement(type, ns) {\n  var e = _doc.createElementNS ? _doc.createElementNS((ns || \"http://www.w3.org/1999/xhtml\").replace(/^https/, \"http\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \"style\" inaccessible.\n\n  return e && e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://gsap.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\n},\n    _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\n  var cs = getComputedStyle(target);\n  return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \"-$1\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \"\"; //css variables may not need caps swapped out for dashes and lowercase.\n},\n    _prefixes = \"O,Moz,ms,Ms,Webkit\".split(\",\"),\n    _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\n  var e = element || _tempDiv,\n      s = e.style,\n      i = 5;\n\n  if (property in s && !preferPrefix) {\n    return property;\n  }\n\n  property = property.charAt(0).toUpperCase() + property.substr(1);\n\n  while (i-- && !(_prefixes[i] + property in s)) {}\n\n  return i < 0 ? null : (i === 3 ? \"ms\" : i >= 0 ? _prefixes[i] : \"\") + property;\n},\n    _initCore = function _initCore() {\n  if (_windowExists() && window.document) {\n    _win = window;\n    _doc = _win.document;\n    _docElement = _doc.documentElement;\n    _tempDiv = _createElement(\"div\") || {\n      style: {}\n    };\n    _tempDivStyler = _createElement(\"div\");\n    _transformProp = _checkPropPrefix(_transformProp);\n    _transformOriginProp = _transformProp + \"Origin\";\n    _tempDiv.style.cssText = \"border-width:0;line-height:0;position:absolute;padding:0\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\n\n    _supports3D = !!_checkPropPrefix(\"perspective\");\n    _reverting = gsap.core.reverting;\n    _pluginInitted = 1;\n  }\n},\n    _getBBoxHack = function _getBBoxHack(swapIfPossible) {\n  //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\n  var svg = _createElement(\"svg\", this.ownerSVGElement && this.ownerSVGElement.getAttribute(\"xmlns\") || \"http://www.w3.org/2000/svg\"),\n      oldParent = this.parentNode,\n      oldSibling = this.nextSibling,\n      oldCSS = this.style.cssText,\n      bbox;\n\n  _docElement.appendChild(svg);\n\n  svg.appendChild(this);\n  this.style.display = \"block\";\n\n  if (swapIfPossible) {\n    try {\n      bbox = this.getBBox();\n      this._gsapBBox = this.getBBox; //store the original\n\n      this.getBBox = _getBBoxHack;\n    } catch (e) {}\n  } else if (this._gsapBBox) {\n    bbox = this._gsapBBox();\n  }\n\n  if (oldParent) {\n    if (oldSibling) {\n      oldParent.insertBefore(this, oldSibling);\n    } else {\n      oldParent.appendChild(this);\n    }\n  }\n\n  _docElement.removeChild(svg);\n\n  this.style.cssText = oldCSS;\n  return bbox;\n},\n    _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\n  var i = attributesArray.length;\n\n  while (i--) {\n    if (target.hasAttribute(attributesArray[i])) {\n      return target.getAttribute(attributesArray[i]);\n    }\n  }\n},\n    _getBBox = function _getBBox(target) {\n  var bounds;\n\n  try {\n    bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\n  } catch (error) {\n    bounds = _getBBoxHack.call(target, true);\n  }\n\n  bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\n\n  return bounds && !bounds.width && !bounds.x && !bounds.y ? {\n    x: +_getAttributeFallbacks(target, [\"x\", \"cx\", \"x1\"]) || 0,\n    y: +_getAttributeFallbacks(target, [\"y\", \"cy\", \"y1\"]) || 0,\n    width: 0,\n    height: 0\n  } : bounds;\n},\n    _isSVG = function _isSVG(e) {\n  return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\n},\n    //reports if the element is an SVG on which getBBox() actually works\n_removeProperty = function _removeProperty(target, property) {\n  if (property) {\n    var style = target.style,\n        first2Chars;\n\n    if (property in _transformProps && property !== _transformOriginProp) {\n      property = _transformProp;\n    }\n\n    if (style.removeProperty) {\n      first2Chars = property.substr(0, 2);\n\n      if (first2Chars === \"ms\" || property.substr(0, 6) === \"webkit\") {\n        //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \"ms-transform\" instead of \"-ms-transform\" for IE9, for example)\n        property = \"-\" + property;\n      }\n\n      style.removeProperty(first2Chars === \"--\" ? property : property.replace(_capsExp, \"-$1\").toLowerCase());\n    } else {\n      //note: old versions of IE use \"removeAttribute()\" instead of \"removeProperty()\"\n      style.removeAttribute(property);\n    }\n  }\n},\n    _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\n  var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\n  plugin._pt = pt;\n  pt.b = beginning;\n  pt.e = end;\n\n  plugin._props.push(property);\n\n  return pt;\n},\n    _nonConvertibleUnits = {\n  deg: 1,\n  rad: 1,\n  turn: 1\n},\n    _nonStandardLayouts = {\n  grid: 1,\n  flex: 1\n},\n    //takes a single value like 20px and converts it to the unit specified, like \"%\", returning only the numeric amount.\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\n  var curValue = parseFloat(value) || 0,\n      curUnit = (value + \"\").trim().substr((curValue + \"\").length) || \"px\",\n      // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\n  style = _tempDiv.style,\n      horizontal = _horizontalExp.test(property),\n      isRootSVG = target.tagName.toLowerCase() === \"svg\",\n      measureProperty = (isRootSVG ? \"client\" : \"offset\") + (horizontal ? \"Width\" : \"Height\"),\n      amount = 100,\n      toPixels = unit === \"px\",\n      toPercent = unit === \"%\",\n      px,\n      parent,\n      cache,\n      isSVG;\n\n  if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\n    return curValue;\n  }\n\n  curUnit !== \"px\" && !toPixels && (curValue = _convertToUnit(target, property, value, \"px\"));\n  isSVG = target.getCTM && _isSVG(target);\n\n  if ((toPercent || curUnit === \"%\") && (_transformProps[property] || ~property.indexOf(\"adius\"))) {\n    px = isSVG ? target.getBBox()[horizontal ? \"width\" : \"height\"] : target[measureProperty];\n    return _round(toPercent ? curValue / px * amount : curValue / 100 * px);\n  }\n\n  style[horizontal ? \"width\" : \"height\"] = amount + (toPixels ? curUnit : unit);\n  parent = ~property.indexOf(\"adius\") || unit === \"em\" && target.appendChild && !isRootSVG ? target : target.parentNode;\n\n  if (isSVG) {\n    parent = (target.ownerSVGElement || {}).parentNode;\n  }\n\n  if (!parent || parent === _doc || !parent.appendChild) {\n    parent = _doc.body;\n  }\n\n  cache = parent._gsap;\n\n  if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {\n    return _round(curValue / cache.width * amount);\n  } else {\n    if (toPercent && (property === \"height\" || property === \"width\")) {\n      // if we're dealing with width/height that's inside a container with padding and/or it's a flexbox/grid container, we must apply it to the target itself rather than the _tempDiv in order to ensure complete accuracy, factoring in the parent's padding.\n      var v = target.style[property];\n      target.style[property] = amount + unit;\n      px = target[measureProperty];\n      v ? target.style[property] = v : _removeProperty(target, property);\n    } else {\n      (toPercent || curUnit === \"%\") && !_nonStandardLayouts[_getComputedProperty(parent, \"display\")] && (style.position = _getComputedProperty(target, \"position\"));\n      parent === target && (style.position = \"static\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\n\n      parent.appendChild(_tempDiv);\n      px = _tempDiv[measureProperty];\n      parent.removeChild(_tempDiv);\n      style.position = \"absolute\";\n    }\n\n    if (horizontal && toPercent) {\n      cache = _getCache(parent);\n      cache.time = _ticker.time;\n      cache.width = parent[measureProperty];\n    }\n  }\n\n  return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\n},\n    _get = function _get(target, property, unit, uncache) {\n  var value;\n  _pluginInitted || _initCore();\n\n  if (property in _propertyAliases && property !== \"transform\") {\n    property = _propertyAliases[property];\n\n    if (~property.indexOf(\",\")) {\n      property = property.split(\",\")[0];\n    }\n  }\n\n  if (_transformProps[property] && property !== \"transform\") {\n    value = _parseTransform(target, uncache);\n    value = property !== \"transformOrigin\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \" \" + value.zOrigin + \"px\";\n  } else {\n    value = target.style[property];\n\n    if (!value || value === \"auto\" || uncache || ~(value + \"\").indexOf(\"calc(\")) {\n      value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === \"opacity\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like  borderTopLeftRadius\n    }\n  }\n\n  return unit && !~(value + \"\").trim().indexOf(\" \") ? _convertToUnit(target, property, value, unit) + unit : value;\n},\n    _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\n  // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \"this\" would refer to the plugin.\n  if (!start || start === \"none\") {\n    // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\"clipPath\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \"none\" whereas WebkitClipPath reports accurately like \"ellipse(100% 0% at 50% 0%)\", so in this case we must SWITCH to using the prefixed property instead. See https://gsap.com/forums/topic/18310-clippath-doesnt-work-on-ios/\n    var p = _checkPropPrefix(prop, target, 1),\n        s = p && _getComputedProperty(target, p, 1);\n\n    if (s && s !== start) {\n      prop = p;\n      start = s;\n    } else if (prop === \"borderColor\") {\n      start = _getComputedProperty(target, \"borderTopColor\"); // Firefox bug: always reports \"borderColor\" as \"\", so we must fall back to borderTopColor. See https://gsap.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\n    }\n  }\n\n  var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),\n      index = 0,\n      matchIndex = 0,\n      a,\n      result,\n      startValues,\n      startNum,\n      color,\n      startValue,\n      endValue,\n      endNum,\n      chunk,\n      endUnit,\n      startUnit,\n      endValues;\n  pt.b = start;\n  pt.e = end;\n  start += \"\"; // ensure values are strings\n\n  end += \"\";\n\n  if (end === \"auto\") {\n    startValue = target.style[prop];\n    target.style[prop] = end;\n    end = _getComputedProperty(target, prop) || end;\n    startValue ? target.style[prop] = startValue : _removeProperty(target, prop);\n  }\n\n  a = [start, end];\n\n  _colorStringFilter(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\n\n\n  start = a[0];\n  end = a[1];\n  startValues = start.match(_numWithUnitExp) || [];\n  endValues = end.match(_numWithUnitExp) || [];\n\n  if (endValues.length) {\n    while (result = _numWithUnitExp.exec(end)) {\n      endValue = result[0];\n      chunk = end.substring(index, result.index);\n\n      if (color) {\n        color = (color + 1) % 5;\n      } else if (chunk.substr(-5) === \"rgba(\" || chunk.substr(-5) === \"hsla(\") {\n        color = 1;\n      }\n\n      if (endValue !== (startValue = startValues[matchIndex++] || \"\")) {\n        startNum = parseFloat(startValue) || 0;\n        startUnit = startValue.substr((startNum + \"\").length);\n        endValue.charAt(1) === \"=\" && (endValue = _parseRelative(startNum, endValue) + startUnit);\n        endNum = parseFloat(endValue);\n        endUnit = endValue.substr((endNum + \"\").length);\n        index = _numWithUnitExp.lastIndex - endUnit.length;\n\n        if (!endUnit) {\n          //if something like \"perspective:300\" is passed in and we must add a unit to the end\n          endUnit = endUnit || _config.units[prop] || startUnit;\n\n          if (index === end.length) {\n            end += endUnit;\n            pt.e += endUnit;\n          }\n        }\n\n        if (startUnit !== endUnit) {\n          startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\n        } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\n\n\n        pt._pt = {\n          _next: pt._pt,\n          p: chunk || matchIndex === 1 ? chunk : \",\",\n          //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\n          s: startNum,\n          c: endNum - startNum,\n          m: color && color < 4 || prop === \"zIndex\" ? Math.round : 0\n        };\n      }\n    }\n\n    pt.c = index < end.length ? end.substring(index, end.length) : \"\"; //we use the \"c\" of the PropTween to store the final part of the string (after the last number)\n  } else {\n    pt.r = prop === \"display\" && end === \"none\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\n  }\n\n  _relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\n\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \"this\" would refer to the plugin.\n\n  return pt;\n},\n    _keywordToPercent = {\n  top: \"0%\",\n  bottom: \"100%\",\n  left: \"0%\",\n  right: \"100%\",\n  center: \"50%\"\n},\n    _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\n  var split = value.split(\" \"),\n      x = split[0],\n      y = split[1] || \"50%\";\n\n  if (x === \"top\" || x === \"bottom\" || y === \"left\" || y === \"right\") {\n    //the user provided them in the wrong order, so flip them\n    value = x;\n    x = y;\n    y = value;\n  }\n\n  split[0] = _keywordToPercent[x] || x;\n  split[1] = _keywordToPercent[y] || y;\n  return split.join(\" \");\n},\n    _renderClearProps = function _renderClearProps(ratio, data) {\n  if (data.tween && data.tween._time === data.tween._dur) {\n    var target = data.t,\n        style = target.style,\n        props = data.u,\n        cache = target._gsap,\n        prop,\n        clearTransforms,\n        i;\n\n    if (props === \"all\" || props === true) {\n      style.cssText = \"\";\n      clearTransforms = 1;\n    } else {\n      props = props.split(\",\");\n      i = props.length;\n\n      while (--i > -1) {\n        prop = props[i];\n\n        if (_transformProps[prop]) {\n          clearTransforms = 1;\n          prop = prop === \"transformOrigin\" ? _transformOriginProp : _transformProp;\n        }\n\n        _removeProperty(target, prop);\n      }\n    }\n\n    if (clearTransforms) {\n      _removeProperty(target, _transformProp);\n\n      if (cache) {\n        cache.svg && target.removeAttribute(\"transform\");\n\n        _parseTransform(target, 1); // force all the cached values back to \"normal\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\n\n\n        cache.uncache = 1;\n\n        _removeIndependentTransforms(style);\n      }\n    }\n  }\n},\n    // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\n_specialProps = {\n  clearProps: function clearProps(plugin, target, property, endValue, tween) {\n    if (tween.data !== \"isFromStart\") {\n      var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\n      pt.u = endValue;\n      pt.pr = -10;\n      pt.tween = tween;\n\n      plugin._props.push(property);\n\n      return 1;\n    }\n  }\n  /* className feature (about 0.4kb gzipped).\n  , className(plugin, target, property, endValue, tween) {\n  \tlet _renderClassName = (ratio, data) => {\n  \t\t\tdata.css.render(ratio, data.css);\n  \t\t\tif (!ratio || ratio === 1) {\n  \t\t\t\tlet inline = data.rmv,\n  \t\t\t\t\ttarget = data.t,\n  \t\t\t\t\tp;\n  \t\t\t\ttarget.setAttribute(\"class\", ratio ? data.e : data.b);\n  \t\t\t\tfor (p in inline) {\n  \t\t\t\t\t_removeProperty(target, p);\n  \t\t\t\t}\n  \t\t\t}\n  \t\t},\n  \t\t_getAllStyles = (target) => {\n  \t\t\tlet styles = {},\n  \t\t\t\tcomputed = getComputedStyle(target),\n  \t\t\t\tp;\n  \t\t\tfor (p in computed) {\n  \t\t\t\tif (isNaN(p) && p !== \"cssText\" && p !== \"length\") {\n  \t\t\t\t\tstyles[p] = computed[p];\n  \t\t\t\t}\n  \t\t\t}\n  \t\t\t_setDefaults(styles, _parseTransform(target, 1));\n  \t\t\treturn styles;\n  \t\t},\n  \t\tstartClassList = target.getAttribute(\"class\"),\n  \t\tstyle = target.style,\n  \t\tcssText = style.cssText,\n  \t\tcache = target._gsap,\n  \t\tclassPT = cache.classPT,\n  \t\tinlineToRemoveAtEnd = {},\n  \t\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \"=\") ? endValue : startClassList.replace(new RegExp(\"(?:\\\\s|^)\" + endValue.substr(2) + \"(?![\\\\w-])\"), \"\") + ((endValue.charAt(0) === \"+\") ? \" \" + endValue.substr(2) : \"\")},\n  \t\tchangingVars = {},\n  \t\tstartVars = _getAllStyles(target),\n  \t\ttransformRelated = /(transform|perspective)/i,\n  \t\tendVars, p;\n  \tif (classPT) {\n  \t\tclassPT.r(1, classPT.d);\n  \t\t_removeLinkedListItem(classPT.d.plugin, classPT, \"_pt\");\n  \t}\n  \ttarget.setAttribute(\"class\", data.e);\n  \tendVars = _getAllStyles(target, true);\n  \ttarget.setAttribute(\"class\", startClassList);\n  \tfor (p in endVars) {\n  \t\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\n  \t\t\tchangingVars[p] = endVars[p];\n  \t\t\tif (!style[p] && style[p] !== \"0\") {\n  \t\t\t\tinlineToRemoveAtEnd[p] = 1;\n  \t\t\t}\n  \t\t}\n  \t}\n  \tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \"className\", 0, 0, _renderClassName, data, 0, -11);\n  \tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\n  \t\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\n  \t}\n  \t_parseTransform(target, true); //to clear the caching of transforms\n  \tdata.css = new gsap.plugins.css();\n  \tdata.css.init(target, changingVars, tween);\n  \tplugin._props.push(...data.css._props);\n  \treturn 1;\n  }\n  */\n\n},\n\n/*\n * --------------------------------------------------------------------------------------\n * TRANSFORMS\n * --------------------------------------------------------------------------------------\n */\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\n    _rotationalProperties = {},\n    _isNullTransform = function _isNullTransform(value) {\n  return value === \"matrix(1, 0, 0, 1, 0, 0)\" || value === \"none\" || !value;\n},\n    _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\n  var matrixString = _getComputedProperty(target, _transformProp);\n\n  return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);\n},\n    _getMatrix = function _getMatrix(target, force2D) {\n  var cache = target._gsap || _getCache(target),\n      style = target.style,\n      matrix = _getComputedTransformMatrixAsArray(target),\n      parent,\n      nextSibling,\n      temp,\n      addedToDOM;\n\n  if (cache.svg && target.getAttribute(\"transform\")) {\n    temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \"translate(50,60) rotate(135,0,0)\" are parsed because it mashes it into a matrix.\n\n    matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\n    return matrix.join(\",\") === \"1,0,0,1,0,0\" ? _identity2DMatrix : matrix;\n  } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\n    //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n    //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \"none\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\n    temp = style.display;\n    style.display = \"block\";\n    parent = target.parentNode;\n\n    if (!parent || !target.offsetParent) {\n      // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375\n      addedToDOM = 1; //flag\n\n      nextSibling = target.nextElementSibling;\n\n      _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\n\n    }\n\n    matrix = _getComputedTransformMatrixAsArray(target);\n    temp ? style.display = temp : _removeProperty(target, \"display\");\n\n    if (addedToDOM) {\n      nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\n    }\n  }\n\n  return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\n},\n    _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\n  var cache = target._gsap,\n      matrix = matrixArray || _getMatrix(target, true),\n      xOriginOld = cache.xOrigin || 0,\n      yOriginOld = cache.yOrigin || 0,\n      xOffsetOld = cache.xOffset || 0,\n      yOffsetOld = cache.yOffset || 0,\n      a = matrix[0],\n      b = matrix[1],\n      c = matrix[2],\n      d = matrix[3],\n      tx = matrix[4],\n      ty = matrix[5],\n      originSplit = origin.split(\" \"),\n      xOrigin = parseFloat(originSplit[0]) || 0,\n      yOrigin = parseFloat(originSplit[1]) || 0,\n      bounds,\n      determinant,\n      x,\n      y;\n\n  if (!originIsAbsolute) {\n    bounds = _getBBox(target);\n    xOrigin = bounds.x + (~originSplit[0].indexOf(\"%\") ? xOrigin / 100 * bounds.width : xOrigin);\n    yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\"%\") ? yOrigin / 100 * bounds.height : yOrigin); // if (!(\"xOrigin\" in cache) && (xOrigin || yOrigin)) { // added in 3.12.3, reverted in 3.12.4; requires more exploration\n    // \txOrigin -= bounds.x;\n    // \tyOrigin -= bounds.y;\n    // }\n  } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\n    //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\n    x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\n    y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\n    xOrigin = x;\n    yOrigin = y; // theory: we only had to do this for smoothing and it assumes that the previous one was not originIsAbsolute.\n  }\n\n  if (smooth || smooth !== false && cache.smooth) {\n    tx = xOrigin - xOriginOld;\n    ty = yOrigin - yOriginOld;\n    cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\n    cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\n  } else {\n    cache.xOffset = cache.yOffset = 0;\n  }\n\n  cache.xOrigin = xOrigin;\n  cache.yOrigin = yOrigin;\n  cache.smooth = !!smooth;\n  cache.origin = origin;\n  cache.originIsAbsolute = !!originIsAbsolute;\n  target.style[_transformOriginProp] = \"0px 0px\"; //otherwise, if someone sets  an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\n\n  if (pluginToAddPropTweensTo) {\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOrigin\", xOriginOld, xOrigin);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOrigin\", yOriginOld, yOrigin);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"xOffset\", xOffsetOld, cache.xOffset);\n\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \"yOffset\", yOffsetOld, cache.yOffset);\n  }\n\n  target.setAttribute(\"data-svg-origin\", xOrigin + \" \" + yOrigin);\n},\n    _parseTransform = function _parseTransform(target, uncache) {\n  var cache = target._gsap || new GSCache(target);\n\n  if (\"x\" in cache && !uncache && !cache.uncache) {\n    return cache;\n  }\n\n  var style = target.style,\n      invertedScaleX = cache.scaleX < 0,\n      px = \"px\",\n      deg = \"deg\",\n      cs = getComputedStyle(target),\n      origin = _getComputedProperty(target, _transformOriginProp) || \"0\",\n      x,\n      y,\n      z,\n      scaleX,\n      scaleY,\n      rotation,\n      rotationX,\n      rotationY,\n      skewX,\n      skewY,\n      perspective,\n      xOrigin,\n      yOrigin,\n      matrix,\n      angle,\n      cos,\n      sin,\n      a,\n      b,\n      c,\n      d,\n      a12,\n      a22,\n      t1,\n      t2,\n      t3,\n      a13,\n      a23,\n      a33,\n      a42,\n      a43,\n      a32;\n  x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\n  scaleX = scaleY = 1;\n  cache.svg = !!(target.getCTM && _isSVG(target));\n\n  if (cs.translate) {\n    // accommodate independent transforms by combining them into normal ones.\n    if (cs.translate !== \"none\" || cs.scale !== \"none\" || cs.rotate !== \"none\") {\n      style[_transformProp] = (cs.translate !== \"none\" ? \"translate3d(\" + (cs.translate + \" 0 0\").split(\" \").slice(0, 3).join(\", \") + \") \" : \"\") + (cs.rotate !== \"none\" ? \"rotate(\" + cs.rotate + \") \" : \"\") + (cs.scale !== \"none\" ? \"scale(\" + cs.scale.split(\" \").join(\",\") + \") \" : \"\") + (cs[_transformProp] !== \"none\" ? cs[_transformProp] : \"\");\n    }\n\n    style.scale = style.rotate = style.translate = \"none\";\n  }\n\n  matrix = _getMatrix(target, cache.svg);\n\n  if (cache.svg) {\n    if (cache.uncache) {\n      // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \"px \" + (cache.yOrigin - bbox.y) + \"px\". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.\n      t2 = target.getBBox();\n      origin = cache.xOrigin - t2.x + \"px \" + (cache.yOrigin - t2.y) + \"px\";\n      t1 = \"\";\n    } else {\n      t1 = !uncache && target.getAttribute(\"data-svg-origin\"); //  Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\n    }\n\n    _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\n  }\n\n  xOrigin = cache.xOrigin || 0;\n  yOrigin = cache.yOrigin || 0;\n\n  if (matrix !== _identity2DMatrix) {\n    a = matrix[0]; //a11\n\n    b = matrix[1]; //a21\n\n    c = matrix[2]; //a31\n\n    d = matrix[3]; //a41\n\n    x = a12 = matrix[4];\n    y = a22 = matrix[5]; //2D matrix\n\n    if (matrix.length === 6) {\n      scaleX = Math.sqrt(a * a + b * b);\n      scaleY = Math.sqrt(d * d + c * c);\n      rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\n\n      skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\n      skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\n\n      if (cache.svg) {\n        x -= xOrigin - (xOrigin * a + yOrigin * c);\n        y -= yOrigin - (xOrigin * b + yOrigin * d);\n      } //3D matrix\n\n    } else {\n      a32 = matrix[6];\n      a42 = matrix[7];\n      a13 = matrix[8];\n      a23 = matrix[9];\n      a33 = matrix[10];\n      a43 = matrix[11];\n      x = matrix[12];\n      y = matrix[13];\n      z = matrix[14];\n      angle = _atan2(a32, a33);\n      rotationX = angle * _RAD2DEG; //rotationX\n\n      if (angle) {\n        cos = Math.cos(-angle);\n        sin = Math.sin(-angle);\n        t1 = a12 * cos + a13 * sin;\n        t2 = a22 * cos + a23 * sin;\n        t3 = a32 * cos + a33 * sin;\n        a13 = a12 * -sin + a13 * cos;\n        a23 = a22 * -sin + a23 * cos;\n        a33 = a32 * -sin + a33 * cos;\n        a43 = a42 * -sin + a43 * cos;\n        a12 = t1;\n        a22 = t2;\n        a32 = t3;\n      } //rotationY\n\n\n      angle = _atan2(-c, a33);\n      rotationY = angle * _RAD2DEG;\n\n      if (angle) {\n        cos = Math.cos(-angle);\n        sin = Math.sin(-angle);\n        t1 = a * cos - a13 * sin;\n        t2 = b * cos - a23 * sin;\n        t3 = c * cos - a33 * sin;\n        a43 = d * sin + a43 * cos;\n        a = t1;\n        b = t2;\n        c = t3;\n      } //rotationZ\n\n\n      angle = _atan2(b, a);\n      rotation = angle * _RAD2DEG;\n\n      if (angle) {\n        cos = Math.cos(angle);\n        sin = Math.sin(angle);\n        t1 = a * cos + b * sin;\n        t2 = a12 * cos + a22 * sin;\n        b = b * cos - a * sin;\n        a22 = a22 * cos - a12 * sin;\n        a = t1;\n        a12 = t2;\n      }\n\n      if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\n        //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\n        rotationX = rotation = 0;\n        rotationY = 180 - rotationY;\n      }\n\n      scaleX = _round(Math.sqrt(a * a + b * b + c * c));\n      scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));\n      angle = _atan2(a12, a22);\n      skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\n      perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\n    }\n\n    if (cache.svg) {\n      //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\n      t1 = target.getAttribute(\"transform\");\n      cache.forceCSS = target.setAttribute(\"transform\", \"\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\n      t1 && target.setAttribute(\"transform\", t1);\n    }\n  }\n\n  if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\n    if (invertedScaleX) {\n      scaleX *= -1;\n      skewX += rotation <= 0 ? 180 : -180;\n      rotation += rotation <= 0 ? 180 : -180;\n    } else {\n      scaleY *= -1;\n      skewX += skewX <= 0 ? 180 : -180;\n    }\n  }\n\n  uncache = uncache || cache.uncache;\n  cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\n  cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\n  cache.z = z + px;\n  cache.scaleX = _round(scaleX);\n  cache.scaleY = _round(scaleY);\n  cache.rotation = _round(rotation) + deg;\n  cache.rotationX = _round(rotationX) + deg;\n  cache.rotationY = _round(rotationY) + deg;\n  cache.skewX = skewX + deg;\n  cache.skewY = skewY + deg;\n  cache.transformPerspective = perspective + px;\n\n  if (cache.zOrigin = parseFloat(origin.split(\" \")[2]) || !uncache && cache.zOrigin || 0) {\n    style[_transformOriginProp] = _firstTwoOnly(origin);\n  }\n\n  cache.xOffset = cache.yOffset = 0;\n  cache.force3D = _config.force3D;\n  cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\n  cache.uncache = 0;\n  return cache;\n},\n    _firstTwoOnly = function _firstTwoOnly(value) {\n  return (value = value.split(\" \"))[0] + \" \" + value[1];\n},\n    //for handling transformOrigin values, stripping out the 3rd dimension\n_addPxTranslate = function _addPxTranslate(target, start, value) {\n  var unit = getUnit(start);\n  return _round(parseFloat(start) + parseFloat(_convertToUnit(target, \"x\", value + \"px\", unit))) + unit;\n},\n    _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\n  cache.z = \"0px\";\n  cache.rotationY = cache.rotationX = \"0deg\";\n  cache.force3D = 0;\n\n  _renderCSSTransforms(ratio, cache);\n},\n    _zeroDeg = \"0deg\",\n    _zeroPx = \"0px\",\n    _endParenthesis = \") \",\n    _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\n  var _ref = cache || this,\n      xPercent = _ref.xPercent,\n      yPercent = _ref.yPercent,\n      x = _ref.x,\n      y = _ref.y,\n      z = _ref.z,\n      rotation = _ref.rotation,\n      rotationY = _ref.rotationY,\n      rotationX = _ref.rotationX,\n      skewX = _ref.skewX,\n      skewY = _ref.skewY,\n      scaleX = _ref.scaleX,\n      scaleY = _ref.scaleY,\n      transformPerspective = _ref.transformPerspective,\n      force3D = _ref.force3D,\n      target = _ref.target,\n      zOrigin = _ref.zOrigin,\n      transforms = \"\",\n      use3D = force3D === \"auto\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\n\n\n  if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\n    var angle = parseFloat(rotationY) * _DEG2RAD,\n        a13 = Math.sin(angle),\n        a33 = Math.cos(angle),\n        cos;\n\n    angle = parseFloat(rotationX) * _DEG2RAD;\n    cos = Math.cos(angle);\n    x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\n    y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\n    z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\n  }\n\n  if (transformPerspective !== _zeroPx) {\n    transforms += \"perspective(\" + transformPerspective + _endParenthesis;\n  }\n\n  if (xPercent || yPercent) {\n    transforms += \"translate(\" + xPercent + \"%, \" + yPercent + \"%) \";\n  }\n\n  if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\n    transforms += z !== _zeroPx || use3D ? \"translate3d(\" + x + \", \" + y + \", \" + z + \") \" : \"translate(\" + x + \", \" + y + _endParenthesis;\n  }\n\n  if (rotation !== _zeroDeg) {\n    transforms += \"rotate(\" + rotation + _endParenthesis;\n  }\n\n  if (rotationY !== _zeroDeg) {\n    transforms += \"rotateY(\" + rotationY + _endParenthesis;\n  }\n\n  if (rotationX !== _zeroDeg) {\n    transforms += \"rotateX(\" + rotationX + _endParenthesis;\n  }\n\n  if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\n    transforms += \"skew(\" + skewX + \", \" + skewY + _endParenthesis;\n  }\n\n  if (scaleX !== 1 || scaleY !== 1) {\n    transforms += \"scale(\" + scaleX + \", \" + scaleY + _endParenthesis;\n  }\n\n  target.style[_transformProp] = transforms || \"translate(0, 0)\";\n},\n    _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\n  var _ref2 = cache || this,\n      xPercent = _ref2.xPercent,\n      yPercent = _ref2.yPercent,\n      x = _ref2.x,\n      y = _ref2.y,\n      rotation = _ref2.rotation,\n      skewX = _ref2.skewX,\n      skewY = _ref2.skewY,\n      scaleX = _ref2.scaleX,\n      scaleY = _ref2.scaleY,\n      target = _ref2.target,\n      xOrigin = _ref2.xOrigin,\n      yOrigin = _ref2.yOrigin,\n      xOffset = _ref2.xOffset,\n      yOffset = _ref2.yOffset,\n      forceCSS = _ref2.forceCSS,\n      tx = parseFloat(x),\n      ty = parseFloat(y),\n      a11,\n      a21,\n      a12,\n      a22,\n      temp;\n\n  rotation = parseFloat(rotation);\n  skewX = parseFloat(skewX);\n  skewY = parseFloat(skewY);\n\n  if (skewY) {\n    //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\n    skewY = parseFloat(skewY);\n    skewX += skewY;\n    rotation += skewY;\n  }\n\n  if (rotation || skewX) {\n    rotation *= _DEG2RAD;\n    skewX *= _DEG2RAD;\n    a11 = Math.cos(rotation) * scaleX;\n    a21 = Math.sin(rotation) * scaleX;\n    a12 = Math.sin(rotation - skewX) * -scaleY;\n    a22 = Math.cos(rotation - skewX) * scaleY;\n\n    if (skewX) {\n      skewY *= _DEG2RAD;\n      temp = Math.tan(skewX - skewY);\n      temp = Math.sqrt(1 + temp * temp);\n      a12 *= temp;\n      a22 *= temp;\n\n      if (skewY) {\n        temp = Math.tan(skewY);\n        temp = Math.sqrt(1 + temp * temp);\n        a11 *= temp;\n        a21 *= temp;\n      }\n    }\n\n    a11 = _round(a11);\n    a21 = _round(a21);\n    a12 = _round(a12);\n    a22 = _round(a22);\n  } else {\n    a11 = scaleX;\n    a22 = scaleY;\n    a21 = a12 = 0;\n  }\n\n  if (tx && !~(x + \"\").indexOf(\"px\") || ty && !~(y + \"\").indexOf(\"px\")) {\n    tx = _convertToUnit(target, \"x\", x, \"px\");\n    ty = _convertToUnit(target, \"y\", y, \"px\");\n  }\n\n  if (xOrigin || yOrigin || xOffset || yOffset) {\n    tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\n    ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\n  }\n\n  if (xPercent || yPercent) {\n    //The SVG spec doesn't support percentage-based translation in the \"transform\" attribute, so we merge it into the translation to simulate it.\n    temp = target.getBBox();\n    tx = _round(tx + xPercent / 100 * temp.width);\n    ty = _round(ty + yPercent / 100 * temp.height);\n  }\n\n  temp = \"matrix(\" + a11 + \",\" + a21 + \",\" + a12 + \",\" + a22 + \",\" + tx + \",\" + ty + \")\";\n  target.setAttribute(\"transform\", temp);\n  forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\n},\n    _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {\n  var cap = 360,\n      isString = _isString(endValue),\n      endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\"rad\") ? _RAD2DEG : 1),\n      change = endNum - startNum,\n      finalValue = startNum + change + \"deg\",\n      direction,\n      pt;\n\n  if (isString) {\n    direction = endValue.split(\"_\")[1];\n\n    if (direction === \"short\") {\n      change %= cap;\n\n      if (change !== change % (cap / 2)) {\n        change += change < 0 ? cap : -cap;\n      }\n    }\n\n    if (direction === \"cw\" && change < 0) {\n      change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\n    } else if (direction === \"ccw\" && change > 0) {\n      change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\n    }\n  }\n\n  plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\n  pt.e = finalValue;\n  pt.u = \"deg\";\n\n  plugin._props.push(property);\n\n  return pt;\n},\n    _assign = function _assign(target, source) {\n  // Internet Explorer doesn't have Object.assign(), so we recreate it here.\n  for (var p in source) {\n    target[p] = source[p];\n  }\n\n  return target;\n},\n    _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\n  //for handling cases where someone passes in a whole transform string, like transform: \"scale(2, 3) rotate(20deg) translateY(30em)\"\n  var startCache = _assign({}, target._gsap),\n      exclude = \"perspective,force3D,transformOrigin,svgOrigin\",\n      style = target.style,\n      endCache,\n      p,\n      startValue,\n      endValue,\n      startNum,\n      endNum,\n      startUnit,\n      endUnit;\n\n  if (startCache.svg) {\n    startValue = target.getAttribute(\"transform\");\n    target.setAttribute(\"transform\", \"\");\n    style[_transformProp] = transforms;\n    endCache = _parseTransform(target, 1);\n\n    _removeProperty(target, _transformProp);\n\n    target.setAttribute(\"transform\", startValue);\n  } else {\n    startValue = getComputedStyle(target)[_transformProp];\n    style[_transformProp] = transforms;\n    endCache = _parseTransform(target, 1);\n    style[_transformProp] = startValue;\n  }\n\n  for (p in _transformProps) {\n    startValue = startCache[p];\n    endValue = endCache[p];\n\n    if (startValue !== endValue && exclude.indexOf(p) < 0) {\n      //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\n      startUnit = getUnit(startValue);\n      endUnit = getUnit(endValue);\n      startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\n      endNum = parseFloat(endValue);\n      plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\n      plugin._pt.u = endUnit || 0;\n\n      plugin._props.push(p);\n    }\n  }\n\n  _assign(endCache, startCache);\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\n\n\n_forEachName(\"padding,margin,Width,Radius\", function (name, index) {\n  var t = \"Top\",\n      r = \"Right\",\n      b = \"Bottom\",\n      l = \"Left\",\n      props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\n    return index < 2 ? name + side : \"border\" + side + name;\n  });\n\n  _specialProps[index > 1 ? \"border\" + name : name] = function (plugin, target, property, endValue, tween) {\n    var a, vars;\n\n    if (arguments.length < 4) {\n      // getter, passed target, property, and unit (from _get())\n      a = props.map(function (prop) {\n        return _get(plugin, prop, property);\n      });\n      vars = a.join(\" \");\n      return vars.split(a[0]).length === 5 ? a[0] : vars;\n    }\n\n    a = (endValue + \"\").split(\" \");\n    vars = {};\n    props.forEach(function (prop, i) {\n      return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\n    });\n    plugin.init(target, vars, tween);\n  };\n});\n\nexport var CSSPlugin = {\n  name: \"css\",\n  register: _initCore,\n  targetTest: function targetTest(target) {\n    return target.style && target.nodeType;\n  },\n  init: function init(target, vars, tween, index, targets) {\n    var props = this._props,\n        style = target.style,\n        startAt = tween.vars.startAt,\n        startValue,\n        endValue,\n        endNum,\n        startNum,\n        type,\n        specialProp,\n        p,\n        startUnit,\n        endUnit,\n        relative,\n        isTransformRelated,\n        transformPropTween,\n        cache,\n        smooth,\n        hasPriority,\n        inlineProps;\n    _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps\n\n    this.styles = this.styles || _getStyleSaver(target);\n    inlineProps = this.styles.props;\n    this.tween = tween;\n\n    for (p in vars) {\n      if (p === \"autoRound\") {\n        continue;\n      }\n\n      endValue = vars[p];\n\n      if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {\n        // plugins\n        continue;\n      }\n\n      type = typeof endValue;\n      specialProp = _specialProps[p];\n\n      if (type === \"function\") {\n        endValue = endValue.call(tween, index, target, targets);\n        type = typeof endValue;\n      }\n\n      if (type === \"string\" && ~endValue.indexOf(\"random(\")) {\n        endValue = _replaceRandom(endValue);\n      }\n\n      if (specialProp) {\n        specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\n      } else if (p.substr(0, 2) === \"--\") {\n        //CSS variable\n        startValue = (getComputedStyle(target).getPropertyValue(p) + \"\").trim();\n        endValue += \"\";\n        _colorExp.lastIndex = 0;\n\n        if (!_colorExp.test(startValue)) {\n          // colors don't have units\n          startUnit = getUnit(startValue);\n          endUnit = getUnit(endValue);\n        }\n\n        endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\n        this.add(style, \"setProperty\", startValue, endValue, index, targets, 0, 0, p);\n        props.push(p);\n        inlineProps.push(p, 0, style[p]);\n      } else if (type !== \"undefined\") {\n        if (startAt && p in startAt) {\n          // in case someone hard-codes a complex value as the start, like top: \"calc(2vh / 2)\". Without this, it'd use the computed value (always in px)\n          startValue = typeof startAt[p] === \"function\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\n          _isString(startValue) && ~startValue.indexOf(\"random(\") && (startValue = _replaceRandom(startValue));\n          getUnit(startValue + \"\") || startValue === \"auto\" || (startValue += _config.units[p] || getUnit(_get(target, p)) || \"\"); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\n\n          (startValue + \"\").charAt(1) === \"=\" && (startValue = _get(target, p)); // can't work with relative values\n        } else {\n          startValue = _get(target, p);\n        }\n\n        startNum = parseFloat(startValue);\n        relative = type === \"string\" && endValue.charAt(1) === \"=\" && endValue.substr(0, 2);\n        relative && (endValue = endValue.substr(2));\n        endNum = parseFloat(endValue);\n\n        if (p in _propertyAliases) {\n          if (p === \"autoAlpha\") {\n            //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\n            if (startNum === 1 && _get(target, \"visibility\") === \"hidden\" && endNum) {\n              //if visibility is initially set to \"hidden\", we should interpret that as intent to make opacity 0 (a convenience)\n              startNum = 0;\n            }\n\n            inlineProps.push(\"visibility\", 0, style.visibility);\n\n            _addNonTweeningPT(this, style, \"visibility\", startNum ? \"inherit\" : \"hidden\", endNum ? \"inherit\" : \"hidden\", !endNum);\n          }\n\n          if (p !== \"scale\" && p !== \"transform\") {\n            p = _propertyAliases[p];\n            ~p.indexOf(\",\") && (p = p.split(\",\")[0]);\n          }\n        }\n\n        isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\n\n        if (isTransformRelated) {\n          this.styles.save(p);\n\n          if (!transformPropTween) {\n            cache = target._gsap;\n            cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\"translateX(50vw)\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\n\n            smooth = vars.smoothOrigin !== false && cache.smooth;\n            transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\n\n            transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\n          }\n\n          if (p === \"scale\") {\n            this._pt = new PropTween(this._pt, cache, \"scaleY\", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);\n            this._pt.u = 0;\n            props.push(\"scaleY\", p);\n            p += \"X\";\n          } else if (p === \"transformOrigin\") {\n            inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);\n            endValue = _convertKeywordsToPercentages(endValue); //in case something like \"left top\" or \"bottom right\" is passed in. Convert to percentages.\n\n            if (cache.svg) {\n              _applySVGOrigin(target, endValue, 0, smooth, 0, this);\n            } else {\n              endUnit = parseFloat(endValue.split(\" \")[2]) || 0; //handle the zOrigin separately!\n\n              endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \"zOrigin\", cache.zOrigin, endUnit);\n\n              _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\n            }\n\n            continue;\n          } else if (p === \"svgOrigin\") {\n            _applySVGOrigin(target, endValue, 1, smooth, 0, this);\n\n            continue;\n          } else if (p in _rotationalProperties) {\n            _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);\n\n            continue;\n          } else if (p === \"smoothOrigin\") {\n            _addNonTweeningPT(this, cache, \"smooth\", cache.smooth, endValue);\n\n            continue;\n          } else if (p === \"force3D\") {\n            cache[p] = endValue;\n            continue;\n          } else if (p === \"transform\") {\n            _addRawTransformPTs(this, endValue, target);\n\n            continue;\n          }\n        } else if (!(p in style)) {\n          p = _checkPropPrefix(p) || p;\n        }\n\n        if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\n          startUnit = (startValue + \"\").substr((startNum + \"\").length);\n          endNum || (endNum = 0); // protect against NaN\n\n          endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);\n          startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\n          this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === \"px\" || p === \"zIndex\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\n          this._pt.u = endUnit || 0;\n\n          if (startUnit !== endUnit && endUnit !== \"%\") {\n            //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \"b\" (beginning) property and point to a render method that handles that. (performance optimization)\n            this._pt.b = startValue;\n            this._pt.r = _renderCSSPropWithBeginning;\n          }\n        } else if (!(p in style)) {\n          if (p in target) {\n            //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\n            this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);\n          } else if (p !== \"parseTransform\") {\n            _missingPlugin(p, endValue);\n\n            continue;\n          }\n        } else {\n          _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);\n        }\n\n        isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p]));\n        props.push(p);\n      }\n    }\n\n    hasPriority && _sortPropTweensByPriority(this);\n  },\n  render: function render(ratio, data) {\n    if (data.tween._time || !_reverting()) {\n      var pt = data._pt;\n\n      while (pt) {\n        pt.r(ratio, pt.d);\n        pt = pt._next;\n      }\n    } else {\n      data.styles.revert();\n    }\n  },\n  get: _get,\n  aliases: _propertyAliases,\n  getSetter: function getSetter(target, property, plugin) {\n    //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \"x\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\n    var p = _propertyAliases[property];\n    p && p.indexOf(\",\") < 0 && (property = p);\n    return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \"x\")) ? plugin && _recentSetterPlugin === plugin ? property === \"scale\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \"scale\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\"-\") ? _setterCSSProp : _getSetter(target, property);\n  },\n  core: {\n    _removeProperty: _removeProperty,\n    _getMatrix: _getMatrix\n  }\n};\ngsap.utils.checkPrefix = _checkPropPrefix;\ngsap.core.getStyleSaver = _getStyleSaver;\n\n(function (positionAndScale, rotation, others, aliases) {\n  var all = _forEachName(positionAndScale + \",\" + rotation + \",\" + others, function (name) {\n    _transformProps[name] = 1;\n  });\n\n  _forEachName(rotation, function (name) {\n    _config.units[name] = \"deg\";\n    _rotationalProperties[name] = 1;\n  });\n\n  _propertyAliases[all[13]] = positionAndScale + \",\" + rotation;\n\n  _forEachName(aliases, function (name) {\n    var split = name.split(\":\");\n    _propertyAliases[split[1]] = all[split[0]];\n  });\n})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\", \"rotation,rotationX,rotationY,skewX,skewY\", \"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\", \"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");\n\n_forEachName(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\", function (name) {\n  _config.units[name] = \"px\";\n});\n\ngsap.registerPlugin(CSSPlugin);\nexport { CSSPlugin as default, _getBBox, _createElement, _checkPropPrefix as checkPrefix };","import { gsap, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ, TweenLite, TimelineLite, TimelineMax } from \"./gsap-core.js\";\nimport { CSSPlugin } from \"./CSSPlugin.js\";\nvar gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,\n    // to protect from tree shaking\nTweenMaxWithCSS = gsapWithCSS.core.Tween;\nexport { gsapWithCSS as gsap, gsapWithCSS as default, CSSPlugin, TweenMaxWithCSS as TweenMax, TweenLite, TimelineMax, TimelineLite, Power0, Power1, Power2, Power3, Power4, Linear, Quad, Cubic, Quart, Quint, Strong, Elastic, Back, SteppedEase, Bounce, Sine, Expo, Circ };","import { gsap } from 'gsap';\r\n\r\nfunction fVideo() {\r\n    const scriptTag = document.createElement('script');\r\n    scriptTag.src = 'https://www.youtube.com/iframe_api';\r\n\r\n    const firstScriptTag = document.getElementsByTagName('script')[0];\r\n    firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag);\r\n\r\n    function offset(el) {\r\n        const rect = el.getBoundingClientRect();\r\n        const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\r\n        const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n        return { top: rect.top + scrollTop, left: rect.left + scrollLeft }\r\n    }\r\n\r\n    function createPlayer(youtubeId) {\r\n        const player = new YT.Player(youtubeId, {\r\n            videoId: youtubeId,\r\n            playerVars: {\r\n                rel: 0,\r\n                controls: 0,\r\n                modestbranding: 1,\r\n                autoplay: 1,\r\n                showinfo: 0,\r\n                start: 0\r\n            }\r\n        });\r\n    }\r\n\r\n    function animateModalIn(modal, backdrop, sourceDimensions, youtubeId) {\r\n        let videoWidth = (window.innerWidth * 80) / 100;\r\n        let videoHeight = (videoWidth * 9) / 16;\r\n\r\n        if (videoHeight > window.innerHeight) {\r\n            videoHeight = (window.innerHeight * 80) / 100;\r\n            videoWidth = (videoHeight * 16) / 9;\r\n        }\r\n\r\n        function fixModal() {\r\n            modal.style.position = 'fixed';\r\n            modal.style.top = `${(window.innerHeight - (videoHeight)) / 2}px`;\r\n        }\r\n\r\n        const timeline = gsap.timeline({});\r\n        timeline.timeScale(3);\r\n        timeline.defaultEase = 'power3.inOut';\r\n\r\n        timeline.set(modal, {\r\n            display: 'block',\r\n            top: sourceDimensions.y,\r\n            left: sourceDimensions.x,\r\n            width: sourceDimensions.width,\r\n            height: sourceDimensions.height,\r\n        }).to(modal, 1, {\r\n            autoAlpha: 1,\r\n            ease: 'power3.out'\r\n        }).to(modal, 1, {\r\n            top: `${((window.innerHeight - (videoHeight)) / 2) + window.pageYOffset}px`,\r\n            left: '0px',\r\n            right: '0px',\r\n            height: `${videoHeight}px`,\r\n            width: `${videoWidth}px`,\r\n            onComplete: fixModal\r\n        }, '-=0.5').to(backdrop, 1, {\r\n            autoAlpha: 1,\r\n            onComplete: createPlayer,\r\n            onCompleteParams: [youtubeId],\r\n        }, '-=1');\r\n    }\r\n\r\n    function animateModalOut(modal, backdrop, video) {\r\n        const iframe = modal.querySelector('iframe');\r\n\r\n        const timeline = gsap.timeline({});\r\n        timeline.timeScale(2);\r\n        timeline.defaultEase = 'power3.power3.inOut';\r\n\r\n        function destroyModal() {\r\n            modal.remove();\r\n            backdrop.remove();\r\n            if (video !== null) {\r\n                video.play();\r\n            }\r\n        }        \r\n\r\n        timeline.to(iframe, 0.8, {\r\n            autoAlpha: 0\r\n        }).to(backdrop, 1, {\r\n            autoAlpha: 0\r\n        }).to(modal, .7, {\r\n            scaleX: .8\r\n        }, '-=0.8').to(modal, .7, {\r\n            y: '150%',\r\n            onComplete: destroyModal\r\n        }, '-=0.4');\r\n    }\r\n\r\n    function createModal(button) {\r\n        // Get source and its dimensions and offset\r\n        const youtubeId = button.getAttribute('data-video-id');\r\n        const videoHeader = button.closest('.js-video-hero');\r\n        const backgroundVideo = button.closest('.js-background-video');\r\n        let currentVideo = null;\r\n\r\n        let source = null;\r\n\r\n        if (!videoHeader) {\r\n            source = button.closest('.js-video-source');\r\n        } else {\r\n            source = videoHeader;\r\n        }\r\n        \r\n        if (!source || !youtubeId) return;\r\n\r\n        if (backgroundVideo) {\r\n            backgroundVideo.forEach((video) => {\r\n                if (video.dataset.modalVideoId === youtubeId) {\r\n                    video.pause();\r\n                    currentVideo = video;\r\n                }\r\n            });\r\n        }\r\n\r\n        const sourceDimensions = {\r\n            width: source.offsetWidth,\r\n            height: source.offsetHeight,\r\n            x: offset(source).left,\r\n            y: offset(source).top\r\n        }\r\n\r\n        // Create a modal and backdrop\r\n        const modal = document.createElement('div');\r\n        const modalClose = document.createElement('button');\r\n        const videoFrame = document.createElement('div');\r\n        const backdrop = document.createElement('div');\r\n\r\n        // Add modal to body\r\n        modal.setAttribute('class', 'modal modal--video');\r\n        document.body.appendChild(modal);\r\n\r\n        // Add closer button to modal\r\n        modalClose.classList.add('modal__close');\r\n        modalClose.innerHTML = '<svg class=\"modal__close__icon\"><use xlink:href=\"#icon-close\"></use></svg>';\r\n        modal.appendChild(modalClose);\r\n\r\n        // Add video frame to modal\r\n        videoFrame.id = youtubeId;\r\n        modal.appendChild(videoFrame);\r\n\r\n        // Add backdrop to body\r\n        backdrop.classList.add('backdrop');\r\n        if (button.classList.contains('js-video-is-home')) {\r\n            backdrop.classList.add('is-home');\r\n        }\r\n        document.body.appendChild(backdrop);\r\n\r\n        // Animate them\r\n        animateModalIn(modal, backdrop, sourceDimensions, youtubeId);\r\n\r\n        // Add event listeners to backdrop & closer to close modal\r\n        window.addEventListener('click', function (event) {\r\n            if (event.target.closest('.backdrop') || event.target.closest('.modal__close')) {\r\n                animateModalOut(modal, backdrop, currentVideo);\r\n            }\r\n        });\r\n    }\r\n\r\n    window.addEventListener('click', function (event) {\r\n        if (event.target.closest('.js-video-open')) {\r\n            createModal(event.target.closest('.js-video-open'));\r\n        }\r\n    });\r\n}\r\n\r\nexport default fVideo;","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) return this;\n\n  // set events hash\n  let events = this._events = this._events || {};\n  // set listeners array\n  let listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( !listeners.includes( listener ) ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) return this;\n\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  let onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  let listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) return this;\n\n  let index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  let listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) return this;\n\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice( 0 );\n  args = args || [];\n  // once stuff\n  let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( let listener of listeners ) {\n    let isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n  return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n\n( function( window, factory ) {\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n} )( window, function factory() {\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  let num = parseFloat( value );\n  // not a percent like '100%', and a number\n  let isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\n// -------------------------- measurements -------------------------- //\n\nlet measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth',\n];\n\nlet measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  let size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0,\n  };\n  measurements.forEach( ( measurement ) => {\n    size[ measurement ] = 0;\n  } );\n  return size;\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) elem = document.querySelector( elem );\n\n  // do not proceed on non-objects\n  let isElement = elem && typeof elem == 'object' && elem.nodeType;\n  if ( !isElement ) return;\n\n  let style = getComputedStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) return getZeroSize();\n\n  let size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  measurements.forEach( ( measurement ) => {\n    let value = style[ measurement ];\n    let num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  } );\n\n  let paddingWidth = size.paddingLeft + size.paddingRight;\n  let paddingHeight = size.paddingTop + size.paddingBottom;\n  let marginWidth = size.marginLeft + size.marginRight;\n  let marginHeight = size.marginTop + size.marginBottom;\n  let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  let borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  // overwrite width and height if we can get it from style\n  let styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBox ? 0 : paddingWidth + borderWidth );\n  }\n\n  let styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBox ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n} );\n","/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( global );\n  } else {\n    // browser global\n    global.fizzyUIUtils = factory( global );\n  }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  // use object if already an array\n  if ( Array.isArray( obj ) ) return obj;\n\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) return [];\n\n  let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  // convert nodeList to array\n  if ( isArrayLike ) return [ ...obj ];\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  let index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( elem.matches( selector ) ) return elem;\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  let method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n\n  return elems\n    // check that elem is an actual element\n    .filter( ( elem ) => elem instanceof HTMLElement )\n    .reduce( ( ffElems, elem ) => {\n      // add elem if no selector\n      if ( !selector ) {\n        ffElems.push( elem );\n        return ffElems;\n      }\n      // filter & find items if we have a selector\n      // filter\n      if ( elem.matches( selector ) ) {\n        ffElems.push( elem );\n      }\n      // find children\n      let childElems = elem.querySelectorAll( selector );\n      // concat childElems to filterFound array\n      ffElems = ffElems.concat( ...childElems );\n      return ffElems;\n    }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  let method = _class.prototype[ methodName ];\n  let timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    clearTimeout( this[ timeoutName ] );\n\n    let args = arguments;\n    this[ timeoutName ] = setTimeout( () => {\n      method.apply( this, args );\n      delete this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n  let readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( onDocReady );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', onDocReady );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    let dashedNamespace = utils.toDashed( namespace );\n    let dataAttr = 'data-' + dashedNamespace;\n    let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n    let jQuery = global.jQuery;\n\n    [ ...dataAttrElems ].forEach( ( elem ) => {\n      let attr = elem.getAttribute( dataAttr );\n      let options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n        }\n        return;\n      }\n      // initialize\n      let instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    } );\n\n  } );\n};\n\n// -----  ----- //\n\nreturn utils;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( require('get-size') );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Cell = factory( window.getSize );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( getSize ) {\n\nconst cellClassName = 'flickity-cell';\n\nfunction Cell( elem ) {\n  this.element = elem;\n  this.element.classList.add( cellClassName );\n\n  this.x = 0;\n  this.unselect();\n}\n\nlet proto = Cell.prototype;\n\nproto.destroy = function() {\n  // reset style\n  this.unselect();\n  this.element.classList.remove( cellClassName );\n  this.element.style.transform = '';\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\nproto.select = function() {\n  this.element.classList.add('is-selected');\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n  this.element.classList.remove('is-selected');\n  this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\nproto.remove = function() {\n  this.element.remove();\n};\n\nreturn Cell;\n\n} ) );\n","// slide\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Slide = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory() {\n\nfunction Slide( beginMargin, endMargin, cellAlign ) {\n  this.beginMargin = beginMargin;\n  this.endMargin = endMargin;\n  this.cellAlign = cellAlign;\n  this.cells = [];\n  this.outerWidth = 0;\n  this.height = 0;\n}\n\nlet proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n  this.cells.push( cell );\n  this.outerWidth += cell.size.outerWidth;\n  this.height = Math.max( cell.size.outerHeight, this.height );\n  // first cell stuff\n  if ( this.cells.length === 1 ) {\n    this.x = cell.x; // x comes from first cell\n    this.firstMargin = cell.size[ this.beginMargin ];\n  }\n};\n\nproto.updateTarget = function() {\n  let lastCell = this.getLastCell();\n  let lastMargin = lastCell ? lastCell.size[ this.endMargin ] : 0;\n  let slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n  this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n  this.cells.forEach( ( cell ) => cell.select() );\n};\n\nproto.unselect = function() {\n  this.cells.forEach( ( cell ) => cell.unselect() );\n};\n\nproto.getCellElements = function() {\n  return this.cells.map( ( cell ) => cell.element );\n};\n\nreturn Slide;\n\n} ) );\n","// animate\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( require('fizzy-ui-utils') );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.animatePrototype = factory( window.fizzyUIUtils );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( utils ) {\n\n// -------------------------- animate -------------------------- //\n\nlet proto = {};\n\nproto.startAnimation = function() {\n  if ( this.isAnimating ) return;\n\n  this.isAnimating = true;\n  this.restingFrames = 0;\n  this.animate();\n};\n\nproto.animate = function() {\n  this.applyDragForce();\n  this.applySelectedAttraction();\n\n  let previousX = this.x;\n\n  this.integratePhysics();\n  this.positionSlider();\n  this.settle( previousX );\n  // animate next frame\n  if ( this.isAnimating ) requestAnimationFrame( () => this.animate() );\n};\n\nproto.positionSlider = function() {\n  let x = this.x;\n  // wrap position around\n  if ( this.isWrapping ) {\n    x = utils.modulo( x, this.slideableWidth ) - this.slideableWidth;\n    this.shiftWrapCells( x );\n  }\n\n  this.setTranslateX( x, this.isAnimating );\n  this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n  x += this.cursorPosition;\n  // reverse if right-to-left and using transform\n  if ( this.options.rightToLeft ) x = -x;\n  let translateX = this.getPositionValue( x );\n  // use 3D transforms for hardware acceleration on iOS\n  // but use 2D when settled, for better font-rendering\n  this.slider.style.transform = is3d ?\n    `translate3d(${translateX},0,0)` : `translateX(${translateX})`;\n};\n\nproto.dispatchScrollEvent = function() {\n  let firstSlide = this.slides[0];\n  if ( !firstSlide ) return;\n\n  let positionX = -this.x - firstSlide.target;\n  let progress = positionX / this.slidesWidth;\n  this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n  if ( !this.cells.length ) return;\n\n  this.x = -this.selectedSlide.target;\n  this.velocity = 0; // stop wobble\n  this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n  if ( this.options.percentPosition ) {\n    // percent position, round to 2 digits, like 12.34%\n    return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n  } else {\n    // pixel positioning\n    return Math.round( position ) + 'px';\n  }\n};\n\nproto.settle = function( previousX ) {\n  // keep track of frames where x hasn't moved\n  let isResting = !this.isPointerDown &&\n      Math.round( this.x * 100 ) === Math.round( previousX * 100 );\n  if ( isResting ) this.restingFrames++;\n  // stop animating if resting for 3 or more frames\n  if ( this.restingFrames > 2 ) {\n    this.isAnimating = false;\n    delete this.isFreeScrolling;\n    // render position with translateX when settled\n    this.positionSlider();\n    this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n  }\n};\n\nproto.shiftWrapCells = function( x ) {\n  // shift before cells\n  let beforeGap = this.cursorPosition + x;\n  this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n  // shift after cells\n  let afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n  this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n  cells.forEach( ( cell ) => {\n    let cellShift = gap > 0 ? shift : 0;\n    this._wrapShiftCell( cell, cellShift );\n    gap -= cell.size.outerWidth;\n  } );\n};\n\nproto._unshiftCells = function( cells ) {\n  if ( !cells || !cells.length ) return;\n\n  cells.forEach( ( cell ) => this._wrapShiftCell( cell, 0 ) );\n};\n\n// @param {Integer} shift - 0, 1, or -1\nproto._wrapShiftCell = function( cell, shift ) {\n  this._renderCellPosition( cell, cell.x + this.slideableWidth * shift );\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n  this.x += this.velocity;\n  this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n  this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n  return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n  // my thanks to Steven Wittens, who simplified this math greatly\n  return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n  if ( !this.isDraggable || !this.isPointerDown ) return;\n\n  // change the position to drag position by applying force\n  let dragVelocity = this.dragX - this.x;\n  let dragForce = dragVelocity - this.velocity;\n  this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n  // do not attract if pointer down or no slides\n  let dragDown = this.isDraggable && this.isPointerDown;\n  if ( dragDown || this.isFreeScrolling || !this.slides.length ) return;\n\n  let distance = this.selectedSlide.target * -1 - this.x;\n  let force = distance * this.options.selectedAttraction;\n  this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('ev-emitter'),\n        require('get-size'),\n        require('fizzy-ui-utils'),\n        require('./cell'),\n        require('./slide'),\n        require('./animate'),\n    );\n  } else {\n    // browser global\n    let _Flickity = window.Flickity;\n\n    window.Flickity = factory(\n        window,\n        window.EvEmitter,\n        window.getSize,\n        window.fizzyUIUtils,\n        _Flickity.Cell,\n        _Flickity.Slide,\n        _Flickity.animatePrototype,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this,\n    function factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n/* eslint-enable max-params */\n\n// vars\nconst { getComputedStyle, console } = window;\nlet { jQuery } = window;\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all Flickity intances\nlet instances = {};\n\nfunction Flickity( element, options ) {\n  let queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) console.error(`Bad element for Flickity: ${queryElement || element}`);\n    return;\n  }\n  this.element = queryElement;\n  // do not initialize twice on same element\n  if ( this.element.flickityGUID ) {\n    let instance = instances[ this.element.flickityGUID ];\n    if ( instance ) instance.option( options );\n    return instance;\n  }\n\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n  // options\n  this.options = { ...this.constructor.defaults };\n  this.option( options );\n\n  // kick things off\n  this._create();\n}\n\nFlickity.defaults = {\n  accessibility: true,\n  // adaptiveHeight: false,\n  cellAlign: 'center',\n  // cellSelector: undefined,\n  // contain: false,\n  freeScrollFriction: 0.075, // friction when free-scrolling\n  friction: 0.28, // friction when selecting\n  namespaceJQueryEvents: true,\n  // initialIndex: 0,\n  percentPosition: true,\n  resize: true,\n  selectedAttraction: 0.025,\n  setGallerySize: true,\n  // watchCSS: false,\n  // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.create = {};\n\nlet proto = Flickity.prototype;\n// inherit EventEmitter\nObject.assign( proto, EvEmitter.prototype );\n\nproto._create = function() {\n  let { resize, watchCSS, rightToLeft } = this.options;\n  // add id for Flickity.data\n  let id = this.guid = ++GUID;\n  this.element.flickityGUID = id; // expando\n  instances[ id ] = this; // associate via id\n  // initial properties\n  this.selectedIndex = 0;\n  // how many frames slider has been in same position\n  this.restingFrames = 0;\n  // initial physics properties\n  this.x = 0;\n  this.velocity = 0;\n  this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n  this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight';\n  // create viewport & slider\n  this.viewport = document.createElement('div');\n  this.viewport.className = 'flickity-viewport';\n  this._createSlider();\n  // used for keyboard navigation\n  this.focusableElems = [ this.element ];\n\n  if ( resize || watchCSS ) {\n    window.addEventListener( 'resize', this );\n  }\n\n  // add listeners from on option\n  for ( let eventName in this.options.on ) {\n    let listener = this.options.on[ eventName ];\n    this.on( eventName, listener );\n  }\n\n  for ( let method in Flickity.create ) {\n    Flickity.create[ method ].call( this );\n  }\n\n  if ( watchCSS ) {\n    this.watchCSS();\n  } else {\n    this.activate();\n  }\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n  Object.assign( this.options, opts );\n};\n\nproto.activate = function() {\n  if ( this.isActive ) return;\n\n  this.isActive = true;\n  this.element.classList.add('flickity-enabled');\n  if ( this.options.rightToLeft ) {\n    this.element.classList.add('flickity-rtl');\n  }\n\n  this.getSize();\n  // move initial cell elements so they can be loaded as cells\n  let cellElems = this._filterFindCellElements( this.element.children );\n  this.slider.append( ...cellElems );\n  this.viewport.append( this.slider );\n  this.element.append( this.viewport );\n  // get cells from children\n  this.reloadCells();\n\n  if ( this.options.accessibility ) {\n    // allow element to focusable\n    this.element.tabIndex = 0;\n    // listen for key presses\n    this.element.addEventListener( 'keydown', this );\n  }\n\n  this.emitEvent('activate');\n  this.selectInitialIndex();\n  // flag for initial activation, for using initialIndex\n  this.isInitActivated = true;\n  // ready event. #493\n  this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n  // slider element does all the positioning\n  let slider = document.createElement('div');\n  slider.className = 'flickity-slider';\n  this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n  // collection of item elements\n  this.cells = this._makeCells( this.slider.children );\n  this.positionCells();\n  this._updateWrapShiftCells();\n  this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n  let cellElems = this._filterFindCellElements( elems );\n\n  // create new Cells for collection\n  return cellElems.map( ( cellElem ) => new Cell( cellElem ) );\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n  return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n  // size all cells\n  this._sizeCells( this.cells );\n  // position all cells\n  this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n  index = index || 0;\n  // also measure maxCellHeight\n  // start 0 if positioning all cells\n  this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n  let cellX = 0;\n  // get cellX\n  if ( index > 0 ) {\n    let startCell = this.cells[ index - 1 ];\n    cellX = startCell.x + startCell.size.outerWidth;\n  }\n\n  this.cells.slice( index ).forEach( ( cell ) => {\n    cell.x = cellX;\n    this._renderCellPosition( cell, cellX );\n    cellX += cell.size.outerWidth;\n    this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n  } );\n  // keep track of cellX for wrap-around\n  this.slideableWidth = cellX;\n  // slides\n  this.updateSlides();\n  // contain slides target\n  this._containSlides();\n  // update slidesWidth\n  this.slidesWidth = this.cells.length ?\n    this.getLastSlide().target - this.slides[0].target : 0;\n};\n\nproto._renderCellPosition = function( cell, x ) {\n  // render position of cell with in slider\n  let sideOffset = this.options.rightToLeft ? -1 : 1;\n  let renderX = x * sideOffset;\n  if ( this.options.percentPosition ) renderX *= this.size.innerWidth / cell.size.width;\n  let positionValue = this.getPositionValue( renderX );\n  cell.element.style.transform = `translateX( ${positionValue} )`;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n  cells.forEach( ( cell ) => cell.getSize() );\n};\n\n// --------------------------  -------------------------- //\n\nproto.updateSlides = function() {\n  this.slides = [];\n  if ( !this.cells.length ) return;\n\n  let { beginMargin, endMargin } = this;\n  let slide = new Slide( beginMargin, endMargin, this.cellAlign );\n  this.slides.push( slide );\n\n  let canCellFit = this._getCanCellFit();\n\n  this.cells.forEach( ( cell, i ) => {\n    // just add cell if first cell in slide\n    if ( !slide.cells.length ) {\n      slide.addCell( cell );\n      return;\n    }\n\n    let slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n      ( cell.size.outerWidth - cell.size[ endMargin ] );\n\n    if ( canCellFit( i, slideWidth ) ) {\n      slide.addCell( cell );\n    } else {\n      // doesn't fit, new slide\n      slide.updateTarget();\n\n      slide = new Slide( beginMargin, endMargin, this.cellAlign );\n      this.slides.push( slide );\n      slide.addCell( cell );\n    }\n  } );\n  // last slide\n  slide.updateTarget();\n  // update .selectedSlide\n  this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n  let { groupCells } = this.options;\n  if ( !groupCells ) return () => false;\n\n  if ( typeof groupCells == 'number' ) {\n    // group by number. 3 -> [0,1,2], [3,4,5], ...\n    let number = parseInt( groupCells, 10 );\n    return ( i ) => ( i % number ) !== 0;\n  }\n  // default, group by width of slide\n  let percent = 1;\n  // parse '75%\n  let percentMatch = typeof groupCells == 'string' && groupCells.match( /^(\\d+)%$/ );\n  if ( percentMatch ) percent = parseInt( percentMatch[1], 10 ) / 100;\n  let groupWidth = ( this.size.innerWidth + 1 ) * percent;\n  return ( i, slideWidth ) => slideWidth <= groupWidth;\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n  this.positionCells();\n  this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n  this.setCellAlign();\n  this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nlet cellAlignShorthands = {\n  left: 0,\n  center: 0.5,\n  right: 1,\n};\n\nproto.setCellAlign = function() {\n  let { cellAlign, rightToLeft } = this.options;\n  let shorthand = cellAlignShorthands[ cellAlign ];\n  this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n  if ( rightToLeft ) this.cellAlign = 1 - this.cellAlign;\n};\n\nproto.setGallerySize = function() {\n  if ( !this.options.setGallerySize ) return;\n\n  let height = this.options.adaptiveHeight && this.selectedSlide ?\n    this.selectedSlide.height : this.maxCellHeight;\n  this.viewport.style.height = `${height}px`;\n};\n\nproto._updateWrapShiftCells = function() {\n  // update isWrapping\n  this.isWrapping = this.getIsWrapping();\n  // only for wrap-around\n  if ( !this.isWrapping ) return;\n\n  // unshift previous cells\n  this._unshiftCells( this.beforeShiftCells );\n  this._unshiftCells( this.afterShiftCells );\n  // get before cells\n  // initial gap\n  let beforeGapX = this.cursorPosition;\n  let lastIndex = this.cells.length - 1;\n  this.beforeShiftCells = this._getGapCells( beforeGapX, lastIndex, -1 );\n  // get after cells\n  // ending gap between last cell and end of gallery viewport\n  let afterGapX = this.size.innerWidth - this.cursorPosition;\n  // start cloning at first cell, working forwards\n  this.afterShiftCells = this._getGapCells( afterGapX, 0, 1 );\n};\n\nproto.getIsWrapping = function() {\n  let { wrapAround } = this.options;\n  if ( !wrapAround || this.slides.length < 2 ) return false;\n\n  if ( wrapAround !== 'fill' ) return true;\n  // check that slides can fit\n\n  let gapWidth = this.slideableWidth - this.size.innerWidth;\n  if ( gapWidth > this.size.innerWidth ) return true; // gap * 2x big, all good\n  // check that content width - shifting cell is bigger than viewport width\n  for ( let cell of this.cells ) {\n    if ( cell.size.outerWidth > gapWidth ) return false;\n  }\n  return true;\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n  // keep adding cells until the cover the initial gap\n  let cells = [];\n  while ( gapX > 0 ) {\n    let cell = this.cells[ cellIndex ];\n    if ( !cell ) break;\n\n    cells.push( cell );\n    cellIndex += increment;\n    gapX -= cell.size.outerWidth;\n  }\n  return cells;\n};\n\n// ----- contain & wrap ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n  let isContaining = this.options.contain && !this.isWrapping &&\n      this.cells.length;\n  if ( !isContaining ) return;\n\n  let contentWidth = this.slideableWidth - this.getLastCell().size[ this.endMargin ];\n  // content is less than gallery size\n  let isContentSmaller = contentWidth < this.size.innerWidth;\n  if ( isContentSmaller ) {\n    // all cells fit inside gallery\n    this.slides.forEach( ( slide ) => {\n      slide.target = contentWidth * this.cellAlign;\n    } );\n  } else {\n    // contain to bounds\n    let beginBound = this.cursorPosition + this.cells[0].size[ this.beginMargin ];\n    let endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n    this.slides.forEach( ( slide ) => {\n      slide.target = Math.max( slide.target, beginBound );\n      slide.target = Math.min( slide.target, endBound );\n    } );\n  }\n};\n\n// ----- events ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  let emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery && this.$element ) {\n    // default trigger with type if no event\n    type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n    let $event = type;\n    if ( event ) {\n      // create jQuery event\n      let jQEvent = new jQuery.Event( event );\n      jQEvent.type = type;\n      $event = jQEvent;\n    }\n    this.$element.trigger( $event, args );\n  }\n};\n\nconst unidraggerEvents = [\n  'dragStart',\n  'dragMove',\n  'dragEnd',\n  'pointerDown',\n  'pointerMove',\n  'pointerEnd',\n  'staticClick',\n];\n\nlet _emitEvent = proto.emitEvent;\nproto.emitEvent = function( eventName, args ) {\n  if ( eventName === 'staticClick' ) {\n    // add cellElem and cellIndex args to staticClick\n    let clickedCell = this.getParentCell( args[0].target );\n    let cellElem = clickedCell && clickedCell.element;\n    let cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n    args = args.concat( cellElem, cellIndex );\n  }\n  // do regular thing\n  _emitEvent.call( this, eventName, args );\n  // duck-punch in jQuery events for Unidragger events\n  let isUnidraggerEvent = unidraggerEvents.includes( eventName );\n  if ( !isUnidraggerEvent || !jQuery || !this.$element ) return;\n\n  eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n  let event = args.shift( 0 );\n  let jQEvent = new jQuery.Event( event );\n  jQEvent.type = eventName;\n  this.$element.trigger( jQEvent, args );\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n  if ( !this.isActive ) return;\n\n  index = parseInt( index, 10 );\n  this._wrapSelect( index );\n\n  if ( this.isWrapping || isWrap ) {\n    index = utils.modulo( index, this.slides.length );\n  }\n  // bail if invalid index\n  if ( !this.slides[ index ] ) return;\n\n  let prevIndex = this.selectedIndex;\n  this.selectedIndex = index;\n  this.updateSelectedSlide();\n  if ( isInstant ) {\n    this.positionSliderAtSelected();\n  } else {\n    this.startAnimation();\n  }\n  if ( this.options.adaptiveHeight ) {\n    this.setGallerySize();\n  }\n  // events\n  this.dispatchEvent( 'select', null, [ index ] );\n  // change event if new index\n  if ( index !== prevIndex ) {\n    this.dispatchEvent( 'change', null, [ index ] );\n  }\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n  if ( !this.isWrapping ) return;\n\n  const { selectedIndex, slideableWidth, slides: { length } } = this;\n  // shift index for wrap, do not wrap dragSelect\n  if ( !this.isDragSelect ) {\n    let wrapIndex = utils.modulo( index, length );\n    // go to shortest\n    let delta = Math.abs( wrapIndex - selectedIndex );\n    let backWrapDelta = Math.abs( ( wrapIndex + length ) - selectedIndex );\n    let forewardWrapDelta = Math.abs( ( wrapIndex - length ) - selectedIndex );\n    if ( backWrapDelta < delta ) {\n      index += length;\n    } else if ( forewardWrapDelta < delta ) {\n      index -= length;\n    }\n  }\n\n  // wrap position so slider is within normal area\n  if ( index < 0 ) {\n    this.x -= slideableWidth;\n  } else if ( index >= length ) {\n    this.x += slideableWidth;\n  }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n  let slide = this.slides[ this.selectedIndex ];\n  // selectedIndex could be outside of slides, if triggered before resize()\n  if ( !slide ) return;\n\n  // unselect previous selected slide\n  this.unselectSelectedSlide();\n  // update new selected slide\n  this.selectedSlide = slide;\n  slide.select();\n  this.selectedCells = slide.cells;\n  this.selectedElements = slide.getCellElements();\n  // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n  this.selectedCell = slide.cells[0];\n  this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n  if ( this.selectedSlide ) this.selectedSlide.unselect();\n};\n\nproto.selectInitialIndex = function() {\n  let initialIndex = this.options.initialIndex;\n  // already activated, select previous selectedIndex\n  if ( this.isInitActivated ) {\n    this.select( this.selectedIndex, false, true );\n    return;\n  }\n  // select with selector string\n  if ( initialIndex && typeof initialIndex == 'string' ) {\n    let cell = this.queryCell( initialIndex );\n    if ( cell ) {\n      this.selectCell( initialIndex, false, true );\n      return;\n    }\n  }\n\n  let index = 0;\n  // select with number\n  if ( initialIndex && this.slides[ initialIndex ] ) {\n    index = initialIndex;\n  }\n  // select instantly\n  this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n  // get cell\n  let cell = this.queryCell( value );\n  if ( !cell ) return;\n\n  let index = this.getCellSlideIndex( cell );\n  this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n  // get index of slide that has cell\n  let cellSlide = this.slides.find( ( slide ) => slide.cells.includes( cell ) );\n  return this.slides.indexOf( cellSlide );\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n  // loop through cells to get the one that matches\n  for ( let cell of this.cells ) {\n    if ( cell.element === elem ) return cell;\n  }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n  elems = utils.makeArray( elems );\n  return elems.map( ( elem ) => this.getCell( elem ) ).filter( Boolean );\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n  return this.cells.map( ( cell ) => cell.element );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n  // first check if elem is cell\n  let cell = this.getCell( elem );\n  if ( cell ) return cell;\n\n  // try to get parent cell elem\n  let closest = elem.closest('.flickity-slider > *');\n  return this.getCell( closest );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n  if ( !adjCount ) return this.selectedSlide.getCellElements();\n\n  index = index === undefined ? this.selectedIndex : index;\n\n  let len = this.slides.length;\n  if ( 1 + ( adjCount * 2 ) >= len ) {\n    return this.getCellElements(); // get all\n  }\n\n  let cellElems = [];\n  for ( let i = index - adjCount; i <= index + adjCount; i++ ) {\n    let slideIndex = this.isWrapping ? utils.modulo( i, len ) : i;\n    let slide = this.slides[ slideIndex ];\n    if ( slide ) {\n      cellElems = cellElems.concat( slide.getCellElements() );\n    }\n  }\n  return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n  if ( typeof selector == 'number' ) {\n    // use number as index\n    return this.cells[ selector ];\n  }\n  // do not select invalid selectors from hash: #123, #/. #791\n  let isSelectorString = typeof selector == 'string' && !selector.match( /^[#.]?[\\d/]/ );\n  if ( isSelectorString ) {\n    // use string as selector, get element\n    selector = this.element.querySelector( selector );\n  }\n  // get cell from element\n  return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n  this.emitEvent('uiChange');\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n  this.watchCSS();\n  this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n  // #1177 disable resize behavior when animating or dragging for iOS 15\n  if ( !this.isActive || this.isAnimating || this.isDragging ) return;\n  this.getSize();\n  // wrap values\n  if ( this.isWrapping ) {\n    this.x = utils.modulo( this.x, this.slideableWidth );\n  }\n  this.positionCells();\n  this._updateWrapShiftCells();\n  this.setGallerySize();\n  this.emitEvent('resize');\n  // update selected index for group slides, instant\n  // TODO: position can be lost between groups of various numbers\n  let selectedElement = this.selectedElements && this.selectedElements[0];\n  this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n  if ( !this.options.watchCSS ) return;\n\n  let afterContent = getComputedStyle( this.element, ':after' ).content;\n  // activate if :after { content: 'flickity' }\n  if ( afterContent.includes('flickity') ) {\n    this.activate();\n  } else {\n    this.deactivate();\n  }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n  let { activeElement } = document;\n  let handler = Flickity.keyboardHandlers[ event.key ];\n  // only work if element is in focus\n  if ( !this.options.accessibility || !activeElement || !handler ) return;\n\n  let isFocused = this.focusableElems.some( ( elem ) => activeElement === elem );\n  if ( isFocused ) handler.call( this );\n};\n\nFlickity.keyboardHandlers = {\n  ArrowLeft: function() {\n    this.uiChange();\n    let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n    this[ leftMethod ]();\n  },\n  ArrowRight: function() {\n    this.uiChange();\n    let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n    this[ rightMethod ]();\n  },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n  this.element.focus({ preventScroll: true });\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n  if ( !this.isActive ) return;\n\n  this.element.classList.remove('flickity-enabled');\n  this.element.classList.remove('flickity-rtl');\n  this.unselectSelectedSlide();\n  // destroy cells\n  this.cells.forEach( ( cell ) => cell.destroy() );\n  this.viewport.remove();\n  // move child elements back into element\n  this.element.append( ...this.slider.children );\n  if ( this.options.accessibility ) {\n    this.element.removeAttribute('tabIndex');\n    this.element.removeEventListener( 'keydown', this );\n  }\n  // set flags\n  this.isActive = false;\n  this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n  this.deactivate();\n  window.removeEventListener( 'resize', this );\n  this.allOff();\n  this.emitEvent('destroy');\n  if ( jQuery && this.$element ) {\n    jQuery.removeData( this.element, 'flickity' );\n  }\n  delete this.element.flickityGUID;\n  delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nObject.assign( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  if ( elem ) return instances[ elem.flickityGUID ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n  jQueryBridget( 'flickity', Flickity, jQuery );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n  jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('ev-emitter'),\n    );\n  } else {\n    // browser global\n    window.Unidragger = factory(\n        window,\n        window.EvEmitter,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( window, EvEmitter ) {\n\nfunction Unidragger() {}\n\n// inherit EvEmitter\nlet proto = Unidragger.prototype = Object.create( EvEmitter.prototype );\n\n// ----- bind start ----- //\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n  let method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nlet startEvent, activeEvents;\nif ( 'ontouchstart' in window ) {\n  // HACK prefer Touch Events as you can preventDefault on touchstart to\n  // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n  startEvent = 'touchstart';\n  activeEvents = [ 'touchmove', 'touchend', 'touchcancel' ];\n} else if ( window.PointerEvent ) {\n  // Pointer Events\n  startEvent = 'pointerdown';\n  activeEvents = [ 'pointermove', 'pointerup', 'pointercancel' ];\n} else {\n  // mouse events\n  startEvent = 'mousedown';\n  activeEvents = [ 'mousemove', 'mouseup' ];\n}\n\n// prototype so it can be overwriteable by Flickity\nproto.touchActionValue = 'none';\n\nproto.bindHandles = function() {\n  this._bindHandles( 'addEventListener', this.touchActionValue );\n};\n\nproto.unbindHandles = function() {\n  this._bindHandles( 'removeEventListener', '' );\n};\n\n/**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\nproto._bindHandles = function( bindMethod, touchAction ) {\n  this.handles.forEach( ( handle ) => {\n    handle[ bindMethod ]( startEvent, this );\n    handle[ bindMethod ]( 'click', this );\n    // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n    if ( window.PointerEvent ) handle.style.touchAction = touchAction;\n  } );\n};\n\nproto.bindActivePointerEvents = function() {\n  activeEvents.forEach( ( eventName ) => {\n    window.addEventListener( eventName, this );\n  } );\n};\n\nproto.unbindActivePointerEvents = function() {\n  activeEvents.forEach( ( eventName ) => {\n    window.removeEventListener( eventName, this );\n  } );\n};\n\n// ----- event handler helpers ----- //\n\n// trigger method with matching pointer\nproto.withPointer = function( methodName, event ) {\n  if ( event.pointerId === this.pointerIdentifier ) {\n    this[ methodName ]( event, event );\n  }\n};\n\n// trigger method with matching touch\nproto.withTouch = function( methodName, event ) {\n  let touch;\n  for ( let changedTouch of event.changedTouches ) {\n    if ( changedTouch.identifier === this.pointerIdentifier ) {\n      touch = changedTouch;\n    }\n  }\n  if ( touch ) this[ methodName ]( event, touch );\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n  this.pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n  this.pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n  this.pointerDown( event, event );\n};\n\n// nodes that have text fields\nconst cursorNodes = [ 'TEXTAREA', 'INPUT', 'SELECT', 'OPTION' ];\n// input types that do not have text fields\nconst clickTypes = [ 'radio', 'checkbox', 'button', 'submit', 'image', 'file' ];\n\n/**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n  // dismiss multi-touch taps, right clicks, and clicks on text fields\n  let isCursorNode = cursorNodes.includes( event.target.nodeName );\n  let isClickType = clickTypes.includes( event.target.type );\n  let isOkayElement = !isCursorNode || isClickType;\n  let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n  if ( !isOkay ) return;\n\n  this.isPointerDown = true;\n  // save pointer identifier to match up touch events\n  this.pointerIdentifier = pointer.pointerId !== undefined ?\n    // pointerId for pointer events, touch.indentifier for touch events\n    pointer.pointerId : pointer.identifier;\n  // track position for move\n  this.pointerDownPointer = {\n    pageX: pointer.pageX,\n    pageY: pointer.pageY,\n  };\n\n  this.bindActivePointerEvents();\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// ----- move ----- //\n\nproto.onmousemove = function( event ) {\n  this.pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n  this.withPointer( 'pointerMove', event );\n};\n\nproto.ontouchmove = function( event ) {\n  this.withTouch( 'pointerMove', event );\n};\n\nproto.pointerMove = function( event, pointer ) {\n  let moveVector = {\n    x: pointer.pageX - this.pointerDownPointer.pageX,\n    y: pointer.pageY - this.pointerDownPointer.pageY,\n  };\n  this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n  // start drag if pointer has moved far enough to start drag\n  let isDragStarting = !this.isDragging && this.hasDragStarted( moveVector );\n  if ( isDragStarting ) this.dragStart( event, pointer );\n  if ( this.isDragging ) this.dragMove( event, pointer, moveVector );\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- drag ----- //\n\nproto.dragStart = function( event, pointer ) {\n  this.isDragging = true;\n  this.isPreventingClicks = true; // set flag to prevent clicks\n  this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// ----- end ----- //\n\nproto.onmouseup = function( event ) {\n  this.pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n  this.withPointer( 'pointerUp', event );\n};\n\nproto.ontouchend = function( event ) {\n  this.withTouch( 'pointerUp', event );\n};\n\nproto.pointerUp = function( event, pointer ) {\n  this.pointerDone();\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n\n  if ( this.isDragging ) {\n    this.dragEnd( event, pointer );\n  } else {\n    // pointer didn't move enough for drag to start\n    this.staticClick( event, pointer );\n  }\n};\n\nproto.dragEnd = function( event, pointer ) {\n  this.isDragging = false; // reset flag\n  // re-enable clicking async\n  setTimeout( () => delete this.isPreventingClicks );\n\n  this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// triggered on pointer up & pointer cancel\nproto.pointerDone = function() {\n  this.isPointerDown = false;\n  delete this.pointerIdentifier;\n  this.unbindActivePointerEvents();\n  this.emitEvent('pointerDone');\n};\n\n// ----- cancel ----- //\n\nproto.onpointercancel = function( event ) {\n  this.withPointer( 'pointerCancel', event );\n};\n\nproto.ontouchcancel = function( event ) {\n  this.withTouch( 'pointerCancel', event );\n};\n\nproto.pointerCancel = function( event, pointer ) {\n  this.pointerDone();\n  this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- click ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n  if ( this.isPreventingClicks ) event.preventDefault();\n};\n\n// triggered after pointer down & up with no/tiny movement\nproto.staticClick = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  let isMouseup = event.type === 'mouseup';\n  if ( isMouseup && this.isIgnoringMouseUp ) return;\n\n  this.emitEvent( 'staticClick', [ event, pointer ] );\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( isMouseup ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 400ms\n    setTimeout( () => {\n      delete this.isIgnoringMouseUp;\n    }, 400 );\n  }\n};\n\n// -----  ----- //\n\nreturn Unidragger;\n\n} ) );\n","// drag\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./core'),\n        require('unidragger'),\n        require('fizzy-ui-utils'),\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n        window,\n        window.Flickity,\n        window.Unidragger,\n        window.fizzyUIUtils,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this,\n    function factory( window, Flickity, Unidragger, utils ) {\n\n// ----- defaults ----- //\n\nObject.assign( Flickity.defaults, {\n  draggable: '>1',\n  dragThreshold: 3,\n} );\n\n// -------------------------- drag prototype -------------------------- //\n\nlet proto = Flickity.prototype;\nObject.assign( proto, Unidragger.prototype ); // inherit Unidragger\nproto.touchActionValue = '';\n\n// --------------------------  -------------------------- //\n\nFlickity.create.drag = function() {\n  this.on( 'activate', this.onActivateDrag );\n  this.on( 'uiChange', this._uiChangeDrag );\n  this.on( 'deactivate', this.onDeactivateDrag );\n  this.on( 'cellChange', this.updateDraggable );\n  this.on( 'pointerDown', this.handlePointerDown );\n  this.on( 'pointerUp', this.handlePointerUp );\n  this.on( 'pointerDown', this.handlePointerDone );\n  this.on( 'dragStart', this.handleDragStart );\n  this.on( 'dragMove', this.handleDragMove );\n  this.on( 'dragEnd', this.handleDragEnd );\n  this.on( 'staticClick', this.handleStaticClick );\n  // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n  this.handles = [ this.viewport ];\n  this.bindHandles();\n  this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n  this.unbindHandles();\n  this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n  // disable dragging if less than 2 slides. #278\n  if ( this.options.draggable === '>1' ) {\n    this.isDraggable = this.slides.length > 1;\n  } else {\n    this.isDraggable = this.options.draggable;\n  }\n  this.element.classList.toggle( 'is-draggable', this.isDraggable );\n};\n\nproto._uiChangeDrag = function() {\n  delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.handlePointerDown = function( event ) {\n  if ( !this.isDraggable ) {\n    // proceed for staticClick\n    this.bindActivePointerEvents( event );\n    return;\n  }\n\n  let isTouchStart = event.type === 'touchstart';\n  let isTouchPointer = event.pointerType === 'touch';\n  let isFocusNode = event.target.matches('input, textarea, select');\n  if ( !isTouchStart && !isTouchPointer && !isFocusNode ) event.preventDefault();\n  if ( !isFocusNode ) this.focus();\n  // blur\n  if ( document.activeElement !== this.element ) document.activeElement.blur();\n  // stop if it was moving\n  this.dragX = this.x;\n  this.viewport.classList.add('is-pointer-down');\n  // track scrolling\n  this.pointerDownScroll = getScrollPosition();\n  window.addEventListener( 'scroll', this );\n  this.bindActivePointerEvents( event );\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.handlePointerUp = function() {\n  delete this.isTouchScrolling;\n  this.viewport.classList.remove('is-pointer-down');\n};\n\nproto.handlePointerDone = function() {\n  window.removeEventListener( 'scroll', this );\n  delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.handleDragStart = function() {\n  if ( !this.isDraggable ) return;\n\n  this.dragStartPosition = this.x;\n  this.startAnimation();\n  window.removeEventListener( 'scroll', this );\n};\n\nproto.handleDragMove = function( event, pointer, moveVector ) {\n  if ( !this.isDraggable ) return;\n\n  event.preventDefault();\n\n  this.previousDragX = this.dragX;\n  // reverse if right-to-left\n  let direction = this.options.rightToLeft ? -1 : 1;\n  // wrap around move. #589\n  if ( this.isWrapping ) moveVector.x %= this.slideableWidth;\n  let dragX = this.dragStartPosition + moveVector.x * direction;\n\n  if ( !this.isWrapping ) {\n    // slow drag\n    let originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n    dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n    let endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n    dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n  }\n\n  this.dragX = dragX;\n  this.dragMoveTime = new Date();\n};\n\nproto.handleDragEnd = function() {\n  if ( !this.isDraggable ) return;\n\n  let { freeScroll } = this.options;\n  if ( freeScroll ) this.isFreeScrolling = true;\n  // set selectedIndex based on where flick will end up\n  let index = this.dragEndRestingSelect();\n\n  if ( freeScroll && !this.isWrapping ) {\n    // if free-scroll & not wrap around\n    // do not free-scroll if going outside of bounding slides\n    // so bounding slides can attract slider, and keep it in bounds\n    let restingX = this.getRestingPosition();\n    this.isFreeScrolling = -restingX > this.slides[0].target &&\n      -restingX < this.getLastSlide().target;\n  } else if ( !freeScroll && index === this.selectedIndex ) {\n    // boost selection if selected index has not changed\n    index += this.dragEndBoostSelect();\n  }\n  delete this.previousDragX;\n  // apply selection\n  // HACK, set flag so dragging stays in correct direction\n  this.isDragSelect = this.isWrapping;\n  this.select( index );\n  delete this.isDragSelect;\n};\n\nproto.dragEndRestingSelect = function() {\n  let restingX = this.getRestingPosition();\n  // how far away from selected slide\n  let distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n  // get closet resting going up and going down\n  let positiveResting = this._getClosestResting( restingX, distance, 1 );\n  let negativeResting = this._getClosestResting( restingX, distance, -1 );\n  // use closer resting for wrap-around\n  return positiveResting.distance < negativeResting.distance ?\n    positiveResting.index : negativeResting.index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n  let index = this.selectedIndex;\n  let minDistance = Infinity;\n  let condition = this.options.contain && !this.isWrapping ?\n    // if containing, keep going if distance is equal to minDistance\n    ( dist, minDist ) => dist <= minDist :\n    ( dist, minDist ) => dist < minDist;\n\n  while ( condition( distance, minDistance ) ) {\n    // measure distance to next cell\n    index += increment;\n    minDistance = distance;\n    distance = this.getSlideDistance( -restingX, index );\n    if ( distance === null ) break;\n\n    distance = Math.abs( distance );\n  }\n  return {\n    distance: minDistance,\n    // selected was previous index\n    index: index - increment,\n  };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n  let len = this.slides.length;\n  // wrap around if at least 2 slides\n  let isWrapAround = this.options.wrapAround && len > 1;\n  let slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n  let slide = this.slides[ slideIndex ];\n  if ( !slide ) return null;\n\n  // add distance for wrap-around slides\n  let wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n  return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n  // do not boost if no previousDragX or dragMoveTime\n  if ( this.previousDragX === undefined || !this.dragMoveTime ||\n    // or if drag was held for 100 ms\n    new Date() - this.dragMoveTime > 100 ) {\n    return 0;\n  }\n\n  let distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n  let delta = this.previousDragX - this.dragX;\n  if ( distance > 0 && delta > 0 ) {\n    // boost to next if moving towards the right, and positive velocity\n    return 1;\n  } else if ( distance < 0 && delta < 0 ) {\n    // boost to previous if moving towards the left, and negative velocity\n    return -1;\n  }\n  return 0;\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n  let scroll = getScrollPosition();\n  let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n  let scrollMoveY = this.pointerDownScroll.y - scroll.y;\n  // cancel click/tap if scroll is too much\n  if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n    this.pointerDone();\n  }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset,\n  };\n}\n\n// -----  ----- //\n\nreturn Flickity;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( require('./core') );\n  } else {\n    // browser global\n    factory( window.Flickity );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\nconst svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( increment, direction, arrowShape ) {\n  this.increment = increment;\n  this.direction = direction;\n  this.isPrevious = increment === 'previous';\n  this.isLeft = direction === 'left';\n  this._create( arrowShape );\n}\n\nPrevNextButton.prototype._create = function( arrowShape ) {\n  // properties\n  let element = this.element = document.createElement('button');\n  element.className = `flickity-button flickity-prev-next-button ${this.increment}`;\n  let label = this.isPrevious ? 'Previous' : 'Next';\n  // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n  element.setAttribute( 'type', 'button' );\n  element.setAttribute( 'aria-label', label );\n  // init as disabled\n  this.disable();\n  // create arrow\n  let svg = this.createSVG( label, arrowShape );\n  element.append( svg );\n};\n\nPrevNextButton.prototype.createSVG = function( label, arrowShape ) {\n  let svg = document.createElementNS( svgURI, 'svg' );\n  svg.setAttribute( 'class', 'flickity-button-icon' );\n  svg.setAttribute( 'viewBox', '0 0 100 100' );\n  // add title #1189\n  let title = document.createElementNS( svgURI, 'title' );\n  title.append( label );\n  // add path\n  let path = document.createElementNS( svgURI, 'path' );\n  let pathMovements = getArrowMovements( arrowShape );\n  path.setAttribute( 'd', pathMovements );\n  path.setAttribute( 'class', 'arrow' );\n  // rotate arrow\n  if ( !this.isLeft ) {\n    path.setAttribute( 'transform', 'translate(100, 100) rotate(180)' );\n  }\n  svg.append( title, path );\n  return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n  // use shape as movement if string\n  if ( typeof shape == 'string' ) return shape;\n\n  let { x0, x1, x2, x3, y1, y2 } = shape;\n\n  // create movement string\n  return `M ${x0}, 50\n    L ${x1}, ${y1 + 50}\n    L ${x2}, ${y2 + 50}\n    L ${x3}, 50\n    L ${x2}, ${50 - y2}\n    L ${x1}, ${50 - y1}\n    Z`;\n}\n\n// -----  ----- //\n\nPrevNextButton.prototype.enable = function() {\n  this.element.removeAttribute('disabled');\n};\n\nPrevNextButton.prototype.disable = function() {\n  this.element.setAttribute( 'disabled', true );\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nObject.assign( Flickity.defaults, {\n  prevNextButtons: true,\n  arrowShape: {\n    x0: 10,\n    x1: 60, y1: 50,\n    x2: 70, y2: 40,\n    x3: 30,\n  },\n} );\n\nFlickity.create.prevNextButtons = function() {\n  if ( !this.options.prevNextButtons ) return;\n\n  let { rightToLeft, arrowShape } = this.options;\n  let prevDirection = rightToLeft ? 'right' : 'left';\n  let nextDirection = rightToLeft ? 'left' : 'right';\n  this.prevButton = new PrevNextButton( 'previous', prevDirection, arrowShape );\n  this.nextButton = new PrevNextButton( 'next', nextDirection, arrowShape );\n  this.focusableElems.push( this.prevButton.element );\n  this.focusableElems.push( this.nextButton.element );\n\n  this.handlePrevButtonClick = () => {\n    this.uiChange();\n    this.previous();\n  };\n\n  this.handleNextButtonClick = () => {\n    this.uiChange();\n    this.next();\n  };\n\n  this.on( 'activate', this.activatePrevNextButtons );\n  this.on( 'select', this.updatePrevNextButtons );\n};\n\nlet proto = Flickity.prototype;\n\nproto.updatePrevNextButtons = function() {\n  let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n  this.updatePrevNextButton( this.prevButton, 0 );\n  this.updatePrevNextButton( this.nextButton, lastIndex );\n};\n\nproto.updatePrevNextButton = function( button, disabledIndex ) {\n  // enable is wrapAround and at least 2 slides\n  if ( this.isWrapping && this.slides.length > 1 ) {\n    button.enable();\n    return;\n  }\n\n  let isEnabled = this.selectedIndex !== disabledIndex;\n  button[ isEnabled ? 'enable' : 'disable' ]();\n  // if disabling button that is focused,\n  // shift focus to element to maintain keyboard accessibility\n  let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n  if ( isDisabledFocused ) this.focus();\n};\n\nproto.activatePrevNextButtons = function() {\n  this.prevButton.element.addEventListener( 'click', this.handlePrevButtonClick );\n  this.nextButton.element.addEventListener( 'click', this.handleNextButtonClick );\n  this.element.append( this.prevButton.element, this.nextButton.element );\n  this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n  this.prevButton.element.remove();\n  this.nextButton.element.remove();\n  this.prevButton.element.removeEventListener( 'click', this.handlePrevButtonClick );\n  this.nextButton.element.removeEventListener( 'click', this.handleNextButtonClick );\n  this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// --------------------------  -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('./core'),\n        require('fizzy-ui-utils'),\n    );\n  } else {\n    // browser global\n    factory(\n        window.Flickity,\n        window.fizzyUIUtils,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\nfunction PageDots() {\n  // create holder element\n  this.holder = document.createElement('div');\n  this.holder.className = 'flickity-page-dots';\n  // create dots, array of elements\n  this.dots = [];\n}\n\nPageDots.prototype.setDots = function( slidesLength ) {\n  // get difference between number of slides and number of dots\n  let delta = slidesLength - this.dots.length;\n  if ( delta > 0 ) {\n    this.addDots( delta );\n  } else if ( delta < 0 ) {\n    this.removeDots( -delta );\n  }\n};\n\nPageDots.prototype.addDots = function( count ) {\n  let newDots = new Array( count ).fill()\n    .map( ( item, i ) => {\n      let dot = document.createElement('button');\n      dot.setAttribute( 'type', 'button' );\n      let num = i + 1 + this.dots.length;\n      dot.className = 'flickity-page-dot';\n      dot.textContent = `View slide ${num}`;\n      return dot;\n    } );\n\n  this.holder.append( ...newDots );\n  this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n  // remove from this.dots collection\n  let removeDots = this.dots.splice( this.dots.length - count, count );\n  // remove from DOM\n  removeDots.forEach( ( dot ) => dot.remove() );\n};\n\nPageDots.prototype.updateSelected = function( index ) {\n  // remove selected class on previous\n  if ( this.selectedDot ) {\n    this.selectedDot.classList.remove('is-selected');\n    this.selectedDot.removeAttribute('aria-current');\n  }\n  // don't proceed if no dots\n  if ( !this.dots.length ) return;\n\n  this.selectedDot = this.dots[ index ];\n  this.selectedDot.classList.add('is-selected');\n  this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n  pageDots: true,\n} );\n\nFlickity.create.pageDots = function() {\n  if ( !this.options.pageDots ) return;\n\n  this.pageDots = new PageDots();\n  this.handlePageDotsClick = this.onPageDotsClick.bind( this );\n  // events\n  this.on( 'activate', this.activatePageDots );\n  this.on( 'select', this.updateSelectedPageDots );\n  this.on( 'cellChange', this.updatePageDots );\n  this.on( 'resize', this.updatePageDots );\n  this.on( 'deactivate', this.deactivatePageDots );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePageDots = function() {\n  this.pageDots.setDots( this.slides.length );\n  this.focusableElems.push( ...this.pageDots.dots );\n  this.pageDots.holder.addEventListener( 'click', this.handlePageDotsClick );\n  this.element.append( this.pageDots.holder );\n};\n\nproto.onPageDotsClick = function( event ) {\n  let index = this.pageDots.dots.indexOf( event.target );\n  if ( index === -1 ) return; // only dot clicks\n\n  this.uiChange();\n  this.select( index );\n};\n\nproto.updateSelectedPageDots = function() {\n  this.pageDots.updateSelected( this.selectedIndex );\n};\n\nproto.updatePageDots = function() {\n  this.pageDots.dots.forEach( ( dot ) => {\n    utils.removeFrom( this.focusableElems, dot );\n  } );\n  this.pageDots.setDots( this.slides.length );\n  this.focusableElems.push( ...this.pageDots.dots );\n};\n\nproto.deactivatePageDots = function() {\n  this.pageDots.holder.remove();\n  this.pageDots.holder.removeEventListener( 'click', this.handlePageDotsClick );\n};\n\n// -----  ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( require('./core') );\n  } else {\n    // browser global\n    factory( window.Flickity );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( autoPlay, onTick ) {\n  this.autoPlay = autoPlay;\n  this.onTick = onTick;\n  this.state = 'stopped';\n  // visibility change event handler\n  this.onVisibilityChange = this.visibilityChange.bind( this );\n  this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\n// start play\nPlayer.prototype.play = function() {\n  if ( this.state === 'playing' ) return;\n\n  // do not play if page is hidden, start playing when page is visible\n  let isPageHidden = document.hidden;\n  if ( isPageHidden ) {\n    document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n    return;\n  }\n\n  this.state = 'playing';\n  // listen to visibility change\n  document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n  // start ticking\n  this.tick();\n};\n\nPlayer.prototype.tick = function() {\n  // do not tick if not playing\n  if ( this.state !== 'playing' ) return;\n\n  // default to 3 seconds\n  let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000;\n  // HACK: reset ticks if stopped and started within interval\n  this.clear();\n  this.timeout = setTimeout( () => {\n    this.onTick();\n    this.tick();\n  }, time );\n};\n\nPlayer.prototype.stop = function() {\n  this.state = 'stopped';\n  this.clear();\n  // remove visibility change event\n  document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n  clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n  if ( this.state === 'playing' ) {\n    this.state = 'paused';\n    this.clear();\n  }\n};\n\nPlayer.prototype.unpause = function() {\n  // re-start play if paused\n  if ( this.state === 'paused' ) this.play();\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n  let isPageHidden = document.hidden;\n  this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n  this.play();\n  document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n  pauseAutoPlayOnHover: true,\n} );\n\nFlickity.create.player = function() {\n  this.player = new Player( this.options.autoPlay, () => {\n    this.next( true );\n  } );\n\n  this.on( 'activate', this.activatePlayer );\n  this.on( 'uiChange', this.stopPlayer );\n  this.on( 'pointerDown', this.stopPlayer );\n  this.on( 'deactivate', this.deactivatePlayer );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePlayer = function() {\n  if ( !this.options.autoPlay ) return;\n\n  this.player.play();\n  this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n  this.player.play();\n};\n\nproto.stopPlayer = function() {\n  this.player.stop();\n};\n\nproto.pausePlayer = function() {\n  this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n  this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n  this.player.stop();\n  this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n  if ( !this.options.pauseAutoPlayOnHover ) return;\n\n  this.player.pause();\n  this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n  this.player.unpause();\n  this.element.removeEventListener( 'mouseleave', this );\n};\n\n// -----  ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('./core'),\n        require('fizzy-ui-utils'),\n    );\n  } else {\n    // browser global\n    factory(\n        window.Flickity,\n        window.fizzyUIUtils,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n  let fragment = document.createDocumentFragment();\n  cells.forEach( ( cell ) => fragment.appendChild( cell.element ) );\n  return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nlet proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n  let cells = this._makeCells( elems );\n  if ( !cells || !cells.length ) return;\n\n  let len = this.cells.length;\n  // default to append\n  index = index === undefined ? len : index;\n  // add cells with document fragment\n  let fragment = getCellsFragment( cells );\n  // append to slider\n  let isAppend = index === len;\n  if ( isAppend ) {\n    this.slider.appendChild( fragment );\n  } else {\n    let insertCellElement = this.cells[ index ].element;\n    this.slider.insertBefore( fragment, insertCellElement );\n  }\n  // add to this.cells\n  if ( index === 0 ) {\n    // prepend, add to start\n    this.cells = cells.concat( this.cells );\n  } else if ( isAppend ) {\n    // append, add to end\n    this.cells = this.cells.concat( cells );\n  } else {\n    // insert in this.cells\n    let endCells = this.cells.splice( index, len - index );\n    this.cells = this.cells.concat( cells ).concat( endCells );\n  }\n\n  this._sizeCells( cells );\n  this.cellChange( index );\n  this.positionSliderAtSelected();\n};\n\nproto.append = function( elems ) {\n  this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n  this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n  let cells = this.getCells( elems );\n  if ( !cells || !cells.length ) return;\n\n  let minCellIndex = this.cells.length - 1;\n  // remove cells from collection & DOM\n  cells.forEach( ( cell ) => {\n    cell.remove();\n    let index = this.cells.indexOf( cell );\n    minCellIndex = Math.min( index, minCellIndex );\n    utils.removeFrom( this.cells, cell );\n  } );\n\n  this.cellChange( minCellIndex );\n  this.positionSliderAtSelected();\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n  let cell = this.getCell( elem );\n  if ( !cell ) return;\n\n  cell.getSize();\n\n  let index = this.cells.indexOf( cell );\n  this.cellChange( index );\n  // do not position slider after lazy load\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex ) {\n  let prevSelectedElem = this.selectedElement;\n  this._positionCells( changedCellIndex );\n  this._updateWrapShiftCells();\n  this.setGallerySize();\n  // update selectedIndex, try to maintain position & select previous selected element\n  let cell = this.getCell( prevSelectedElem );\n  if ( cell ) this.selectedIndex = this.getCellSlideIndex( cell );\n  this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n  this.emitEvent( 'cellChange', [ changedCellIndex ] );\n  // position slider\n  this.select( this.selectedIndex );\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('./core'),\n        require('fizzy-ui-utils'),\n    );\n  } else {\n    // browser global\n    factory(\n        window.Flickity,\n        window.fizzyUIUtils,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\nconst lazyAttr = 'data-flickity-lazyload';\nconst lazySrcAttr = `${lazyAttr}-src`;\nconst lazySrcsetAttr = `${lazyAttr}-srcset`;\nconst imgSelector = `img[${lazyAttr}], img[${lazySrcAttr}], ` +\n  `img[${lazySrcsetAttr}], source[${lazySrcsetAttr}]`;\n\nFlickity.create.lazyLoad = function() {\n  this.on( 'select', this.lazyLoad );\n\n  this.handleLazyLoadComplete = this.onLazyLoadComplete.bind( this );\n};\n\nlet proto = Flickity.prototype;\n\nproto.lazyLoad = function() {\n  let { lazyLoad } = this.options;\n  if ( !lazyLoad ) return;\n\n  // get adjacent cells, use lazyLoad option for adjacent count\n  let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n  // lazy load images\n  this.getAdjacentCellElements( adjCount )\n    .map( getCellLazyImages )\n    .flat()\n    .forEach( ( img ) => new LazyLoader( img, this.handleLazyLoadComplete ) );\n};\n\nfunction getCellLazyImages( cellElem ) {\n  // check if cell element is lazy image\n  if ( cellElem.matches('img') ) {\n    let cellAttr = cellElem.getAttribute( lazyAttr );\n    let cellSrcAttr = cellElem.getAttribute( lazySrcAttr );\n    let cellSrcsetAttr = cellElem.getAttribute( lazySrcsetAttr );\n    if ( cellAttr || cellSrcAttr || cellSrcsetAttr ) {\n      return cellElem;\n    }\n  }\n  // select lazy images in cell\n  return [ ...cellElem.querySelectorAll( imgSelector ) ];\n}\n\nproto.onLazyLoadComplete = function( img, event ) {\n  let cell = this.getParentCell( img );\n  let cellElem = cell && cell.element;\n  this.cellSizeChange( cellElem );\n\n  this.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\nfunction LazyLoader( img, onComplete ) {\n  this.img = img;\n  this.onComplete = onComplete;\n  this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  // get src & srcset\n  let src = this.img.getAttribute( lazyAttr ) ||\n    this.img.getAttribute( lazySrcAttr );\n  let srcset = this.img.getAttribute( lazySrcsetAttr );\n  // set src & serset\n  this.img.src = src;\n  if ( srcset ) this.img.setAttribute( 'srcset', srcset );\n  // remove attr\n  this.img.removeAttribute( lazyAttr );\n  this.img.removeAttribute( lazySrcAttr );\n  this.img.removeAttribute( lazySrcsetAttr );\n};\n\nLazyLoader.prototype.onload = function( event ) {\n  this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n  this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n  // unbind events\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n  let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n  mediaElem.classList.add( className );\n\n  this.onComplete( this.img, event );\n};\n\n// -----  ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory( window, require('ev-emitter') );\n  } else {\n    // browser global\n    window.imagesLoaded = factory( window, window.EvEmitter );\n  }\n\n} )( typeof window !== 'undefined' ? window : this,\n    function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n  // use object if already an array\n  if ( Array.isArray( obj ) ) return obj;\n\n  let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  // convert nodeList to array\n  if ( isArrayLike ) return [ ...obj ];\n\n  // array of single index\n  return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n  // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n  if ( !( this instanceof ImagesLoaded ) ) {\n    return new ImagesLoaded( elem, options, onAlways );\n  }\n  // use elem as selector string\n  let queryElem = elem;\n  if ( typeof elem == 'string' ) {\n    queryElem = document.querySelectorAll( elem );\n  }\n  // bail if bad element\n  if ( !queryElem ) {\n    console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n    return;\n  }\n\n  this.elements = makeArray( queryElem );\n  this.options = {};\n  // shift arguments if no options set\n  if ( typeof options == 'function' ) {\n    onAlways = options;\n  } else {\n    Object.assign( this.options, options );\n  }\n\n  if ( onAlways ) this.on( 'always', onAlways );\n\n  this.getImages();\n  // add jQuery Deferred object\n  if ( $ ) this.jqDeferred = new $.Deferred();\n\n  // HACK check async to allow time to bind listeners\n  setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n  this.images = [];\n\n  // filter & find items if we have an item selector\n  this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n  // filter siblings\n  if ( elem.nodeName === 'IMG' ) {\n    this.addImage( elem );\n  }\n  // get background image on element\n  if ( this.options.background === true ) {\n    this.addElementBackgroundImages( elem );\n  }\n\n  // find children\n  // no non-element nodes, #143\n  let { nodeType } = elem;\n  if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n  let childImgs = elem.querySelectorAll('img');\n  // concat childElems to filterFound array\n  for ( let img of childImgs ) {\n    this.addImage( img );\n  }\n\n  // get child background images\n  if ( typeof this.options.background == 'string' ) {\n    let children = elem.querySelectorAll( this.options.background );\n    for ( let child of children ) {\n      this.addElementBackgroundImages( child );\n    }\n  }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n  let style = getComputedStyle( elem );\n  // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n  if ( !style ) return;\n\n  // get url inside url(\"...\")\n  let matches = reURL.exec( style.backgroundImage );\n  while ( matches !== null ) {\n    let url = matches && matches[2];\n    if ( url ) {\n      this.addBackground( url, elem );\n    }\n    matches = reURL.exec( style.backgroundImage );\n  }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n  let loadingImage = new LoadingImage( img );\n  this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n  let background = new Background( url, elem );\n  this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n  this.progressedCount = 0;\n  this.hasAnyBroken = false;\n  // complete if no images\n  if ( !this.images.length ) {\n    this.complete();\n    return;\n  }\n\n  /* eslint-disable-next-line func-style */\n  let onProgress = ( image, elem, message ) => {\n    // HACK - Chrome triggers event before object properties have changed. #83\n    setTimeout( () => {\n      this.progress( image, elem, message );\n    } );\n  };\n\n  this.images.forEach( function( loadingImage ) {\n    loadingImage.once( 'progress', onProgress );\n    loadingImage.check();\n  } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n  this.progressedCount++;\n  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n  // progress event\n  this.emitEvent( 'progress', [ this, image, elem ] );\n  if ( this.jqDeferred && this.jqDeferred.notify ) {\n    this.jqDeferred.notify( this, image );\n  }\n  // check if completed\n  if ( this.progressedCount === this.images.length ) {\n    this.complete();\n  }\n\n  if ( this.options.debug && console ) {\n    console.log( `progress: ${message}`, image, elem );\n  }\n};\n\nImagesLoaded.prototype.complete = function() {\n  let eventName = this.hasAnyBroken ? 'fail' : 'done';\n  this.isComplete = true;\n  this.emitEvent( eventName, [ this ] );\n  this.emitEvent( 'always', [ this ] );\n  if ( this.jqDeferred ) {\n    let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n    this.jqDeferred[ jqMethod ]( this );\n  }\n};\n\n// --------------------------  -------------------------- //\n\nfunction LoadingImage( img ) {\n  this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n  // If complete is true and browser supports natural sizes,\n  // try to check for image status manually.\n  let isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    // report based on naturalWidth\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    return;\n  }\n\n  // If none of the checks above matched, simulate loading on detached element.\n  this.proxyImage = new Image();\n  // add crossOrigin attribute. #204\n  if ( this.img.crossOrigin ) {\n    this.proxyImage.crossOrigin = this.img.crossOrigin;\n  }\n  this.proxyImage.addEventListener( 'load', this );\n  this.proxyImage.addEventListener( 'error', this );\n  // bind to image as well for Firefox. #191\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n  // check for non-zero, non-undefined naturalWidth\n  // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n  return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  let { parentNode } = this.img;\n  // emit progress with parent <picture> or self <img>\n  let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n  this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n  let method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nLoadingImage.prototype.onload = function() {\n  this.confirm( true, 'onload' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n  this.confirm( false, 'onerror' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n  this.proxyImage.removeEventListener( 'load', this );\n  this.proxyImage.removeEventListener( 'error', this );\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n  this.url = url;\n  this.element = element;\n  this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.img.src = this.url;\n  // check if image is already complete\n  let isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    this.unbindEvents();\n  }\n};\n\nBackground.prototype.unbindEvents = function() {\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n  jQuery = jQuery || window.jQuery;\n  if ( !jQuery ) return;\n\n  // set local variable\n  $ = jQuery;\n  // $().imagesLoaded()\n  $.fn.imagesLoaded = function( options, onAlways ) {\n    let instance = new ImagesLoaded( this, options, onAlways );\n    return instance.jqDeferred.promise( $( this ) );\n  };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// --------------------------  -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n","// imagesloaded\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('./core'),\n        require('imagesloaded'),\n    );\n  } else {\n    // browser global\n    factory(\n        window.Flickity,\n        window.imagesLoaded,\n    );\n  }\n\n}( typeof window != 'undefined' ? window : this,\n    function factory( Flickity, imagesLoaded ) {\n\nFlickity.create.imagesLoaded = function() {\n  this.on( 'activate', this.imagesLoaded );\n};\n\nFlickity.prototype.imagesLoaded = function() {\n  if ( !this.options.imagesLoaded ) return;\n\n  let onImagesLoadedProgress = ( instance, image ) => {\n    let cell = this.getParentCell( image.img );\n    this.cellSizeChange( cell && cell.element );\n    if ( !this.options.freeScroll ) this.positionSliderAtSelected();\n  };\n  imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\n\nif ( typeof module == 'object' && module.exports ) {\n  const Flickity = require('./core');\n  require('./drag');\n  require('./prev-next-button');\n  require('./page-dots');\n  require('./player');\n  require('./add-remove-cell');\n  require('./lazyload');\n  require('./imagesloaded');\n\n  module.exports = Flickity;\n}\n","import Flickity from 'flickity';\r\n\r\nfunction contentSlider() {\r\n  const sliders = document.querySelectorAll('.js-slider');\r\n  let screenWidth = document.body.getBoundingClientRect().width;\r\n\r\n  function isInViewport(elem) {\r\n    const bounding = elem.getBoundingClientRect();\r\n    return (\r\n      bounding.left >= 0 &&\r\n      bounding.right <= window.innerWidth\r\n    );\r\n  }\r\n\r\n  const sliderNextPrev = (control, slider) => {\r\n    slider.stopPlayer();\r\n    if (control.classList.contains('next')) {\r\n      slider.next(false, false);\r\n    } else {\r\n      slider.previous(false, false);\r\n    }\r\n    if (slider.options.autoPlay) {\r\n      slider.playPlayer();\r\n    }\r\n  };\r\n\r\n  const handleSliderControlState = (index, controls, numberOfSliders, slider) => {\r\n    for (let i = 0; i < controls.length; i += 1) {\r\n      const control = controls[i];\r\n      const lastSlide = slider.querySelector('.js-slider-item-last');\r\n\r\n      // Check if last image is complety in viewport\r\n      if (lastSlide && isInViewport(lastSlide)) {\r\n        if (control.classList.contains('next')) {\r\n          control.setAttribute('disabled', '');\r\n        } else {\r\n          control.removeAttribute('disabled', '');\r\n        }\r\n      } else {\r\n        if (index === 0) {\r\n          if (control.classList.contains('prev')) {\r\n            control.setAttribute('disabled', '');\r\n          } else if (control.classList.contains('next')) {\r\n            control.removeAttribute('disabled');\r\n          }\r\n        } else if (index === numberOfSliders - 1) {\r\n          if (control.classList.contains('next')) {\r\n            control.setAttribute('disabled', '');\r\n          } else {\r\n            control.removeAttribute('disabled', '');\r\n          }\r\n        } else if (control.getAttribute('disabled') !== null) {\r\n          control.removeAttribute('disabled');\r\n        }\r\n      }\r\n    }\r\n  };\r\n\r\n  const bindSliderControlEvents = (controls, flickitySlider, numberOfSliders, slider) => {\r\n    for (let i = 0; i < controls.length; i += 1) {\r\n      controls[i].addEventListener('click', () => sliderNextPrev(controls[i], flickitySlider));\r\n    }\r\n\r\n    flickitySlider.on('change', (index) => {\r\n      setTimeout(() => {\r\n        handleSliderControlState(index, controls, numberOfSliders, slider);\r\n      }, 250);\r\n    });\r\n\r\n    flickitySlider.on('settle', (index) => {\r\n      handleSliderControlState(index, controls, numberOfSliders, slider);\r\n    });\r\n  };\r\n\r\n  const initSliderNavigation = (slider, flickitySlider) => {\r\n    const sliderContainer = slider.closest('.js-slider-container');\r\n    const sliderControls = sliderContainer.querySelectorAll('.js-slider-control');\r\n    const numberOfSliders = flickitySlider.slides.length;\r\n    if (sliderControls.length) {\r\n      bindSliderControlEvents(sliderControls, flickitySlider, numberOfSliders, slider);\r\n    }\r\n  };\r\n\r\n  const animateImageTimeline = (index) => {\r\n    const allSlides = document.querySelectorAll('[data-slide-index]');\r\n\r\n    allSlides.forEach(slide => {\r\n      const imageOne = slide.querySelector('[data-timeline-img-front]');\r\n      const imageTwo = slide.querySelector('[data-timeline-img-back]');\r\n\r\n      if (imageTwo) imageTwo.classList.remove('is-visible');\r\n      if (imageOne) imageOne.classList.remove('is-visible');\r\n\r\n      if (parseInt(slide.dataset.slideIndex, 10) === index) {\r\n        if (imageTwo) {\r\n          imageTwo.classList.add('is-visible');\r\n        }\r\n\r\n        setTimeout(function () {\r\n          if (imageOne) {\r\n            imageOne.classList.add('is-visible');\r\n          }\r\n        }, 200);\r\n      }\r\n    })\r\n  }\r\n\r\n  const sliderReadyCallback = (slider, flickitySlider) => {\r\n    if (slider.getAttribute('data-slider-customnav') === 'true') {\r\n      initSliderNavigation(slider, flickitySlider);\r\n    }\r\n\r\n    if (slider.closest('.js-slider-container')) {\r\n      const oSliderContainer = slider.closest('.js-slider-container');\r\n      oSliderContainer.classList.add('ready');\r\n    }\r\n\r\n    if (slider.classList.contains('slider--options')) {\r\n      initOptionSlide(slider, flickitySlider);\r\n    }\r\n\r\n    if (slider.dataset.sliderTimeline !== undefined) {\r\n      flickitySlider.slides.forEach(slide => {\r\n        const slideEl = slide.cells[0].element;\r\n        const itemHeight = slideEl.querySelector('[data-timeline-img]');\r\n        const imgWrapper = slideEl.querySelector('[data-timeline-img-wrapper]');\r\n\r\n        if (itemHeight && itemHeight.offsetHeight > slider.offsetHeight) {\r\n          if (screenWidth < 992) {\r\n            slider.style.height = itemHeight.offsetHeight + 80 + 'px';\r\n          } else {\r\n            slider.style.height = itemHeight.offsetHeight + 60 + 'px';\r\n          }\r\n        }\r\n\r\n        if (imgWrapper && itemHeight) {\r\n          imgWrapper.style.height = itemHeight.offsetHeight + 'px';\r\n        }\r\n\r\n      })\r\n\r\n      flickitySlider.on('change', function (index) {\r\n        animateImageTimeline(index);\r\n      });\r\n    }\r\n\r\n    const sameHeightItems = slider.querySelectorAll('[data-slider-height]');\r\n    sameHeightItems.forEach(item => {\r\n      if (screenWidth < 992) {\r\n        item.style.height = '100%';\r\n      } else {\r\n        item.style.height = 'auto';\r\n      }\r\n    })\r\n\r\n    const sameHeightItemsAll = document.querySelectorAll('[data-slider-all-height]');\r\n    sameHeightItemsAll.forEach(item => {\r\n      item.style.height = '100%';\r\n    })\r\n  };\r\n\r\n  function handleTimer(slider, flickitySlider) {\r\n    if (slider.getAttribute('data-slider-timer') !== '') {\r\n      const sliderTimer = slider.parentNode.querySelector('.js-slider-timer');\r\n      const sliderTimerProgress = sliderTimer.querySelector('.js-slider-progress');\r\n      const offset = sliderTimer.offsetWidth;\r\n\r\n      const timing = parseInt(slider.getAttribute('data-slider-timer'), 10);\r\n      let progress = 0;\r\n      const step = ((offset - 6) / timing) * 10;\r\n\r\n      const interval = setInterval(function () {\r\n        if (progress >= (offset - 6)) {\r\n          flickitySlider.next(true);\r\n          sliderTimerProgress.style.width = '0px';\r\n          progress = 0;\r\n        } else {\r\n          progress = progress + step;\r\n          sliderTimerProgress.style.width = progress + 'px';\r\n        }\r\n      }, 10);\r\n\r\n      flickitySlider.on('change', () => {\r\n        sliderTimerProgress.style.width = '0px';\r\n        progress = 0;\r\n      });\r\n    }\r\n  }\r\n\r\n  function initSlider(slider, destroy) {\r\n    const flickitySlider = new Flickity(slider, {\r\n      contain: true,\r\n      autoPlay: slider.getAttribute('data-autoplay') ? parseInt(slider.getAttribute('data-autoplay'), 10) : false,\r\n      pauseAutoPlayOnHover: slider.getAttribute('data-pauseautoplay') === 'true' ? true : false,\r\n      cellAlign: 'left',\r\n      wrapAround: slider.getAttribute('data-slider-wrap') === 'true',\r\n      prevNextButtons: slider.getAttribute('data-slider-nav') === 'true',\r\n      pageDots: slider.getAttribute('data-slider-dots') === 'true',\r\n      groupCells: slider.getAttribute('data-groupcells') ? slider.getAttribute('data-groupcells') : false,\r\n      fade: slider.getAttribute('data-fade') === 'true' ? true : false,\r\n      on: {\r\n        ready: () => {\r\n          setTimeout(() => {\r\n            sliderReadyCallback(slider, flickitySlider);\r\n          }, 0);\r\n        },\r\n        dragEnd: () => {\r\n          if (flickitySlider.options.autoPlay) {\r\n            flickitySlider.playPlayer();\r\n          }\r\n        }\r\n      }\r\n    });\r\n\r\n    if (destroy) {\r\n      flickitySlider.destroy();\r\n      slider.classList.remove('flickity-enabled');\r\n    }\r\n\r\n    if (slider.getAttribute('data-slider-timer')) {\r\n      handleTimer(slider, flickitySlider);\r\n    }\r\n\r\n    if (slider.dataset.sliderTimeline !== undefined) {\r\n      animateImageTimeline(0);\r\n    }\r\n\r\n    const cellsButtonGroup = document.querySelector('.button-group');\r\n    if (cellsButtonGroup !== null) {\r\n      const cellsButtons = cellsButtonGroup.querySelectorAll('.button-group__button');\r\n\r\n      flickitySlider.on('select', function () {\r\n        const previousSelectedButton = cellsButtonGroup.querySelector('.is-selected');\r\n        const selectedButton = cellsButtonGroup.children[flickitySlider.selectedIndex];\r\n        previousSelectedButton.classList.remove('is-selected');\r\n        selectedButton.classList.add('is-selected');\r\n      });\r\n\r\n      for (let i = 0; i < cellsButtons.length; i += 1) {\r\n        cellsButtons[i].addEventListener('click', () => {\r\n          flickitySlider.selectCell(i);\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('resize', function () {\r\n    screenWidth = document.body.getBoundingClientRect().width;\r\n    const sameHeightItems = document.querySelectorAll('[data-slider-height]');\r\n\r\n    sliders.forEach(slider => {\r\n      let mobileBreakpoint = slider.dataset.sliderBreakpoint;\r\n\r\n      if (!mobileBreakpoint) {\r\n        mobileBreakpoint = 992;\r\n      }\r\n\r\n      if (slider.dataset.sliderMobile === 'true' && screenWidth > mobileBreakpoint) {\r\n        if (slider.classList.contains('flickity-enabled')) {\r\n          initSlider(slider, true);\r\n        }\r\n      } else {\r\n        if (!slider.classList.contains('flickity-enabled')) {\r\n          initSlider(slider, false);\r\n        }\r\n      }\r\n\r\n      if (screenWidth > mobileBreakpoint) {\r\n        sameHeightItems.forEach(item => {\r\n          item.style.height = 'auto';\r\n        });\r\n      } else {\r\n        sameHeightItems.forEach(item => {\r\n          item.style.height = '100%';\r\n        });\r\n      }\r\n\r\n      if (slider.dataset.sliderTimeline !== undefined) {\r\n        initSlider(slider, true);\r\n        initSlider(slider, false);\r\n      }\r\n    });\r\n  });\r\n\r\n\r\n  sliders.forEach(slider => {\r\n    let mobileBreakpoint = slider.dataset.sliderBreakpoint;\r\n\r\n    if (!mobileBreakpoint) {\r\n      mobileBreakpoint = 992;\r\n    }\r\n\r\n    if (slider.dataset.sliderMobile === 'true' && screenWidth <= mobileBreakpoint) {\r\n      initSlider(slider, false);\r\n    } else if (slider.dataset.sliderMobile === undefined) {\r\n      initSlider(slider, false);\r\n    }\r\n  });\r\n}\r\n\r\nexport default contentSlider;\r\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var expressionsInterfaces = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setExpressionInterfaces = function setExpressionInterfaces(value) {\n    expressionsInterfaces = value;\n  };\n\n  var getExpressionInterfaces = function getExpressionInterfaces() {\n    return expressionsInterfaces;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), path, true);\n                } catch (error) {\n                  // Hack to workaround banner validation\n                  xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function getRegisteredRenderer() {\n    // Returns canvas by default for compatibility\n    if (renderers.canvas) {\n      return 'canvas';\n    } // Returns any renderer that is registered\n\n\n    for (var key in renderers) {\n      if (renderers[key]) {\n        return key;\n      }\n    }\n\n    return '';\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n    this.expressionsPlugin = getExpressionsPlugin();\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    if (!params.path) {\n      this.trigger('destroy');\n    } else {\n      this.setParams(params);\n    }\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function (width, height) {\n    // Adding this validation for backwards compatibility in case an event object was being passed down\n    var _width = typeof width === 'number' ? width : undefined;\n\n    var _height = typeof height === 'number' ? height : undefined;\n\n    this.renderer.updateContainerSize(_width, _height);\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      if (this.expressionsPlugin) {\n        this.expressionsPlugin.resetFrame();\n      }\n\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_play');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_pause');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.expressionsPlugin = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setLoop = function (isLooping) {\n    this.loop = isLooping;\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var initFrame = initialDefaultFrame;\n  var mathAbs = Math.abs;\n\n  function interpolateValue(frameNum, caching) {\n    var offsetTime = this.offsetTime;\n    var newValue;\n\n    if (this.propType === 'multidimensional') {\n      newValue = createTypedArray('float32', this.pv.length);\n    }\n\n    var iterationIndex = caching.lastIndex;\n    var i = iterationIndex;\n    var len = this.keyframes.length - 1;\n    var flag = true;\n    var keyData;\n    var nextKeyData;\n    var keyframeMetadata;\n\n    while (flag) {\n      keyData = this.keyframes[i];\n      nextKeyData = this.keyframes[i + 1];\n\n      if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n        if (keyData.h) {\n          keyData = nextKeyData;\n        }\n\n        iterationIndex = 0;\n        break;\n      }\n\n      if (nextKeyData.t - offsetTime > frameNum) {\n        iterationIndex = i;\n        break;\n      }\n\n      if (i < len - 1) {\n        i += 1;\n      } else {\n        iterationIndex = 0;\n        flag = false;\n      }\n    }\n\n    keyframeMetadata = this.keyframesMetadata[i] || {};\n    var k;\n    var kLen;\n    var perc;\n    var jLen;\n    var j;\n    var fnc;\n    var nextKeyTime = nextKeyData.t - offsetTime;\n    var keyTime = keyData.t - offsetTime;\n    var endValue;\n\n    if (keyData.to) {\n      if (!keyframeMetadata.bezierData) {\n        keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n      }\n\n      var bezierData = keyframeMetadata.bezierData;\n\n      if (frameNum >= nextKeyTime || frameNum < keyTime) {\n        var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n        kLen = bezierData.points[ind].point.length;\n\n        for (k = 0; k < kLen; k += 1) {\n          newValue[k] = bezierData.points[ind].point[k];\n        } // caching._lastKeyframeIndex = -1;\n\n      } else {\n        if (keyframeMetadata.__fnct) {\n          fnc = keyframeMetadata.__fnct;\n        } else {\n          fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n          keyframeMetadata.__fnct = fnc;\n        }\n\n        perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n        var distanceInLine = bezierData.segmentLength * perc;\n        var segmentPerc;\n        var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n        j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n        flag = true;\n        jLen = bezierData.points.length;\n\n        while (flag) {\n          addedLength += bezierData.points[j].partialLength;\n\n          if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k];\n            }\n\n            break;\n          } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n            segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n            kLen = bezierData.points[j].point.length;\n\n            for (k = 0; k < kLen; k += 1) {\n              newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n            }\n\n            break;\n          }\n\n          if (j < jLen - 1) {\n            j += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        caching._lastPoint = j;\n        caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n        caching._lastKeyframeIndex = i;\n      }\n    } else {\n      var outX;\n      var outY;\n      var inX;\n      var inY;\n      var keyValue;\n      len = keyData.s.length;\n      endValue = nextKeyData.s || keyData.e;\n\n      if (this.sh && keyData.h !== 1) {\n        if (frameNum >= nextKeyTime) {\n          newValue[0] = endValue[0];\n          newValue[1] = endValue[1];\n          newValue[2] = endValue[2];\n        } else if (frameNum <= keyTime) {\n          newValue[0] = keyData.s[0];\n          newValue[1] = keyData.s[1];\n          newValue[2] = keyData.s[2];\n        } else {\n          var quatStart = createQuaternion(keyData.s);\n          var quatEnd = createQuaternion(endValue);\n          var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n          quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n        }\n      } else {\n        for (i = 0; i < len; i += 1) {\n          if (keyData.h !== 1) {\n            if (frameNum >= nextKeyTime) {\n              perc = 1;\n            } else if (frameNum < keyTime) {\n              perc = 0;\n            } else {\n              if (keyData.o.x.constructor === Array) {\n                if (!keyframeMetadata.__fnct) {\n                  keyframeMetadata.__fnct = [];\n                }\n\n                if (!keyframeMetadata.__fnct[i]) {\n                  outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                  outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                  inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                  inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyframeMetadata.__fnct[i] = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct[i];\n                }\n              } else if (!keyframeMetadata.__fnct) {\n                outX = keyData.o.x;\n                outY = keyData.o.y;\n                inX = keyData.i.x;\n                inY = keyData.i.y;\n                fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                keyData.keyframeMetadata = fnc;\n              } else {\n                fnc = keyframeMetadata.__fnct;\n              }\n\n              perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n            }\n          }\n\n          endValue = nextKeyData.s || keyData.e;\n          keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n          if (this.propType === 'multidimensional') {\n            newValue[i] = keyValue;\n          } else {\n            newValue = keyValue;\n          }\n        }\n      }\n    }\n\n    caching.lastIndex = iterationIndex;\n    return newValue;\n  } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n  function slerp(a, b, t) {\n    var out = [];\n    var ax = a[0];\n    var ay = a[1];\n    var az = a[2];\n    var aw = a[3];\n    var bx = b[0];\n    var by = b[1];\n    var bz = b[2];\n    var bw = b[3];\n    var omega;\n    var cosom;\n    var sinom;\n    var scale0;\n    var scale1;\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx = -bx;\n      by = -by;\n      bz = -bz;\n      bw = -bw;\n    }\n\n    if (1.0 - cosom > 0.000001) {\n      omega = Math.acos(cosom);\n      sinom = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n\n    out[0] = scale0 * ax + scale1 * bx;\n    out[1] = scale0 * ay + scale1 * by;\n    out[2] = scale0 * az + scale1 * bz;\n    out[3] = scale0 * aw + scale1 * bw;\n    return out;\n  }\n\n  function quaternionToEuler(out, quat) {\n    var qx = quat[0];\n    var qy = quat[1];\n    var qz = quat[2];\n    var qw = quat[3];\n    var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n    var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n    var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n    out[0] = heading / degToRads;\n    out[1] = attitude / degToRads;\n    out[2] = bank / degToRads;\n  }\n\n  function createQuaternion(values) {\n    var heading = values[0] * degToRads;\n    var attitude = values[1] * degToRads;\n    var bank = values[2] * degToRads;\n    var c1 = Math.cos(heading / 2);\n    var c2 = Math.cos(attitude / 2);\n    var c3 = Math.cos(bank / 2);\n    var s1 = Math.sin(heading / 2);\n    var s2 = Math.sin(attitude / 2);\n    var s3 = Math.sin(bank / 2);\n    var w = c1 * c2 * c3 - s1 * s2 * s3;\n    var x = s1 * s2 * c3 + c1 * c2 * s3;\n    var y = s1 * c2 * c3 + c1 * s2 * s3;\n    var z = c1 * s2 * c3 - s1 * c2 * s3;\n    return [x, y, z, w];\n  }\n\n  function getValueAtCurrentTime() {\n    var frameNum = this.comp.renderedFrame - this.offsetTime;\n    var initTime = this.keyframes[0].t - this.offsetTime;\n    var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n    if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n      if (this._caching.lastFrame >= frameNum) {\n        this._caching._lastKeyframeIndex = -1;\n        this._caching.lastIndex = 0;\n      }\n\n      var renderResult = this.interpolateValue(frameNum, this._caching);\n      this.pv = renderResult;\n    }\n\n    this._caching.lastFrame = frameNum;\n    return this.pv;\n  }\n\n  function setVValue(val) {\n    var multipliedValue;\n\n    if (this.propType === 'unidimensional') {\n      multipliedValue = val * this.mult;\n\n      if (mathAbs(this.v - multipliedValue) > 0.00001) {\n        this.v = multipliedValue;\n        this._mdf = true;\n      }\n    } else {\n      var i = 0;\n      var len = this.v.length;\n\n      while (i < len) {\n        multipliedValue = val[i] * this.mult;\n\n        if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n          this.v[i] = multipliedValue;\n          this._mdf = true;\n        }\n\n        i += 1;\n      }\n    }\n  }\n\n  function processEffectsSequence() {\n    if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n      return;\n    }\n\n    if (this.lock) {\n      this.setVValue(this.pv);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = this._isFirstFrame;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = this.kf ? this.pv : this.data.k;\n\n    for (i = 0; i < len; i += 1) {\n      finalValue = this.effectsSequence[i](finalValue);\n    }\n\n    this.setVValue(finalValue);\n    this._isFirstFrame = false;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  }\n\n  function addEffect(effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.container.addDynamicProperty(this);\n  }\n\n  function ValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this.v = mult ? data.k * mult : data.k;\n    this.pv = data.k;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.vel = 0;\n    this.effectsSequence = [];\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function MultiDimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    this.mult = mult || 1;\n    this.data = data;\n    this._mdf = false;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.k = false;\n    this.kf = false;\n    this.frameId = -1;\n    var i;\n    var len = data.k.length;\n    this.v = createTypedArray('float32', len);\n    this.pv = createTypedArray('float32', len);\n    this.vel = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.v[i] = data.k[i] * this.mult;\n      this.pv[i] = data.k[i];\n    }\n\n    this._isFirstFrame = true;\n    this.effectsSequence = [];\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedValueProperty(elem, data, mult, container) {\n    this.propType = 'unidimensional';\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.frameId = -1;\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: 0,\n      _lastKeyframeIndex: -1\n    };\n    this.k = true;\n    this.kf = true;\n    this.data = data;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.v = initFrame;\n    this.pv = initFrame;\n    this._isFirstFrame = true;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.addEffect = addEffect;\n  }\n\n  function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n    this.propType = 'multidimensional';\n    var i;\n    var len = data.k.length;\n    var s;\n    var e;\n    var to;\n    var ti;\n\n    for (i = 0; i < len - 1; i += 1) {\n      if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n        s = data.k[i].s;\n        e = data.k[i + 1].s;\n        to = data.k[i].to;\n        ti = data.k[i].ti;\n\n        if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n          data.k[i].to = null;\n          data.k[i].ti = null;\n        }\n\n        if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n          if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n        }\n      }\n    }\n\n    this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n    this.data = data;\n    this.keyframes = data.k;\n    this.keyframesMetadata = [];\n    this.offsetTime = elem.data.st;\n    this.k = true;\n    this.kf = true;\n    this._isFirstFrame = true;\n    this.mult = mult || 1;\n    this.elem = elem;\n    this.container = container;\n    this.comp = elem.comp;\n    this.getValue = processEffectsSequence;\n    this.setVValue = setVValue;\n    this.interpolateValue = interpolateValue;\n    this.frameId = -1;\n    var arrLen = data.k[0].s.length;\n    this.v = createTypedArray('float32', arrLen);\n    this.pv = createTypedArray('float32', arrLen);\n\n    for (i = 0; i < arrLen; i += 1) {\n      this.v[i] = initFrame;\n      this.pv[i] = initFrame;\n    }\n\n    this._caching = {\n      lastFrame: initFrame,\n      lastIndex: 0,\n      value: createTypedArray('float32', arrLen)\n    };\n    this.addEffect = addEffect;\n  }\n\n  var PropertyFactory = function () {\n    function getProp(elem, data, type, mult, container) {\n      if (data.sid) {\n        data = elem.globalData.slotManager.getProp(data);\n      }\n\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  ShapePath.prototype.length = function () {\n    return this._length;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function multiply(matrix) {\n      var matrixProps = matrix.props;\n      return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.multiply = multiply;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.12.2';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      this.appliedTransformations = 0;\n      this.pre.reset();\n\n      if (!this.a.effectsSequence.length) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function floatEqual(a, b) {\n    return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n  }\n\n  function floatZero(f) {\n    return Math.abs(f) <= 0.00001;\n  }\n\n  function lerp(p0, p1, amount) {\n    return p0 * (1 - amount) + p1 * amount;\n  }\n\n  function lerpPoint(p0, p1, amount) {\n    return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n  }\n\n  function quadRoots(a, b, c) {\n    // no root\n    if (a === 0) return [];\n    var s = b * b - 4 * a * c; // Complex roots\n\n    if (s < 0) return [];\n    var singleRoot = -b / (2 * a); // 1 root\n\n    if (s === 0) return [singleRoot];\n    var delta = Math.sqrt(s) / (2 * a); // 2 roots\n\n    return [singleRoot - delta, singleRoot + delta];\n  }\n\n  function polynomialCoefficients(p0, p1, p2, p3) {\n    return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n  }\n\n  function singlePoint(p) {\n    return new PolynomialBezier(p, p, p, p, false);\n  }\n\n  function PolynomialBezier(p0, p1, p2, p3, linearize) {\n    if (linearize && pointEqual(p0, p1)) {\n      p1 = lerpPoint(p0, p3, 1 / 3);\n    }\n\n    if (linearize && pointEqual(p2, p3)) {\n      p2 = lerpPoint(p0, p3, 2 / 3);\n    }\n\n    var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n    var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n    this.a = [coeffx[0], coeffy[0]];\n    this.b = [coeffx[1], coeffy[1]];\n    this.c = [coeffx[2], coeffy[2]];\n    this.d = [coeffx[3], coeffy[3]];\n    this.points = [p0, p1, p2, p3];\n  }\n\n  PolynomialBezier.prototype.point = function (t) {\n    return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n  };\n\n  PolynomialBezier.prototype.derivative = function (t) {\n    return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n  };\n\n  PolynomialBezier.prototype.tangentAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[1], p[0]);\n  };\n\n  PolynomialBezier.prototype.normalAngle = function (t) {\n    var p = this.derivative(t);\n    return Math.atan2(p[0], p[1]);\n  };\n\n  PolynomialBezier.prototype.inflectionPoints = function () {\n    var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n    if (floatZero(denom)) return [];\n    var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n    var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n    if (square < 0) return [];\n    var root = Math.sqrt(square);\n\n    if (floatZero(root)) {\n      if (root > 0 && root < 1) return [tcusp];\n      return [];\n    }\n\n    return [tcusp - root, tcusp + root].filter(function (r) {\n      return r > 0 && r < 1;\n    });\n  };\n\n  PolynomialBezier.prototype.split = function (t) {\n    if (t <= 0) return [singlePoint(this.points[0]), this];\n    if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n    var p10 = lerpPoint(this.points[0], this.points[1], t);\n    var p11 = lerpPoint(this.points[1], this.points[2], t);\n    var p12 = lerpPoint(this.points[2], this.points[3], t);\n    var p20 = lerpPoint(p10, p11, t);\n    var p21 = lerpPoint(p11, p12, t);\n    var p3 = lerpPoint(p20, p21, t);\n    return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n  };\n\n  function extrema(bez, comp) {\n    var min = bez.points[0][comp];\n    var max = bez.points[bez.points.length - 1][comp];\n\n    if (min > max) {\n      var e = max;\n      max = min;\n      min = e;\n    } // Derivative roots to find min/max\n\n\n    var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n\n    for (var i = 0; i < f.length; i += 1) {\n      if (f[i] > 0 && f[i] < 1) {\n        var val = bez.point(f[i])[comp];\n        if (val < min) min = val;else if (val > max) max = val;\n      }\n    }\n\n    return {\n      min: min,\n      max: max\n    };\n  }\n\n  PolynomialBezier.prototype.bounds = function () {\n    return {\n      x: extrema(this, 0),\n      y: extrema(this, 1)\n    };\n  };\n\n  PolynomialBezier.prototype.boundingBox = function () {\n    var bounds = this.bounds();\n    return {\n      left: bounds.x.min,\n      right: bounds.x.max,\n      top: bounds.y.min,\n      bottom: bounds.y.max,\n      width: bounds.x.max - bounds.x.min,\n      height: bounds.y.max - bounds.y.min,\n      cx: (bounds.x.max + bounds.x.min) / 2,\n      cy: (bounds.y.max + bounds.y.min) / 2\n    };\n  };\n\n  function intersectData(bez, t1, t2) {\n    var box = bez.boundingBox();\n    return {\n      cx: box.cx,\n      cy: box.cy,\n      width: box.width,\n      height: box.height,\n      bez: bez,\n      t: (t1 + t2) / 2,\n      t1: t1,\n      t2: t2\n    };\n  }\n\n  function splitData(data) {\n    var split = data.bez.split(0.5);\n    return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n  }\n\n  function boxIntersect(b1, b2) {\n    return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n  }\n\n  function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n    if (!boxIntersect(d1, d2)) return;\n\n    if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n      intersections.push([d1.t, d2.t]);\n      return;\n    }\n\n    var d1s = splitData(d1);\n    var d2s = splitData(d2);\n    intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n    intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n  }\n\n  PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n    if (tolerance === undefined) tolerance = 2;\n    if (maxRecursion === undefined) maxRecursion = 7;\n    var intersections = [];\n    intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n    return intersections;\n  };\n\n  PolynomialBezier.shapeSegment = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n  };\n\n  PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n    var nextIndex = (index + 1) % shapePath.length();\n    return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n  };\n\n  function crossProduct(a, b) {\n    return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n  }\n\n  function lineIntersection(start1, end1, start2, end2) {\n    var v1 = [start1[0], start1[1], 1];\n    var v2 = [end1[0], end1[1], 1];\n    var v3 = [start2[0], start2[1], 1];\n    var v4 = [end2[0], end2[1], 1];\n    var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n    if (floatZero(r[2])) return null;\n    return [r[0] / r[2], r[1] / r[2]];\n  }\n\n  function polarOffset(p, angle, length) {\n    return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n  }\n\n  function pointDistance(p1, p2) {\n    return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n  }\n\n  function pointEqual(p1, p2) {\n    return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n  }\n\n  function ZigZagModifier() {}\n\n  extendPrototype([ShapeModifier], ZigZagModifier);\n\n  ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n    this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n    this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n  };\n\n  function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n    var angO = angle - Math.PI / 2;\n    var angI = angle + Math.PI / 2;\n    var px = point[0] + Math.cos(angle) * direction * amplitude;\n    var py = point[1] - Math.sin(angle) * direction * amplitude;\n    outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n  }\n\n  function getPerpendicularVector(pt1, pt2) {\n    var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n    var rot = -Math.PI * 0.5;\n    var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n    return rotatedVector;\n  }\n\n  function getProjectingAngle(path, cur) {\n    var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n    var nextIndex = (cur + 1) % path.length();\n    var prevPoint = path.v[prevIndex];\n    var nextPoint = path.v[nextIndex];\n    var pVector = getPerpendicularVector(prevPoint, nextPoint);\n    return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n  }\n\n  function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n    var angle = getProjectingAngle(path, cur);\n    var point = path.v[cur % path._length];\n    var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n    var nextPoint = path.v[(cur + 1) % path._length];\n    var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n    var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n    setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n  }\n\n  function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n    for (var i = 0; i < frequency; i += 1) {\n      var t = (i + 1) / (frequency + 1);\n      var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n      var angle = segment.normalAngle(t);\n      var point = segment.point(t);\n      setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n      direction = -direction;\n    }\n\n    return direction;\n  }\n\n  ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n    var count = path._length;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n\n    if (!path.c) {\n      count -= 1;\n    }\n\n    if (count === 0) return clonedPath;\n    var direction = -1;\n    var segment = PolynomialBezier.shapeSegment(path, 0);\n    zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n\n    for (var i = 0; i < count; i += 1) {\n      direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n\n      if (i === count - 1 && !path.c) {\n        segment = null;\n      } else {\n        segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n      }\n\n      zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n    }\n\n    return clonedPath;\n  };\n\n  ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amplitude = this.amplitude.v;\n    var frequency = Math.max(0, Math.round(this.frequency.v));\n    var pointType = this.pointsType.v;\n\n    if (amplitude !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function linearOffset(p1, p2, amount) {\n    var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n    return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n  }\n\n  function offsetSegment(segment, amount) {\n    var p0;\n    var p1a;\n    var p1b;\n    var p2b;\n    var p2a;\n    var p3;\n    var e;\n    e = linearOffset(segment.points[0], segment.points[1], amount);\n    p0 = e[0];\n    p1a = e[1];\n    e = linearOffset(segment.points[1], segment.points[2], amount);\n    p1b = e[0];\n    p2b = e[1];\n    e = linearOffset(segment.points[2], segment.points[3], amount);\n    p2a = e[0];\n    p3 = e[1];\n    var p1 = lineIntersection(p0, p1a, p1b, p2b);\n    if (p1 === null) p1 = p1a;\n    var p2 = lineIntersection(p2a, p3, p1b, p2b);\n    if (p2 === null) p2 = p2a;\n    return new PolynomialBezier(p0, p1, p2, p3);\n  }\n\n  function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n    var p0 = seg1.points[3];\n    var p1 = seg2.points[0]; // Bevel\n\n    if (lineJoin === 3) return p0; // Connected, they don't need a joint\n\n    if (pointEqual(p0, p1)) return p0; // Round\n\n    if (lineJoin === 2) {\n      var angleOut = -seg1.tangentAngle(1);\n      var angleIn = -seg2.tangentAngle(0) + Math.PI;\n      var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n      var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n      var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n      outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n      tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n      outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n      return p1;\n    } // Miter\n\n\n    var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n    var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n    var intersection = lineIntersection(t0, p0, p1, t1);\n\n    if (intersection && pointDistance(intersection, p0) < miterLimit) {\n      outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n      return intersection;\n    }\n\n    return p0;\n  }\n\n  function getIntersection(a, b) {\n    var intersect = a.intersections(b);\n    if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n    if (intersect.length) return intersect[0];\n    return null;\n  }\n\n  function pruneSegmentIntersection(a, b) {\n    var outa = a.slice();\n    var outb = b.slice();\n    var intersect = getIntersection(a[a.length - 1], b[0]);\n\n    if (intersect) {\n      outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n      outb[0] = b[0].split(intersect[1])[1];\n    }\n\n    if (a.length > 1 && b.length > 1) {\n      intersect = getIntersection(a[0], b[b.length - 1]);\n\n      if (intersect) {\n        return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n      }\n    }\n\n    return [outa, outb];\n  }\n\n  function pruneIntersections(segments) {\n    var e;\n\n    for (var i = 1; i < segments.length; i += 1) {\n      e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n      segments[i - 1] = e[0];\n      segments[i] = e[1];\n    }\n\n    if (segments.length > 1) {\n      e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n      segments[segments.length - 1] = e[0];\n      segments[0] = e[1];\n    }\n\n    return segments;\n  }\n\n  function offsetSegmentSplit(segment, amount) {\n    /*\r\n      We split each bezier segment into smaller pieces based\r\n      on inflection points, this ensures the control point\r\n      polygon is convex.\r\n        (A cubic bezier can have none, one, or two inflection points)\r\n    */\n    var flex = segment.inflectionPoints();\n    var left;\n    var right;\n    var split;\n    var mid;\n\n    if (flex.length === 0) {\n      return [offsetSegment(segment, amount)];\n    }\n\n    if (flex.length === 1 || floatEqual(flex[1], 1)) {\n      split = segment.split(flex[0]);\n      left = split[0];\n      right = split[1];\n      return [offsetSegment(left, amount), offsetSegment(right, amount)];\n    }\n\n    split = segment.split(flex[0]);\n    left = split[0];\n    var t = (flex[1] - flex[0]) / (1 - flex[0]);\n    split = split[1].split(t);\n    mid = split[0];\n    right = split[1];\n    return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n  }\n\n  function OffsetPathModifier() {}\n\n  extendPrototype([ShapeModifier], OffsetPathModifier);\n\n  OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n    this.lineJoin = data.lj;\n    this._isAnimated = this.amount.effectsSequence.length !== 0;\n  };\n\n  OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n    var outputBezier = shapePool.newElement();\n    outputBezier.c = inputBezier.c;\n    var count = inputBezier.length();\n\n    if (!inputBezier.c) {\n      count -= 1;\n    }\n\n    var i;\n    var j;\n    var segment;\n    var multiSegments = [];\n\n    for (i = 0; i < count; i += 1) {\n      segment = PolynomialBezier.shapeSegment(inputBezier, i);\n      multiSegments.push(offsetSegmentSplit(segment, amount));\n    }\n\n    if (!inputBezier.c) {\n      for (i = count - 1; i >= 0; i -= 1) {\n        segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n        multiSegments.push(offsetSegmentSplit(segment, amount));\n      }\n    }\n\n    multiSegments = pruneIntersections(multiSegments); // Add bezier segments to the output and apply line joints\n\n    var lastPoint = null;\n    var lastSeg = null;\n\n    for (i = 0; i < multiSegments.length; i += 1) {\n      var multiSegment = multiSegments[i];\n      if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n      lastSeg = multiSegment[multiSegment.length - 1];\n\n      for (j = 0; j < multiSegment.length; j += 1) {\n        segment = multiSegment[j];\n\n        if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n          outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n        } else {\n          outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n        }\n\n        outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n        lastPoint = segment.points[3];\n      }\n    }\n\n    if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n    return outputBezier;\n  };\n\n  OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n    var miterLimit = this.miterLimit.v;\n    var lineJoin = this.lineJoin;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var BLACK_FLAG_CODE_POINT = 127988;\n    var CANCEL_TAG_CODE_POINT = 917631;\n    var A_TAG_CODE_POINT = 917601;\n    var Z_TAG_CODE_POINT = 917626;\n    var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n    var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n    var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n    var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName); // Using the char instead of char.charCodeAt(0)\n      // to avoid collisions between equal chars\n\n      var index = _char2;\n\n      if (!fontData.cache[index]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function getCodePoint(string) {\n      var codePoint = 0;\n      var first = string.charCodeAt(0);\n\n      if (first >= 0xD800 && first <= 0xDBFF) {\n        var second = string.charCodeAt(1);\n\n        if (second >= 0xDC00 && second <= 0xDFFF) {\n          codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        }\n      }\n\n      return codePoint;\n    } // Skin tone modifiers\n\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(charCode) {\n      return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n    } // This codepoint may change the appearance of the preceding character.\n    // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n    // as a colorful image as compared to a monochrome text variant.\n\n\n    function isVariationSelector(charCode) {\n      return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n    } // The regional indicator symbols are a set of 26 alphabetic Unicode\n    /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n    // two-letter country codes in a way that allows optional special treatment.\n\n\n    function isRegionalCode(string) {\n      var codePoint = getCodePoint(string);\n\n      if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n        return true;\n      }\n\n      return false;\n    } // Some Emoji implementations represent combinations of\n    // two “regional indicator” letters as a single flag symbol.\n\n\n    function isFlagEmoji(string) {\n      return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    } // Regional flags start with a BLACK_FLAG_CODE_POINT\n    // folowed by 5 chars in the TAG range\n    // and end with a CANCEL_TAG_CODE_POINT\n\n\n    function isRegionalFlag(text, index) {\n      var codePoint = getCodePoint(text.substr(index, 2));\n\n      if (codePoint !== BLACK_FLAG_CODE_POINT) {\n        return false;\n      }\n\n      var count = 0;\n      index += 2;\n\n      while (count < 5) {\n        codePoint = getCodePoint(text.substr(index, 2));\n\n        if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n          return false;\n        }\n\n        count += 1;\n        index += 2;\n      }\n\n      return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isFlagEmoji = isFlagEmoji;\n    Font.isRegionalCode = isRegionalCode;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    Font.isRegionalFlag = isRegionalFlag;\n    Font.isVariationSelector = isVariationSelector;\n    Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function SlotManager(animationData) {\n    this.animationData = animationData;\n  }\n\n  SlotManager.prototype.getProp = function (data) {\n    if (this.animationData.slots && this.animationData.slots[data.sid]) {\n      return Object.assign(data, this.animationData.slots[data.sid].p);\n    }\n\n    return data;\n  };\n\n  function slotFactory(animationData) {\n    return new SlotManager(animationData);\n  }\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      var expressionsInterfaces = getExpressionInterfaces();\n\n      if (!expressionsInterfaces) {\n        return;\n      }\n\n      var LayerExpressionInterface = expressionsInterfaces('layer');\n      var EffectsExpressionInterface = expressionsInterfaces('effects');\n      var ShapeExpressionInterface = expressionsInterfaces('shape');\n      var TextExpressionInterface = expressionsInterfaces('text');\n      var CompExpressionInterface = expressionsInterfaces('comp');\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    var expressionsInterfaces = getExpressionInterfaces();\n\n    if (!expressionsInterfaces) {\n      return;\n    }\n\n    var FootageInterface = expressionsInterfaces('footage');\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementById = function (ind) {\n    var i;\n    var len = this.elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i].data.ind === ind) {\n        return this.elements[i];\n      }\n    }\n\n    return null;\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.slotManager = slotFactory(animData);\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  var effectTypes = {\n    TRANSFORM_EFFECT: 'transformEFfect'\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      var mat = new Matrix();\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _localMatMdf: false,\n        _opMdf: false,\n        mat: mat,\n        localMat: mat,\n        localOpacity: 1\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n          }\n        }\n      }\n\n      if (this.finalTransform._matMdf) {\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderLocalTransform: function renderLocalTransform() {\n      if (this.localTransforms) {\n        var i = 0;\n        var len = this.localTransforms.length;\n        this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n\n        if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n          while (i < len) {\n            if (this.localTransforms[i]._mdf) {\n              this.finalTransform._localMatMdf = true;\n            }\n\n            if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n              this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n              this.finalTransform._opMdf = true;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._localMatMdf) {\n          var localMat = this.finalTransform.localMat;\n          this.localTransforms[0].matrix.clone(localMat);\n\n          for (i = 1; i < len; i += 1) {\n            var lmat = this.localTransforms[i].matrix;\n            localMat.multiply(lmat);\n          }\n\n          localMat.multiply(this.finalTransform.mat);\n        }\n\n        if (this.finalTransform._opMdf) {\n          var localOp = this.finalTransform.localOpacity;\n\n          for (i = 0; i < len; i += 1) {\n            localOp *= this.localTransforms[i].opacity * 0.01;\n          }\n\n          this.finalTransform.localOpacity = localOp;\n        }\n      }\n    },\n    searchEffectTransforms: function searchEffectTransforms() {\n      if (this.renderableEffectsManager) {\n        var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n\n        if (transformEffects.length) {\n          this.localTransforms = [];\n          this.finalTransform.localMat = new Matrix();\n          var i = 0;\n          var len = transformEffects.length;\n\n          for (i = 0; i < len; i += 1) {\n            this.localTransforms.push(transformEffects[i]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true,\n      svgLumaHidden: true,\n      offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    if (/firefox/i.test(navigator.userAgent)) {\n      ob.svgLumaHidden = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects$1 = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects$1[type]) {\n        var Effect = registeredEffects$1[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects$1[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  SVGEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect$1(id, effect, countsAsEffect) {\n    registeredEffects$1[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      if (this.data.td) {\n        this.matteMasks = {};\n        var gg = createNS('g');\n        gg.setAttribute('id', this.layerId);\n        gg.appendChild(this.layerElement);\n        layerElementParent = gg;\n        this.globalData.defs.appendChild(gg);\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._localMatMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n      this.searchEffectTransforms();\n    },\n    getMatte: function getMatte(matteType) {\n      // This should not be a common case. But for backward compatibility, we'll create the matte object.\n      // It solves animations that have two consecutive layers marked as matte masks.\n      // Which is an undefined behavior in AE.\n      if (!this.matteMasks) {\n        this.matteMasks = {};\n      }\n\n      if (!this.matteMasks[matteType]) {\n        var id = this.layerId + '_' + matteType;\n        var filId;\n        var fil;\n        var useElement;\n        var gg;\n\n        if (matteType === 1 || matteType === 3) {\n          var masker = createNS('mask');\n          masker.setAttribute('id', id);\n          masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          masker.appendChild(useElement);\n          this.globalData.defs.appendChild(masker);\n\n          if (!featureSupport.maskType && matteType === 1) {\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(useElement);\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (matteType === 2) {\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', id);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          useElement = createNS('use');\n          useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n          maskGrouper.appendChild(useElement);\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n\n        this.matteMasks[matteType] = id;\n      }\n\n      return this.matteMasks[matteType];\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderLocalTransform();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n\n    if (this.assetData && this.assetData.sid) {\n      this.assetData = globalData.slotManager.getProp(this.assetData);\n    }\n\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              mat.multiply(itemData.transformers[k].mProps.v);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n\n    if (data.d && data.d.sid) {\n      data.d = elem.globalData.slotManager.getProp(data.d);\n    }\n\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n    var shouldCombineNext = false;\n    var currentChars = '';\n\n    while (i < len) {\n      shouldCombine = shouldCombineNext;\n      shouldCombineNext = false;\n      charCode = text.charCodeAt(i);\n      currentChars = text.charAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        shouldCombine = true; // It's a potential surrogate pair (this is the High surrogate)\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        if (FontManager.isRegionalFlag(text, i)) {\n          currentChars = text.substr(i, 14);\n        } else {\n          secondCharCode = text.charCodeAt(i + 1); // It's a surrogate pair (this is the Low surrogate)\n\n          if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n            if (FontManager.isModifier(charCode, secondCharCode)) {\n              currentChars = text.substr(i, 2);\n              shouldCombine = true;\n            } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n              currentChars = text.substr(i, 4);\n            } else {\n              currentChars = text.substr(i, 2);\n            }\n          }\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isVariationSelector(charCode)) {\n          shouldCombine = true;\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        shouldCombine = true;\n        shouldCombineNext = true;\n      }\n\n      if (shouldCombine) {\n        charactersArray[charactersArray.length - 1] += currentChars;\n        shouldCombine = false;\n      } else {\n        charactersArray.push(currentChars);\n      }\n\n      i += currentChars.length;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.setCurrentData(dData);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  ITextElement.prototype.validateText = function () {\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    this.validateText();\n\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.findIndexByInd = function (ind) {\n    var i = 0;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ind === ind) {\n        return i;\n      }\n    }\n\n    return -1;\n  };\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n\n      if (elementIndex === -1) {\n        return;\n      }\n\n      if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n        this.buildItem(elementIndex);\n        this.addPendingElement(element);\n      } else {\n        var matteElement = elements[elementIndex];\n        var matteMask = matteElement.getMatte(this.layers[pos].tt);\n        element.setMatte(matteMask);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n            var matteElement = this.elements[elementIndex];\n            var matteMask = matteElement.getMatte(this.layers[i].tt);\n            element.setMatte(matteMask);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height,\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  var lumaLoader = function lumaLoader() {\n    var id = '__lottie_element_luma_buffer';\n    var lumaBuffer = null;\n    var lumaBufferCtx = null;\n    var svg = null; // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n    // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n    // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n    // Naming it solution 2 to mark the extra comment lines.\n\n    /*\r\n    var svgString = [\r\n      '<svg xmlns=\"http://www.w3.org/2000/svg\">',\r\n      '<filter id=\"' + id + '\">',\r\n      '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0, ',\r\n      '0.3, 0.3, 0.3, 0, 0',\r\n      '\"/>',\r\n      '</filter>',\r\n      '</svg>',\r\n    ].join('');\r\n    var blob = new Blob([svgString], { type: 'image/svg+xml' });\r\n    var url = URL.createObjectURL(blob);\r\n    */\n\n    function createLumaSvgFilter() {\n      var _svg = createNS('svg');\n\n      var fil = createNS('filter');\n      var matrix = createNS('feColorMatrix');\n      fil.setAttribute('id', id);\n      matrix.setAttribute('type', 'matrix');\n      matrix.setAttribute('color-interpolation-filters', 'sRGB');\n      matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n      fil.appendChild(matrix);\n\n      _svg.appendChild(fil);\n\n      _svg.setAttribute('id', id + '_svg');\n\n      if (featureSupport.svgLumaHidden) {\n        _svg.style.display = 'none';\n      }\n\n      return _svg;\n    }\n\n    function loadLuma() {\n      if (!lumaBuffer) {\n        svg = createLumaSvgFilter();\n        document.body.appendChild(svg);\n        lumaBuffer = createTag('canvas');\n        lumaBufferCtx = lumaBuffer.getContext('2d'); // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n        lumaBufferCtx.filter = 'url(#' + id + ')';\n        lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n        lumaBufferCtx.fillRect(0, 0, 1, 1);\n      }\n    }\n\n    function getLuma(canvas) {\n      if (!lumaBuffer) {\n        loadLuma();\n      }\n\n      lumaBuffer.width = canvas.width;\n      lumaBuffer.height = canvas.height; // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n\n      lumaBufferCtx.filter = 'url(#' + id + ')';\n      return lumaBuffer;\n    }\n\n    return {\n      load: loadLuma,\n      get: getLuma\n    };\n  };\n\n  function createCanvas(width, height) {\n    if (featureSupport.offscreenCanvas) {\n      return new OffscreenCanvas(width, height);\n    }\n\n    var canvas = createTag('canvas');\n    canvas.width = width;\n    canvas.height = height;\n    return canvas;\n  }\n\n  var assetLoader = function () {\n    return {\n      loadLumaCanvas: lumaLoader.load,\n      getLumaCanvas: lumaLoader.get,\n      createCanvas: createCanvas\n    };\n  }();\n\n  var registeredEffects = {};\n\n  function CVEffects(elem) {\n    var i;\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  CVEffects.prototype.getEffects = function (type) {\n    var i;\n    var len = this.filters.length;\n    var effects = [];\n\n    for (i = 0; i < len; i += 1) {\n      if (this.filters[i].type === type) {\n        effects.push(this.filters[i]);\n      }\n    }\n\n    return effects;\n  };\n\n  function registerEffect(id, effect) {\n    registeredEffects[id] = {\n      effect: effect\n    };\n  }\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  var operationsMap = {\n    1: 'source-in',\n    2: 'source-out',\n    3: 'source-in',\n    4: 'source-out'\n  };\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      // If the layer is masked we will use two buffers to store each different states of the drawing\n      // This solution is not ideal for several reason. But unfortunately, because of the recursive\n      // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n      // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n      // It might be challenging because the layer most likely is transformed in some way\n      if (this.data.tt >= 1) {\n        this.buffers = [];\n        var canvasContext = this.globalData.canvasContext;\n        var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas);\n        var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n        this.buffers.push(bufferCanvas2);\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          assetLoader.loadLumaCanvas();\n        }\n      }\n\n      this.canvasContext = this.globalData.canvasContext;\n      this.transformCanvas = this.globalData.transformCanvas;\n      this.renderableEffectsManager = new CVEffects(this);\n      this.searchEffectTransforms();\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n      this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    clearCanvas: function clearCanvas(canvasContext) {\n      canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n    },\n    prepareLayer: function prepareLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[0];\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx); // on the first buffer we store the current state of the global drawing\n\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // The next four lines are to clear the canvas\n        // TODO: Check if there is a way to clear the canvas without resetting the transform\n\n        this.currentTransform = this.canvasContext.getTransform();\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform);\n      }\n    },\n    exitLayer: function exitLayer() {\n      if (this.data.tt >= 1) {\n        var buffer = this.buffers[1]; // On the second buffer we store the current state of the global drawing\n        // that only contains the content of this layer\n        // (if it is a composition, it also includes the nested layers)\n\n        var bufferCtx = buffer.getContext('2d');\n        this.clearCanvas(bufferCtx);\n        bufferCtx.drawImage(this.canvasContext.canvas, 0, 0); // We clear the canvas again\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n        this.clearCanvas(this.canvasContext);\n        this.canvasContext.setTransform(this.currentTransform); // We draw the mask\n\n        var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n        mask.renderFrame(true); // We draw the second buffer (that contains the content of this layer)\n\n        this.canvasContext.setTransform(1, 0, 0, 1, 0, 0); // If the mask is a Luma matte, we need to do two extra painting operations\n        // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n\n        if (this.data.tt >= 3 && !document._isProxy) {\n          // We copy the painted mask to a buffer that has a color matrix filter applied to it\n          // that applies the rgb values to the alpha channel\n          var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n          var lumaBufferCtx = lumaBuffer.getContext('2d');\n          lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n          this.clearCanvas(this.canvasContext); // we repaint the context with the mask applied to it\n\n          this.canvasContext.drawImage(lumaBuffer, 0, 0);\n        }\n\n        this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n        this.canvasContext.drawImage(buffer, 0, 0); // We finally draw the first buffer (that contains the content of the global drawing)\n        // We use destination-over to draw the global drawing below the current layer\n\n        this.canvasContext.globalCompositeOperation = 'destination-over';\n        this.canvasContext.drawImage(this.buffers[0], 0, 0);\n        this.canvasContext.setTransform(this.currentTransform); // We reset the globalCompositeOperation to source-over, the standard type of operation\n\n        this.canvasContext.globalCompositeOperation = 'source-over';\n      }\n    },\n    renderFrame: function renderFrame(forceRender) {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      if (this.data.td === 1 && !forceRender) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderLocalTransform();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.prepareLayer();\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n      this.exitLayer();\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd); // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n\n          renderer.ctxLineWidth(currentStyle.wi); // ctx.lineWidth = currentStyle.wi;\n\n          renderer.ctxLineCap(currentStyle.lc); // ctx.lineCap = currentStyle.lc;\n\n          renderer.ctxLineJoin(currentStyle.lj); // ctx.lineJoin = currentStyle.lj;\n\n          renderer.ctxMiterLimit(currentStyle.ml || 0); // ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd); // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            // ctx.stroke();\n            renderer.ctxStroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          // ctx.fill(currentStyle.r);\n          this.globalData.renderer.ctxFill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    this.globalData.renderer.ctxLineCap('butt'); // ctx.lineCap = 'butt';\n\n    this.globalData.renderer.ctxLineJoin('miter'); // ctx.lineJoin = 'miter';\n\n    this.globalData.renderer.ctxMiterLimit(4); // ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n    var renderer = this.globalData.renderer;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          renderer.save();\n          renderer.ctxTransform(renderedLetter.p);\n          renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              renderer.ctxFillStyle(renderedLetter.fc);\n              lastFill = renderedLetter.fc; // ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            renderer.ctxFillStyle(this.values.fill); // ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxFill(); // this.globalData.canvasContext.fill();\n          /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              renderer.ctxLineWidth(renderedLetter.sw); // ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            renderer.ctxLineWidth(this.values.sWidth); // ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              renderer.ctxStrokeStyle(renderedLetter.sc); // ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            renderer.ctxStrokeStyle(this.values.stroke); // ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          renderer.ctxStroke(); // this.globalData.canvasContext.stroke();\n          /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    // var ctx = this.canvasContext;\n    this.globalData.renderer.ctxFillStyle(this.data.sc); // ctx.fillStyle = this.data.sc;\n\n    this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh); // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n    //\n  };\n\n  function CanvasRendererBase() {}\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n  };\n\n  CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n    this.canvasContext.fillStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n    this.canvasContext.strokeStyle = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n    this.canvasContext.lineWidth = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineCap = function (value) {\n    this.canvasContext.lineCap = value;\n  };\n\n  CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n    this.canvasContext.lineJoin = value;\n  };\n\n  CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n    this.canvasContext.miterLimit = value;\n  };\n\n  CanvasRendererBase.prototype.ctxFill = function (rule) {\n    this.canvasContext.fill(rule);\n  };\n\n  CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n    this.canvasContext.fillRect(x, y, w, h);\n  };\n\n  CanvasRendererBase.prototype.ctxStroke = function () {\n    this.canvasContext.stroke();\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function () {\n    this.canvasContext.save();\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.restore(actionFlag);\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.contextData.setContext(this.canvasContext);\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (width) {\n      elementWidth = width;\n      elementHeight = height;\n      this.canvasContext.canvas.width = elementWidth;\n      this.canvasContext.canvas.height = elementHeight;\n    } else {\n      if (this.animationItem.wrapper && this.animationItem.container) {\n        elementWidth = this.animationItem.wrapper.offsetWidth;\n        elementHeight = this.animationItem.wrapper.offsetHeight;\n      } else {\n        elementWidth = this.canvasContext.canvas.width;\n        elementHeight = this.canvasContext.canvas.height;\n      }\n\n      this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n      this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CanvasContext() {\n    this.opacity = -1;\n    this.transform = createTypedArray('float32', 16);\n    this.fillStyle = '';\n    this.strokeStyle = '';\n    this.lineWidth = '';\n    this.lineCap = '';\n    this.lineJoin = '';\n    this.miterLimit = '';\n    this.id = Math.random();\n  }\n\n  function CVContextData() {\n    this.stack = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    var i;\n    var len = 15;\n\n    for (i = 0; i < len; i += 1) {\n      var canvasContext = new CanvasContext();\n      this.stack[i] = canvasContext;\n    }\n\n    this._length = len;\n    this.nativeContext = null;\n    this.transformMat = new Matrix();\n    this.currentOpacity = 1; //\n\n    this.currentFillStyle = '';\n    this.appliedFillStyle = ''; //\n\n    this.currentStrokeStyle = '';\n    this.appliedStrokeStyle = ''; //\n\n    this.currentLineWidth = '';\n    this.appliedLineWidth = ''; //\n\n    this.currentLineCap = '';\n    this.appliedLineCap = ''; //\n\n    this.currentLineJoin = '';\n    this.appliedLineJoin = ''; //\n\n    this.appliedMiterLimit = '';\n    this.currentMiterLimit = '';\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.stack[i] = new CanvasContext();\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.stack[this.cArrPos].opacity = 1;\n  };\n\n  CVContextData.prototype.restore = function (forceRestore) {\n    this.cArrPos -= 1;\n    var currentContext = this.stack[this.cArrPos];\n    var transform = currentContext.transform;\n    var i;\n    var arr = this.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = transform[i];\n    }\n\n    if (forceRestore) {\n      this.nativeContext.restore();\n      var prevStack = this.stack[this.cArrPos + 1];\n      this.appliedFillStyle = prevStack.fillStyle;\n      this.appliedStrokeStyle = prevStack.strokeStyle;\n      this.appliedLineWidth = prevStack.lineWidth;\n      this.appliedLineCap = prevStack.lineCap;\n      this.appliedLineJoin = prevStack.lineJoin;\n      this.appliedMiterLimit = prevStack.miterLimit;\n    }\n\n    this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n\n    if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n      this.nativeContext.globalAlpha = currentContext.opacity;\n      this.currentOpacity = currentContext.opacity;\n    }\n\n    this.currentFillStyle = currentContext.fillStyle;\n    this.currentStrokeStyle = currentContext.strokeStyle;\n    this.currentLineWidth = currentContext.lineWidth;\n    this.currentLineCap = currentContext.lineCap;\n    this.currentLineJoin = currentContext.lineJoin;\n    this.currentMiterLimit = currentContext.miterLimit;\n  };\n\n  CVContextData.prototype.save = function (saveOnNativeFlag) {\n    if (saveOnNativeFlag) {\n      this.nativeContext.save();\n    }\n\n    var props = this.cTr.props;\n\n    if (this._length <= this.cArrPos) {\n      this.duplicate();\n    }\n\n    var currentStack = this.stack[this.cArrPos];\n    var i;\n\n    for (i = 0; i < 16; i += 1) {\n      currentStack.transform[i] = props[i];\n    }\n\n    this.cArrPos += 1;\n    var newStack = this.stack[this.cArrPos];\n    newStack.opacity = currentStack.opacity;\n    newStack.fillStyle = currentStack.fillStyle;\n    newStack.strokeStyle = currentStack.strokeStyle;\n    newStack.lineWidth = currentStack.lineWidth;\n    newStack.lineCap = currentStack.lineCap;\n    newStack.lineJoin = currentStack.lineJoin;\n    newStack.miterLimit = currentStack.miterLimit;\n  };\n\n  CVContextData.prototype.setOpacity = function (value) {\n    this.stack[this.cArrPos].opacity = value;\n  };\n\n  CVContextData.prototype.setContext = function (value) {\n    this.nativeContext = value;\n  };\n\n  CVContextData.prototype.fillStyle = function (value) {\n    if (this.stack[this.cArrPos].fillStyle !== value) {\n      this.currentFillStyle = value;\n      this.stack[this.cArrPos].fillStyle = value;\n    }\n  };\n\n  CVContextData.prototype.strokeStyle = function (value) {\n    if (this.stack[this.cArrPos].strokeStyle !== value) {\n      this.currentStrokeStyle = value;\n      this.stack[this.cArrPos].strokeStyle = value;\n    }\n  };\n\n  CVContextData.prototype.lineWidth = function (value) {\n    if (this.stack[this.cArrPos].lineWidth !== value) {\n      this.currentLineWidth = value;\n      this.stack[this.cArrPos].lineWidth = value;\n    }\n  };\n\n  CVContextData.prototype.lineCap = function (value) {\n    if (this.stack[this.cArrPos].lineCap !== value) {\n      this.currentLineCap = value;\n      this.stack[this.cArrPos].lineCap = value;\n    }\n  };\n\n  CVContextData.prototype.lineJoin = function (value) {\n    if (this.stack[this.cArrPos].lineJoin !== value) {\n      this.currentLineJoin = value;\n      this.stack[this.cArrPos].lineJoin = value;\n    }\n  };\n\n  CVContextData.prototype.miterLimit = function (value) {\n    if (this.stack[this.cArrPos].miterLimit !== value) {\n      this.currentMiterLimit = value;\n      this.stack[this.cArrPos].miterLimit = value;\n    }\n  };\n\n  CVContextData.prototype.transform = function (props) {\n    this.transformMat.cloneFromProps(props); // Taking the last transform value from the stored stack of transforms\n\n    var currentTransform = this.cTr; // Applying the last transform value after the new transform to respect the order of transformations\n\n    this.transformMat.multiply(currentTransform); // Storing the new transformed value in the stored transform\n\n    currentTransform.cloneFromProps(this.transformMat.props);\n    var trProps = currentTransform.props; // Applying the new transform to the canvas\n\n    this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CVContextData.prototype.opacity = function (op) {\n    var currentOpacity = this.stack[this.cArrPos].opacity;\n    currentOpacity *= op < 0 ? 0 : op;\n\n    if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n      if (this.currentOpacity !== op) {\n        this.nativeContext.globalAlpha = op;\n        this.currentOpacity = op;\n      }\n\n      this.stack[this.cArrPos].opacity = currentOpacity;\n    }\n  };\n\n  CVContextData.prototype.fill = function (rule) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fill(rule);\n  };\n\n  CVContextData.prototype.fillRect = function (x, y, w, h) {\n    if (this.appliedFillStyle !== this.currentFillStyle) {\n      this.appliedFillStyle = this.currentFillStyle;\n      this.nativeContext.fillStyle = this.appliedFillStyle;\n    }\n\n    this.nativeContext.fillRect(x, y, w, h);\n  };\n\n  CVContextData.prototype.stroke = function () {\n    if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n      this.appliedStrokeStyle = this.currentStrokeStyle;\n      this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n    }\n\n    if (this.appliedLineWidth !== this.currentLineWidth) {\n      this.appliedLineWidth = this.currentLineWidth;\n      this.nativeContext.lineWidth = this.appliedLineWidth;\n    }\n\n    if (this.appliedLineCap !== this.currentLineCap) {\n      this.appliedLineCap = this.currentLineCap;\n      this.nativeContext.lineCap = this.appliedLineCap;\n    }\n\n    if (this.appliedLineJoin !== this.currentLineJoin) {\n      this.appliedLineJoin = this.currentLineJoin;\n      this.nativeContext.lineJoin = this.appliedLineJoin;\n    }\n\n    if (this.appliedMiterLimit !== this.currentMiterLimit) {\n      this.appliedMiterLimit = this.currentMiterLimit;\n      this.nativeContext.miterLimit = this.appliedMiterLimit;\n    }\n\n    this.nativeContext.stroke();\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || '',\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n\n    if (this.renderConfig.clearCanvas) {\n      this.ctxTransform = this.contextData.transform.bind(this.contextData);\n      this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n      this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n      this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n      this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n      this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n      this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n      this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n      this.ctxFill = this.contextData.fill.bind(this.contextData);\n      this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n      this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n      this.save = this.contextData.save.bind(this.contextData);\n    }\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    this.validateText();\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i] && this.elements[i].destroy) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      },\n      runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$2(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    var _lottieGlobal = {};\n    initialize$2(BMMath);\n\n    function resetFrame() {\n      _lottieGlobal = {};\n    }\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof$1(a);\n\n      if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof$1(a);\n\n      var tOfB = _typeof$1(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      // Bail out if we don't want expressions\n      function noOp(_value) {\n        return _value;\n      }\n\n      if (!elem.globalData.renderConfig.runExpressions) {\n        return noOp;\n      }\n\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n    ob.resetFrame = resetFrame;\n    return ob;\n  }();\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n    ob.resetFrame = ExpressionManager.resetFrame;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (!_sourceText || stringValue !== _sourceText.value) {\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n\n            Object.defineProperty(_sourceText, 'style', {\n              get: function get() {\n                return {\n                  fillColor: elem.textProperty.currentData.fc\n                };\n              }\n            });\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  var interfaces = {\n    layer: LayerExpressionInterface,\n    effects: EffectsExpressionInterface,\n    comp: CompExpressionInterface,\n    shape: ShapeExpressionInterface,\n    text: TextExpressionInterface,\n    footage: FootageInterface\n  };\n\n  function getInterface(type) {\n    return interfaces[type] || null;\n  }\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n    this.linearFilter = feColorMatrix;\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  function TransformEffect() {}\n\n  TransformEffect.prototype.init = function (effectsManager) {\n    this.effectsManager = effectsManager;\n    this.type = effectTypes.TRANSFORM_EFFECT;\n    this.matrix = new Matrix();\n    this.opacity = -1;\n    this._mdf = false;\n    this._opMdf = false;\n  };\n\n  TransformEffect.prototype.renderFrame = function (forceFrame) {\n    this._opMdf = false;\n    this._mdf = false;\n\n    if (forceFrame || this.effectsManager._mdf) {\n      var effectElements = this.effectsManager.effectElements;\n      var anchor = effectElements[0].p.v;\n      var position = effectElements[1].p.v;\n      var isUniformScale = effectElements[2].p.v === 1;\n      var scaleHeight = effectElements[3].p.v;\n      var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n      var skew = effectElements[5].p.v;\n      var skewAxis = effectElements[6].p.v;\n      var rotation = effectElements[7].p.v;\n      this.matrix.reset();\n      this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n      this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n      this.matrix.rotate(-rotation * degToRads);\n      this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n      this.matrix.translate(position[0], position[1], 0);\n      this._mdf = true;\n\n      if (this.opacity !== effectElements[8].p.v) {\n        this.opacity = effectElements[8].p.v;\n        this._opMdf = true;\n      }\n    }\n  };\n\n  function SVGTransformEffect(_, filterManager) {\n    this.init(filterManager);\n  }\n\n  extendPrototype([TransformEffect], SVGTransformEffect);\n\n  function CVTransformEffect(effectsManager) {\n    this.init(effectsManager);\n  }\n\n  extendPrototype([TransformEffect], CVTransformEffect);\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n  ShapeModifiers.registerModifier('zz', ZigZagModifier);\n  ShapeModifiers.registerModifier('op', OffsetPathModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  setExpressionInterfaces(getInterface);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect$1(20, SVGTintFilter, true);\n  registerEffect$1(21, SVGFillFilter, true);\n  registerEffect$1(22, SVGStrokeEffect, false);\n  registerEffect$1(23, SVGTritoneFilter, true);\n  registerEffect$1(24, SVGProLevelsFilter, true);\n  registerEffect$1(25, SVGDropShadowEffect, true);\n  registerEffect$1(28, SVGMatte3Effect, false);\n  registerEffect$1(29, SVGGaussianBlurEffect, true);\n  registerEffect$1(35, SVGTransformEffect, false);\n  registerEffect(35, CVTransformEffect);\n\n  return lottie;\n\n}));\n","import lottie from 'lottie-web';\r\n\r\nfunction iconAnimation () {\r\n    const cards = document.querySelectorAll('.js-animate-icon');\r\n\r\n    function initIcon(item) {\r\n        const svgContainer = item.querySelector('.js-animate-container');\r\n\r\n        function animateIcon(animation) {        \r\n            animation.play();\r\n        }\r\n    \r\n        function destroyAnimation(item, animation) {\r\n            item.addEventListener('mouseenter', () => {\r\n                animation.stop();\r\n                animation.play();\r\n            });\r\n        }\r\n        \r\n        const animation = lottie.loadAnimation({\r\n            container: svgContainer,\r\n            renderer: 'svg',\r\n            loop: false,\r\n            autoplay: false,\r\n            path: '/Assets/images/data.json',\r\n        });\r\n\r\n        item.addEventListener('mouseenter', () => {\r\n            animateIcon(animation);\r\n        });\r\n        item.addEventListener('mouseleave', () => {\r\n            destroyAnimation(item, animation);\r\n        });\r\n    }\r\n\r\n    cards.forEach(card => {\r\n        initIcon(card);\r\n    })\r\n}\r\n\r\nexport default iconAnimation;\r\n","function animationObserver () {\r\n    const animationElements = document.querySelectorAll('[data-observe-animation]');\r\n\r\n    function animate(entries, observer) {\r\n        entries.forEach(function(entry) {\r\n            if (entry.isIntersecting) {\r\n                if (entry.target.dataset.observeAnimationDelay !== undefined) {\r\n                    setTimeout(() => {\r\n                        entry.target.querySelector('.feature-img__wrapper').classList.add('is-visible');\r\n                    }, 500);\r\n                } else if (entry.target.dataset.observeAnimationDelayLast !== undefined) {\r\n                    setTimeout(() => {\r\n                        entry.target.querySelector('.feature-img__wrapper').classList.add('is-visible');\r\n                    }, 800);\r\n                } else {\r\n                    entry.target.querySelector('.feature-img__wrapper').classList.add('is-visible');\r\n                }\r\n\r\n                observer.unobserve(entry.target);\r\n            }\r\n        });\r\n    }\r\n\r\n    if (animationElements) {\r\n        const observer = new IntersectionObserver(animate, {\r\n            threshold: 0.5\r\n        });\r\n\r\n        for(let i = 0; i < animationElements.length; i+=1) {\r\n            observer.observe(animationElements[i]);\r\n        }\r\n    }\r\n}\r\n\r\nexport default animationObserver;\r\n","export default {\r\n    getNewsItems(queryObj) {\r\n        return fetch('/umbraco/surface/vacancyoverview/getvacancyitems/', {\r\n            method: 'POST',\r\n            credentials: 'same-origin',\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify(queryObj)\r\n        }).then((resp) => resp.text()).then((data) => {\r\n            return data;\r\n        });\r\n    },\r\n}\r\n","import api from '../api/vacancies';\r\n\r\nconst vacancyOverviewModule = {\r\n    loadNewsButton: null,\r\n    newsContainer: null,\r\n    newsTypeFilters: null,\r\n    newsTypeFiltersMobile: null,\r\n    newsTargetFilter: null,\r\n    query: {\r\n        p: 1,\r\n        targetGroup: '',\r\n        type: '',\r\n        pageId: '',\r\n        culture: '',\r\n        sort: true,\r\n        lastLoaded: false\r\n    },\r\n    init: () => {\r\n        vacancyOverviewModule.newsContainer = document.querySelector('[data-module-vacancies]');\r\n        vacancyOverviewModule.loadNewsButton = document.querySelector('[data-module-vacancies-load]');\r\n        vacancyOverviewModule.newsTypeFilters = document.querySelectorAll('[data-module-vacancies-filter-type]');\r\n        vacancyOverviewModule.newsTypeFiltersMobile = document.querySelector('[data-module-vacancies-filter-type-mobile]');\r\n        vacancyOverviewModule.newsTargetFilter = document.querySelector('[data-module-vacancies-filter-target]');\r\n        vacancyOverviewModule.query.pageId = document.querySelector('[data-module-pageid]').getAttribute('data-module-pageid');\r\n        vacancyOverviewModule.query.culture = document.querySelector('[data-module-culture]').getAttribute('data-module-culture');\r\n\r\n        if (vacancyOverviewModule.loadNewsButton) {\r\n            vacancyOverviewModule.loadNewsButton.addEventListener('click', () => {\r\n                vacancyOverviewModule.loadNewsItems(true);\r\n            });\r\n\r\n            vacancyOverviewModule.checkLastItem();\r\n        }\r\n\r\n        if (document.querySelector('.js-showold') !== null) {\r\n            document.querySelector('.js-showold').addEventListener('click', () => {\r\n                vacancyOverviewModule.query.sort = false;\r\n                vacancyOverviewModule.query.lastLoaded = document.querySelector('[data-last]') ? true : false;\r\n                vacancyOverviewModule.updateQueryUrl();\r\n                vacancyOverviewModule.loadNewsItems(false);\r\n            });\r\n        }\r\n\r\n        if (document.querySelector('.js-shownew') !== null) {\r\n            document.querySelector('.js-shownew').addEventListener('click', () => {\r\n                vacancyOverviewModule.query.sort = true;\r\n                vacancyOverviewModule.query.lastLoaded = document.querySelector('[data-last]') ? true : false;\r\n                vacancyOverviewModule.updateQueryUrl();\r\n                vacancyOverviewModule.loadNewsItems(false);\r\n            });\r\n        }\r\n\r\n        if (vacancyOverviewModule.newsTypeFilters) {\r\n            vacancyOverviewModule.newsTypeFilters.forEach((filter) => {\r\n                filter.addEventListener('click', (e) => {\r\n                    vacancyOverviewModule.newsTypeFilters.forEach(filter => filter.classList.remove('news__filter--active'));\r\n                    filter.classList.add('news__filter--active');\r\n                    vacancyOverviewModule.setActiveTypeFilter(filter.getAttribute('data-module-vacancies-filter-type'));\r\n                });\r\n            });\r\n        }\r\n\r\n        if (vacancyOverviewModule.newsTypeFiltersMobile) {\r\n            vacancyOverviewModule.newsTypeFiltersMobile.addEventListener('change', (e) => {\r\n                vacancyOverviewModule.setActiveTypeFilter(e.target.value);\r\n            });\r\n        }\r\n\r\n        if (vacancyOverviewModule.newsTargetFilter) {\r\n            vacancyOverviewModule.newsTargetFilter.addEventListener('change', (e) => {\r\n                vacancyOverviewModule.setActiveTargetFilter(e.target.value);\r\n            });\r\n        }\r\n    },\r\n    loadNewsItems: (loadMore) => {\r\n        vacancyOverviewModule.toggleDisableLoadButton();\r\n\r\n        if (loadMore) {\r\n            vacancyOverviewModule.query.p += 1;\r\n        }\r\n\r\n        api.getNewsItems(vacancyOverviewModule.query).then((responseHtml) => {\r\n            if(responseHtml && responseHtml.length) {\r\n                if (loadMore) {\r\n                    vacancyOverviewModule.newsContainer.insertAdjacentHTML('beforeend', responseHtml);\r\n                } else {\r\n                    vacancyOverviewModule.newsContainer.innerHTML = responseHtml;\r\n                }\r\n\r\n                vacancyOverviewModule.toggleDisableLoadButton();\r\n                vacancyOverviewModule.updateQueryUrl();\r\n                vacancyOverviewModule.checkLastItem();\r\n            } else {\r\n                vacancyOverviewModule.newsContainer.innerHTML = responseHtml;\r\n                vacancyOverviewModule.toggleDisableLoadButton();\r\n                vacancyOverviewModule.hideLoadButton();\r\n            }\r\n        });\r\n    },\r\n    setActiveTypeFilter: (type) => {\r\n        vacancyOverviewModule.query.p = 1;\r\n        vacancyOverviewModule.query.type = type;\r\n        vacancyOverviewModule.loadNewsItems(false);\r\n    },\r\n    setActiveTargetFilter: (target) => {\r\n        vacancyOverviewModule.query.p = 1;\r\n        vacancyOverviewModule.query.targetGroup = target;\r\n        vacancyOverviewModule.loadNewsItems(false);\r\n    },\r\n    updateQueryUrl: () => {\r\n        const url = `?p=${vacancyOverviewModule.query.p}${vacancyOverviewModule.query.targetGroup.length ? `&targetGroup=${vacancyOverviewModule.query.targetGroup}` : ''}${vacancyOverviewModule.query.type.length ? `&type=${vacancyOverviewModule.query.type}` : ''}${!vacancyOverviewModule.query.sort ? `&sort=${vacancyOverviewModule.query.sort}` : ''}`;\r\n        history.pushState(vacancyOverviewModule.query, '', `${document.location.pathname}${url}`);\r\n    },\r\n    checkLastItem: () => {\r\n        if (document.querySelector('[data-last]')) {\r\n            vacancyOverviewModule.hideLoadButton();\r\n        } else {\r\n            vacancyOverviewModule.showLoadButton();\r\n        }\r\n    },\r\n    hideLoadButton: () => {\r\n        if (!vacancyOverviewModule.loadNewsButton.classList.contains('d-none')) {\r\n            vacancyOverviewModule.loadNewsButton.classList.add('d-none');\r\n        }\r\n    },\r\n    showLoadButton: () => {\r\n        if (vacancyOverviewModule.loadNewsButton.classList.contains('d-none')) {\r\n            vacancyOverviewModule.loadNewsButton.classList.remove('d-none');\r\n        }\r\n    },\r\n    toggleDisableLoadButton: () => {\r\n        if (vacancyOverviewModule.loadNewsButton.getAttribute('disabled')) {\r\n            vacancyOverviewModule.loadNewsButton.removeAttribute('disabled');\r\n            vacancyOverviewModule.loadNewsButton.classList.remove('is-loading');\r\n        } else {\r\n            vacancyOverviewModule.loadNewsButton.setAttribute('disabled', 'disabled');\r\n            vacancyOverviewModule.loadNewsButton.classList.add('is-loading');\r\n        }\r\n    }\r\n}\r\n\r\nexport default vacancyOverviewModule;\r\n","export default {\r\n    getNewsItems(queryObj) {\r\n        return fetch('/umbraco/surface/newsoverview/getnewsitems/', {\r\n            method: 'POST',\r\n            credentials: 'same-origin',\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n            },\r\n            body: JSON.stringify(queryObj)\r\n        }).then((resp) => resp.text()).then((data) => {\r\n            return data;\r\n        });\r\n    },\r\n}\r\n","import api from '../api/news';\r\n\r\nconst newsOverviewModule = {\r\n    loadNewsButton: null,\r\n    newsContainer: null,\r\n    newsTypeFilters: null,\r\n    newsTypeFiltersMobile: null,\r\n    newsTargetFilter: null,\r\n    query: {\r\n        p: 1,\r\n        targetGroup: '',\r\n        type: '',\r\n        tag: '',\r\n        pageId: '',\r\n        culture: '',\r\n        sort: true\r\n    },\r\n    init: () => {\r\n        newsOverviewModule.newsContainer = document.querySelector('[data-module-news]');\r\n        newsOverviewModule.loadNewsButton = document.querySelector('[data-module-news-load]');\r\n        newsOverviewModule.newsTypeFilters = document.querySelectorAll('[data-module-news-filter-type]');\r\n        newsOverviewModule.newsTypeFiltersMobile = document.querySelector('[data-module-news-filter-type-mobile]');\r\n        newsOverviewModule.newsTargetFilter = document.querySelector('[data-module-news-filter-target]');\r\n        newsOverviewModule.query.pageId = document.querySelector('[data-module-pageid]').getAttribute('data-module-pageid');\r\n        newsOverviewModule.query.culture = document.querySelector('[data-module-culture]').getAttribute('data-module-culture');\r\n\r\n        if (newsOverviewModule.loadNewsButton) {\r\n            newsOverviewModule.loadNewsButton.addEventListener('click', () => {\r\n                newsOverviewModule.loadNewsItems(true);\r\n            });\r\n\r\n            newsOverviewModule.checkLastItem();\r\n        }\r\n\r\n        if (newsOverviewModule.newsTypeFilters) {\r\n            newsOverviewModule.newsTypeFilters.forEach((filter) => {\r\n                filter.addEventListener('click', (e) => {\r\n                    newsOverviewModule.newsTypeFilters.forEach(filter => filter.classList.remove('news__filter--active'));\r\n                    filter.classList.add('news__filter--active');\r\n                    newsOverviewModule.setActiveTypeFilter(filter.getAttribute('data-module-news-filter-type'));\r\n                });\r\n            });\r\n        }\r\n\r\n        if (newsOverviewModule.newsTypeFiltersMobile) {\r\n            newsOverviewModule.newsTypeFiltersMobile.addEventListener('change', (e) => {\r\n                newsOverviewModule.setActiveTypeFilter(e.target.value);\r\n            });\r\n        }\r\n\r\n        if (newsOverviewModule.newsTargetFilter) {\r\n            newsOverviewModule.newsTargetFilter.addEventListener('change', (e) => {\r\n                newsOverviewModule.setActiveTargetFilter(e.target.value);\r\n            });\r\n        }\r\n    },\r\n    loadNewsItems: (loadMore) => {\r\n        newsOverviewModule.toggleDisableLoadButton();\r\n\r\n        if (loadMore) {\r\n            newsOverviewModule.query.p += 1;\r\n        }\r\n\r\n        api.getNewsItems(newsOverviewModule.query).then((responseHtml) => {\r\n            if(responseHtml && responseHtml.length) {\r\n                if (loadMore) {\r\n                    newsOverviewModule.newsContainer.insertAdjacentHTML('beforeend', responseHtml);\r\n                } else {\r\n                    newsOverviewModule.newsContainer.innerHTML = responseHtml;\r\n                }\r\n\r\n                newsOverviewModule.toggleDisableLoadButton();\r\n                newsOverviewModule.updateQueryUrl();\r\n                newsOverviewModule.checkLastItem();\r\n            } else {\r\n                newsOverviewModule.newsContainer.innerHTML = responseHtml;\r\n                newsOverviewModule.toggleDisableLoadButton();\r\n                newsOverviewModule.hideLoadButton();\r\n            }\r\n        });\r\n    },\r\n    setActiveTypeFilter: (type) => {\r\n        newsOverviewModule.query.p = 1;\r\n        newsOverviewModule.query.type = type;\r\n        newsOverviewModule.loadNewsItems(false);\r\n    },\r\n    setActiveTagFilter: (tag) => {\r\n        newsOverviewModule.query.p = 1;\r\n        newsOverviewModule.query.tag = tag;\r\n        newsOverviewModule.loadNewsItems(false);\r\n    },\r\n    setActiveTargetFilter: (target) => {\r\n        newsOverviewModule.query.p = 1;\r\n        newsOverviewModule.query.targetGroup = target;\r\n        newsOverviewModule.loadNewsItems(false);\r\n    },\r\n    updateQueryUrl: () => {\r\n        const url = `?p=${newsOverviewModule.query.p}${newsOverviewModule.query.targetGroup.length ? `&targetGroup=${newsOverviewModule.query.targetGroup}` : ''}${newsOverviewModule.query.type.length ? `&type=${newsOverviewModule.query.type}` : ''}`;\r\n        history.pushState(newsOverviewModule.query, '', `${document.location.pathname}${url}`);\r\n    },\r\n    checkLastItem: () => {\r\n        if (document.querySelector('[data-last]')) {\r\n            newsOverviewModule.hideLoadButton();\r\n        } else {\r\n            newsOverviewModule.showLoadButton();\r\n        }\r\n    },\r\n    hideLoadButton: () => {\r\n        if (!newsOverviewModule.loadNewsButton.classList.contains('d-none')) {\r\n            newsOverviewModule.loadNewsButton.classList.add('d-none');\r\n        }\r\n    },\r\n    showLoadButton: () => {\r\n        if (newsOverviewModule.loadNewsButton.classList.contains('d-none')) {\r\n            newsOverviewModule.loadNewsButton.classList.remove('d-none');\r\n        }\r\n    },\r\n    toggleDisableLoadButton: () => {\r\n        if (newsOverviewModule.loadNewsButton.getAttribute('disabled')) {\r\n            newsOverviewModule.loadNewsButton.removeAttribute('disabled');\r\n            newsOverviewModule.loadNewsButton.classList.remove('is-loading');\r\n        } else {\r\n            newsOverviewModule.loadNewsButton.setAttribute('disabled', 'disabled');\r\n            newsOverviewModule.loadNewsButton.classList.add('is-loading');\r\n        }\r\n    }\r\n}\r\n\r\nexport default newsOverviewModule;","\r\nfunction calcHeight () {\r\n    const wrapperElements = document.querySelectorAll('[data-calc-height]');\r\n    const mobileBreakpoint = 992;\r\n    let screenWidth = document.body.getBoundingClientRect().width;\r\n    const heights = [];\r\n\r\n    function calculateHeight(wrapper) {\r\n        const items = wrapper.querySelectorAll('[data-calc-height-item]');\r\n\r\n        items.forEach(item => {\r\n            heights.push(item.offsetHeight);\r\n        });\r\n\r\n        const maxHeight = Math.max.apply(null, heights);\r\n\r\n        if(wrapper.dataset.calcMobile !== undefined && screenWidth <= mobileBreakpoint) {\r\n            wrapper.style.height = maxHeight + 45 + 'px';\r\n        } else {\r\n            wrapper.style.height = maxHeight + 'px';\r\n        }\r\n    }\r\n\r\n    function initElements() {\r\n        if (wrapperElements) {\r\n            for(let i = 0; i < wrapperElements.length; i+=1) {\r\n                calculateHeight(wrapperElements[i]);\r\n            }\r\n        }\r\n    }\r\n\r\n    initElements();\r\n\r\n    window.addEventListener('resize', function() {\r\n        screenWidth = document.body.getBoundingClientRect().width;\r\n\r\n        initElements();\r\n    });\r\n}\r\n\r\nexport default calcHeight;\r\n","const mobileNav = () => {\r\n    const trigger = document.querySelector('[data-mobile-menu-trigger]');\r\n    const menuWrapper = document.querySelector('[data-mobile-wrapper]');\r\n    const subMenuTriggers = document.querySelectorAll('[data-mobile-nav-dropdown-trigger]');\r\n    const subMenus = document.querySelectorAll('[data-mobile-nav-dropdown]');\r\n\r\n    trigger.addEventListener('click', () => {\r\n        if (trigger.classList.contains('is-active')) {\r\n            trigger.classList.remove('is-active');\r\n            menuWrapper.classList.remove('is-active');\r\n            subMenus.forEach(sub => {\r\n                sub.classList.remove('is-active');\r\n            });\r\n            document.body.classList.remove('no-scroll');\r\n            document.documentElement.classList.remove('no-scroll');\r\n        } else {\r\n            trigger.classList.add('is-active');\r\n            menuWrapper.classList.add('is-active');\r\n            document.documentElement.classList.add('no-scroll');\r\n            document.body.classList.add('no-scroll');\r\n        }\r\n    });\r\n\r\n    subMenuTriggers.forEach(trigger => {\r\n        const subMenu = trigger.parentElement.querySelector('[data-mobile-nav-dropdown]');\r\n\r\n        trigger.addEventListener('click', () => {\r\n            subMenu.classList.add('is-active');\r\n        });\r\n\r\n        const backButton = trigger.parentElement.querySelector('[data-mobile-nav-back]');\r\n        backButton.addEventListener('click', () => {\r\n            subMenu.classList.remove('is-active');\r\n        });\r\n    });\r\n}\r\n\r\nexport default mobileNav;","import './helpers';\r\nimport fInitCookie from 'js-cookie';\r\nimport stickyHeader from './modules/sticky-header';\r\nimport navModule from './modules/nav';\r\nimport accordionModule from './modules/accordion';\r\nimport videoModule from './modules/video';\r\nimport contentSlider from './modules/slider';\r\nimport iconAnimation from './modules/usp-icon';\r\nimport animationObserver from './modules/observer';\r\nimport vacancyOverviewModule from './modules/vacancies';\r\nimport newsOverviewModule from './modules/news';\r\nimport calcHeight from './modules/calcHeight';\r\nimport mobileNav from './modules/mobile-menu';\r\n\r\n(function fPageLoad() {\r\n    if (document.querySelectorAll('.js-cookie').length) { fInitCookie(); }\r\n    window.addEventListener('load', () => {\r\n        stickyHeader();\r\n        navModule();\r\n        accordionModule.init();\r\n\r\n        if (document.querySelectorAll('.js-video-open').length) { videoModule(); }\r\n        if (document.querySelectorAll('.js-slider').length) { contentSlider(); }\r\n        if (document.querySelectorAll('.js-animate-icon').length) { iconAnimation(); }\r\n        if (document.querySelectorAll('[data-observe-animation]').length) { animationObserver(); }\r\n        if (document.querySelectorAll('[data-module-vacancies]').length) { vacancyOverviewModule.init(); }\r\n        if (document.querySelectorAll('[data-module-news]').length) { newsOverviewModule.init(); }\r\n        if (document.querySelectorAll('[data-mobile-menu-trigger]').length) { mobileNav(); }\r\n        if (document.querySelectorAll('[data-calc-height]').length) { calcHeight(); }\r\n    });\r\n}());\r\n"],"names":["s","el","arr","item","target","i","source","key","value","converter","defaultAttributes","set","name","attributes","stringifiedAttributes","attributeName","get","cookies","jar","parts","found","api","oHeader","oHeaderOffset","fSwitchState","navDropdowns","navToggle","offscreenNav","openDropdown","toggle","dropdown","closeDropdown","toggleNavigation","e","toggleDropdown","initNavigation","toggles","event","aAccordions","fInitAccordion","oAccordion","aTriggers","bOpenOne","b","oParent","oCollapse","oCollapseHeight","oChevron","oCurrent","oCurrentCollapse","a","self","subClass","superClass","_reverting","_bigNum","_windowExists","_win","_doc","scope","property","message","suppress","obj","targets","harnessPlugin","v","names","func","start","operator","end","toSearch","toFind","l","tween","animation","time","suppressEvents","force","n","p","defaults","excludeDuration","base","toMerge","_mergeDeep","excluding","copy","vars","parent","a1","a2","match","child","firstProp","lastProp","sortBy","prev","t","next","onlyIfParentHasAutoRemove","totalTime","_hasNoPausedAncestors","tTime","cycleDuration","whole","parentTime","timeline","position","skipChecks","trigger","_parentPlayheadIsBeforeStart","_ref","_ref2","data","prevRatio","ratio","repeatDelay","pt","iteration","prevIteration","prevTime","duration","skipUncache","leavePlayhead","repeat","dur","totalProgress","_parsePosition","percentAnimation","labels","recent","clippedDuration","offset","isPercent","type","params","isLegacy","varsIndex","irVars","min","max","nonEmpty","ar","leaveStrings","accumulator","_accumulator","ease","from","cache","isDecimal","ratios","axis","ratioX","ratioY","distances","originX","originY","x","y","d","j","wrapAt","raw","snapTo","isArray","radius","is2D","closest","dx","dy","roundingIncrement","returnFunction","_len","functions","_key","f","unit","wrapper","index","wrap","range","wrapYoyo","total","nums","inMin","inMax","outMin","outMax","inRange","outRange","interpolate","progress","mutate","isString","master","interpolators","il","fromTime","backward","distance","label","executeLazyFirst","callback","prevContext","context","result","config","isFunc","Plugin","instanceDefaults","statics","h","m1","m2","toHSL","forceAlpha","r","g","wasHSL","values","c","orderMatchData","colors","shell","color","combined","_getTime","_lagThreshold","_adjustedLag","_startTime","_lastUpdate","_gap","_nextTime","_listeners","_id","_req","_raf","_self","_delta","_i","_tick","elapsed","manual","overlap","dispatch","frame","fps","threshold","adjustedLag","_fps","once","prioritize","split","val","parsedVal","open","close","nested","_propagateYoyoEase","isYoyo","defaultEase","easeIn","easeOut","easeInOut","lowercaseName","_configElastic","amplitude","period","p1","p2","p3","_configBack","overshoot","power","n1","n2","n3","steps","immediateStart","harness","Animation","_proto","_totalTime","includeRepeats","wrapRepeats","prevIsReverting","rawTime","includeDelay","atTime","onFulfilled","resolve","_resolve","_then","_Animation","Timeline","_this","_proto2","fromVars","toVars","stagger","onCompleteAll","onCompleteAllParams","tDur","crossingStart","prevPaused","pauseTween","timeScale","prevStart","yoyo","rewinding","doesWrap","adjustedTime","_this2","tweens","timelines","ignoreBeforeTime","id","animations","_totalTime2","props","onlyActive","parsedTargets","isGlobalTime","children","tl","endTime","_vars","startAt","_onStart","onStartParams","immediateRender","initted","fromPosition","toPosition","afterTime","beforeTime","amount","adjustLabels","soft","includeLabels","prop","setter","stringFilter","funcParam","matchIndex","startNums","endNum","chunk","startNum","hasRandom","modifier","optional","currentValue","parsedStart","plugin","ptLookup","_initTween","lazy","onUpdate","runBackwards","yoyoEase","keyframes","autoRevert","prevStartAt","fullTargets","autoOverwrite","cleanVars","hasPriority","gsData","harnessVars","overwritten","startIsRelative","skipRecursion","ptCache","rootPT","lookup","propertyAliases","aliases","allProps","easeEach","_Animation2","Tween","skipInherit","_this3","_this3$vars","delay","overwrite","scrollTrigger","curTarget","staggerFunc","staggerVarsToMerge","kf","_proto3","isNegative","killingTargets","propTweenLookup","firstPT","overwrittenProps","curLookup","curOverwriteProps","hasNonDependentRemaining","pt2","first","last","PropTween","change","renderer","priority","_proto4","matches","queries","conditions","anyMatch","toggled","Context","_proto5","prevSelector","revert","matchMedia","_this4","o","MatchMedia","_proto6","cond","mq","active","_len2","args","_key2","uncache","getter","format","setters","_merge2","_ref3","effect","plugins","extendTimeline","pluginName","includeDelayedCalls","toAdd","modifiers","temp","_saveStyle","isNotCSS","style","properties","saver","ns","_getComputedProperty","skipPrefixFallback","cs","element","preferPrefix","_getBBoxHack","swapIfPossible","svg","oldParent","oldSibling","oldCSS","bbox","attributesArray","bounds","first2Chars","beginning","onlySetAtEnd","_convertToUnit","curValue","curUnit","horizontal","isRootSVG","measureProperty","toPixels","toPercent","px","isSVG","startValues","startValue","endValue","endUnit","startUnit","endValues","clearTransforms","matrixString","force2D","matrix","nextSibling","addedToDOM","origin","originIsAbsolute","smooth","matrixArray","pluginToAddPropTweensTo","xOriginOld","yOriginOld","xOffsetOld","yOffsetOld","tx","ty","originSplit","xOrigin","yOrigin","determinant","invertedScaleX","deg","z","scaleX","scaleY","rotation","rotationX","rotationY","skewX","skewY","perspective","angle","cos","sin","a12","a22","t1","t2","t3","a13","a23","a33","a42","a43","a32","xPercent","yPercent","transformPerspective","force3D","zOrigin","transforms","use3D","xOffset","yOffset","forceCSS","a11","a21","cap","finalValue","direction","startCache","exclude","endCache","side","specialProp","relative","isTransformRelated","transformPropTween","inlineProps","positionAndScale","others","all","scriptTag","firstScriptTag","rect","scrollLeft","scrollTop","createPlayer","youtubeId","animateModalIn","modal","backdrop","sourceDimensions","videoWidth","videoHeight","fixModal","gsap","animateModalOut","video","iframe","destroyModal","createModal","button","videoHeader","backgroundVideo","currentVideo","modalClose","videoFrame","global","factory","module","this","EvEmitter","proto","eventName","listener","events","listeners","onceEvents","onceListeners","window","getStyleSize","num","measurements","getZeroSize","size","measurement","getSize","elem","isBorderBox","paddingWidth","paddingHeight","marginWidth","marginHeight","borderWidth","borderHeight","styleWidth","styleHeight","utils","div","ary","selector","method","elems","ffElems","childElems","_class","methodName","timeoutName","onDocReady","readyState","str","$1","$2","console","WidgetClass","namespace","dataAttr","dataAttrElems","jQuery","attr","options","error","instance","require$$0","cellClassName","Cell","Slide","beginMargin","endMargin","cellAlign","cell","lastCell","lastMargin","slideWidth","previousX","is3d","translateX","firstSlide","positionX","beforeGap","afterGap","cells","gap","shift","cellShift","dragForce","require$$1","require$$2","require$$3","require$$4","require$$5","_Flickity","animatePrototype","getComputedStyle","GUID","instances","Flickity","queryElement","resize","watchCSS","rightToLeft","opts","cellElems","slider","cellElem","cellX","startCell","sideOffset","renderX","positionValue","slide","canCellFit","groupCells","number","percent","percentMatch","groupWidth","cellAlignShorthands","shorthand","height","beforeGapX","lastIndex","afterGapX","wrapAround","gapWidth","gapX","cellIndex","increment","contentWidth","beginBound","endBound","emitArgs","$event","jQEvent","unidraggerEvents","_emitEvent","clickedCell","isWrap","isInstant","prevIndex","selectedIndex","slideableWidth","length","wrapIndex","delta","backWrapDelta","forewardWrapDelta","initialIndex","cellSlide","adjCount","len","slideIndex","selectedElement","activeElement","handler","leftMethod","rightMethod","jQueryBridget","jq","Unidragger","startEvent","activeEvents","bindMethod","touchAction","handle","touch","changedTouch","cursorNodes","clickTypes","pointer","isCursorNode","isClickType","isOkayElement","moveVector","isMouseup","isTouchStart","isTouchPointer","isFocusNode","getScrollPosition","dragX","originBound","freeScroll","restingX","positiveResting","negativeResting","minDistance","condition","dist","minDist","isWrapAround","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","arrowShape","title","path","pathMovements","getArrowMovements","shape","x0","x1","x2","x3","y1","y2","prevDirection","nextDirection","disabledIndex","isEnabled","PageDots","slidesLength","count","newDots","dot","Player","autoPlay","onTick","isPageHidden","getCellsFragment","fragment","isAppend","insertCellElement","endCells","minCellIndex","changedCellIndex","prevSelectedElem","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","getCellLazyImages","img","LazyLoader","cellAttr","cellSrcAttr","cellSrcsetAttr","onComplete","src","srcset","className","$","makeArray","ImagesLoaded","onAlways","queryElem","elementNodeTypes","nodeType","childImgs","reURL","url","loadingImage","LoadingImage","background","Background","onProgress","image","jqMethod","isLoaded","parentNode","imagesLoaded","onImagesLoadedProgress","require$$6","require$$7","sliders","screenWidth","isInViewport","bounding","sliderNextPrev","control","handleSliderControlState","controls","numberOfSliders","lastSlide","bindSliderControlEvents","flickitySlider","initSliderNavigation","sliderControls","animateImageTimeline","imageOne","imageTwo","sliderReadyCallback","slideEl","itemHeight","imgWrapper","handleTimer","sliderTimer","sliderTimerProgress","timing","step","initSlider","destroy","cellsButtonGroup","cellsButtons","previousSelectedButton","selectedButton","sameHeightItems","mobileBreakpoint","flag","sources","destination","sourcePrototype","object","prototype","ProxyFunction","AudioController","audioFactory","audio","rateValue","assetPath","createRegularArray","createTypedArrayFactory","propertyNames","tOfVal","absArr","currentTime","frameMultiplier","totalLoops","currentLoop","firstFrame","totalFrames","nativeError","_count","q","hsv","colorMap","hex","_counterId","processes","workerFn","workerInstance","workerProxy","_workerSelf","createWorker","fn","blob","setupWorker","dataFunctionManager","completeLayers","layers","comps","layerData","jLen","k","kLen","maskProps","convertPathsToAbsoluteValues","findCompLayers","completeShapes","completeText","completeChars","chars","assets","findComp","comp","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","checkPathProperties","pathData","checkColors","iterateShapes","shapes","checkShapes","completeClosingShapes","completeData","moduleOb","formatResponse","xhr","contentTypeHeader","loadAsset","fullPath","errorCallback","response","err","process","createProcess","onError","loadAnimation","processId","loadData","completeAnimation","anim","proxyImage","canvas","ctx","imageLoaded","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","intervalId","box","createImageData","ob","createImgData","createFootageData","footageData","loadAssets","cb","setPath","setAssetsPath","getAsset","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","callbacks","parsePayloadLines","payload","lines","keys","line","keysCount","_markers","markers","_marker","markerData","registerComposition","_thisProjectFunction","animType","RendererClass","wrapperAttributes","loop","autoplay","prerender","newLayers","expressionsPlugin","segments","segment","segmentPath","animData","width","_width","_height","markerName","marker","isFrame","numValue","nextValue","_isComplete","init","pendingFrame","forceFlag","isLooping","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","setupAnimation","getRegisteredAnimations","lenAnims","addPlayingCount","activate","setSpeed","setDirection","play","resume","nowTime","elapsedTime","pause","goToAndStop","stop","togglePause","searchAnimations","standalone","animElements","body","freeze","unfreeze","setVolume","mute","unmute","getBezierEasing","beziers","nm","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","mY1","mY2","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","_double","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","create","math","pointOnLine2D","y3","det1","pointOnLine3D","z1","z2","z3","dist1","dist2","dist3","diffDist","getBezierLength","pt1","pt3","pt4","curveSegments","ptCoord","perc","addedLength","ptDistance","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","closed","pathV","pathO","pathI","lengths","totalLength","BezierData","PointData","partial","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","percents","initPos","lengthPos","lPerc","dir","getPointInSegment","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","frameNum","caching","offsetTime","newValue","iterationIndex","keyData","nextKeyData","keyframeMetadata","fnc","nextKeyTime","keyTime","ind","distanceInLine","segmentPerc","outX","outY","inX","inY","keyValue","quatStart","quatEnd","out","ax","ay","az","aw","bx","by","bz","bw","omega","cosom","sinom","scale0","scale1","quat","qx","qy","qz","qw","heading","attitude","bank","c1","c2","c3","s1","s2","s3","w","renderResult","multipliedValue","effectFunction","mult","container","to","ti","arrLen","getProp","pos","replace","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePath","clone","cloned","newShapeCollection","shapeCollection","initFrame","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","lastFrame","resetShape","shapesEqual","shape1","shape2","setVValue","processEffectsSequence","ShapeProperty","addEffect","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","p0","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","rad","roundness","perimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","v0","v1","round","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","_cos","_sin","_tan","_rnd","reset","rotate","mCos","mSin","rotateX","rotateY","rotateZ","shear","sx","sy","skew","skewFromAxis","scale","sz","setTransform","m","translate","tz","transform","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","o2","_p","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","o1","multiply","matrixProps","isIdentity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","inverseMatrix","inversePoint","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointArray","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_a","_b","_c","_d","_e","_f","href","prefix","variable","pair","registerModifier","getModifier","shapeLength","totalModifierLength","shapeSegments","segmentOb","shapeS","shapeE","pathsData","_isFirstFrame","_s","shapePaths","totalShapeLength","localShapeCollection","edges","newShapesData","lastShapeInCollection","lastShape","newPaths","newShape","shapeSegment","currentLengthData","segmentCount","segmentLength","centerPoint","pathLength","clonedPath","defaultVector","applyToMatrix","mat","_mdf","processKeys","forceRender","frameRate","v2","py","precalculateMatrix","autoOrient","addDynamicProperty","TransformProperty","getTransformProperty","pMatrix","rMatrix","sMatrix","inv","elemsData","elements","newElements","renderFlag","items","itemsTransform","cont","hasReloaded","copies","group","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","currentV","currentI","currentO","closerV","newPosPerc","rd","singleRoot","linearize","coeffx","coeffy","denom","tcusp","square","root","p10","p11","p20","p21","bez","depth","tolerance","intersections","maxRecursion","d1s","d2s","other","nextIndex","start1","end1","start2","end2","v3","v4","outputBezier","outAmplitude","inAmplitude","angO","angI","vector","rot","rotatedVector","cur","prevPoint","nextPoint","pVector","frequency","pointType","prevDist","nextDist","p1a","p1b","p2b","p2a","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","tan","intersection","intersect","outa","outb","flex","left","right","mid","inputBezier","multiSegments","lastSeg","multiSegment","fontData","styles","fWeight","fStyle","styleName","maxWaitingTime","emptyChar","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","family","node","checkLoadedFonts","loadedCount","createHelper","def","engine","helper","fontProps","tHelper","tCanvasHelper","measure","text","addFonts","defs","fontArr","_pendingFonts","shouldLoadFont","loadedSelector","sc","addChars","getCharData","_char","measureText","_char2","fontName","doubleSize","singleSize","getFontByName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","fontPrototype","component","blendModeEnums","mode","effects","effectItem","eff","expressionsInterfaces","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","effectsInterface","blendModeValue","globalData","isVisible","FootageInterface","timeRemapped","totalVolume","volumeValue","layer","pInterface","parentName","hierarchy","pathValue","fontsContainer","finalMat","localMat","lmat","localOp","transformEffects","ptNew","currentMasks","layerId","expansor","feMorph","maskType","maskRef","filterID","mask","isFirstFrame","pathNodes","viewData","pathString","pathShapeValue","createFilter","createAlphaToLuminanceFilter","filId","skipCoordinates","fil","feColorMatrix","filterManager","Effect","countsAsEffect","layerElementParent","gg","cp","clipId","cpGroup","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","_prototype","shouldBreakProcess","transformers","level","styleOb","cLength","diff","pathElement","gradientId","gfill","stops","maskElement","opacityId","maskId","opFill","mProps","op","_o","shapeString","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","lLen","lvl","paths","iterations","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","tempShapes","areAnimated","elementData","GradientConstructor","transformProperty","ownTransformers","shapeProperty","itemsData","prevViewData","render","ownStyles","ownModifiers","currentTransform","processedPos","animatedContent","sw","fc","updated","_finalValue","currentIndex","textKeys","charactersArray","shouldCombine","shouldCombineNext","currentChars","fontManager","letters","newLineFlag","anchorGrouping","currentSize","currentPos","currentLine","lineWidths","lineWidth","maxLineWidth","trackingOffset","boxWidth","boxHeight","currentHeight","finalText","lastSpaceIndex","uncollapsedSpaces","currentChar","animators","animatorData","letterData","based","indexes","currentInd","newInd","newData","dData","_canResize","_fontValue","floor","TextSelectorPropFactory","easer","tot","smoothness","newCharsFlag","divisor","getTextSelectorProp","animatorProps","defaultData","textAnimatorAnimatables","textData","renderType","lettersChangedFlag","alignment","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","partialLength","tanAngle","yOff","firstLine","animatorSelector","letterValue","offf","xPathPos","yPathPos","initPathPos","initSegmentInd","initPointInd","elemOpacity","letterSw","letterSc","letterFc","letterM","letterP","letterO","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","shapeStr","_fontSize","lineNumber","colorData","textArray","textContents","currentTextContent","shapeItem","usesGlyphs","tSpan","singleShape","tElement","justify","textContent","cachedSpansLength","childSpan","glyphElement","glyph","textBox","renderedLetters","renderedLetter","textSpan","elementIndex","matteElement","matteMask","nextElement","animationItem","ariaLabel","titleElement","titleId","descElement","descId","sequence","lumaBuffer","lumaBufferCtx","createLumaSvgFilter","_svg","loadLuma","getLuma","hasMasks","canvasContext","bufferCanvas","bufferCanvas2","buffer","bufferCtx","forceRealStack","transformsManager","styledShape","shouldRender","ownTransforms","parentTransform","groupTransform","nodes","currentStyle","isMain","shapeNodes","groupTransformMat","grd","opacity","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","imgW","imgH","imgRel","canvasRel","widthCrop","heightCrop","par","rule","actionFlag","containerStyle","elementWidth","elementHeight","elementRel","animationRel","fillType","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","trProps","currentOpacity","transformedElementStyle","matrixValue","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","b2ac","widthProperty","kfw","tempBoundingBox","changed","shapeStyle","shapeTransform","innerElemStyle","textColor","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","perspectiveStyle","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","newDOMElement","nextDOMElement","nextLayer","tmpDOMElement","perspectiveElem","threeDContainerData","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_thisLayerFunction","chunks","digits","rngname","startdenom","significance","overflow","nodecrypto","seedrandom","seed","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","is_math_call","state","keylen","me","typ","stringseed","smear","browser","BMMath","tOfV","tOfA","lenA","retArr","tOfB","lenB","mm","arr1","arr2","vec","tMin","tMax","value1","value2","_tMin","rnd","rndm","inTangents","outTangents","arrPlaceholder","inVertexPoint","outVertexPoint","_value","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","elem1","elem2","fVec","pitch","yaw","val1","val2","iKey","lenKey","obKey","fr","framesPerSecond","initExpressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskInterface","MaskManager","maskManager","_masksInterfaces","maskFunction","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","_thisFunction","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","transformMat","toWorldVec","toWorld","fromWorldVec","fromWorld","applyPoint","invertPoint","fromComp","sampleImage","transformInterface","_registerMaskInterface","_registerEffectsInterface","anchorPointDescriptor","interfaceFunction","parentPropertyGroup","propertyName","propertyGroup","_propertyGroup","createEffectsInterface","effectElements","effectsData","createGroupInterface","groupInterface","createValueInterface","expressionProperty","view","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","transformInterfaceFactory","content","_dashPropertyGroup","dashOb","addPropertyToDashOb","_interfaceFunction","parentGroupWrapper","_sourceText","stringValue","outlineInterfaceFactory","currentPropertyName","currentProperty","searchProperty","propertyNameIndex","dataInterfaceFactory","searchExpressions","getValueAtTime","getSpeedAtTime","speed","getVelocityAtTime","velocity","getStaticValueAtTime","setGroupProperty","loopOut","durationFlag","currentFrame","lastKeyFrame","firstKeyFrame","ret","initV","endV","current","repeats","lastValue","nextLastValue","loopIn","firstValue","nextFirstValue","samples","endFrame","sampleFrequency","sampleValue","getTransformValueAtTime","anchor","skewAxis","rotationZ","orientation","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","accumulatedLength","initIndex","endIndex","vectorType","xLength","yLength","magnitude","unitVector","propertyGetShapeProp","trims","isKeyframed","hasExpressions","createMergeNode","resultId","ins","feMerge","feMergeNode","filter","colorBlack","colorWhite","elemChildren","groupPath","dasharrayValue","lineLength","units","feComponentTransfer","feFuncR","feFuncG","feFuncB","color1","color2","color3","tableR","tableG","tableB","inputBlack","inputWhite","gamma","outputBlack","outputWhite","table","colorValue","outputDelta","inputDelta","globalFilterSize","filterSize","feGaussianBlur","feOffset","feFlood","feComposite","col","filterElem","symbolId","nextChild","useElem","symbol","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","effectsManager","forceFrame","isUniformScale","scaleHeight","scaleWidth","_","cards","initIcon","svgContainer","animateIcon","destroyAnimation","card","animationElements","animate","entries","observer","entry","queryObj","resp","loadMore","responseHtml","tag","wrapperElements","heights","calculateHeight","maxHeight","initElements","menuWrapper","subMenuTriggers","subMenus","sub","subMenu","fPageLoad","fInitCookie","stickyHeader","videoModule"],"mappings":"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","x_google_ignoreList":[1,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27]}