@usecapsule/core-components 3.4.0 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. package/dist/capsule/capsule.esm.js +1 -1
  2. package/dist/capsule/capsule.esm.js.map +1 -1
  3. package/dist/capsule/p-9e64a60e.entry.js +2 -0
  4. package/dist/capsule/p-9e64a60e.entry.js.map +1 -0
  5. package/dist/capsule/p-afbb1e6f.entry.js +20 -0
  6. package/dist/capsule/p-afbb1e6f.entry.js.map +1 -0
  7. package/dist/capsule/{p-32cdf894.entry.js → p-b96e357a.entry.js} +2 -2
  8. package/dist/capsule/p-b96e357a.entry.js.map +1 -0
  9. package/dist/capsule/p-cfc382c0.entry.js +2 -0
  10. package/dist/capsule/{p-de2a16e4.entry.js → p-d165df27.entry.js} +2 -2
  11. package/dist/capsule/{p-41bc3c58.entry.js → p-f0cd0482.entry.js} +2 -2
  12. package/dist/cjs/capsule.cjs.js +1 -1
  13. package/dist/cjs/cpsl-alert_34.cjs.entry.js +72 -63
  14. package/dist/cjs/cpsl-alert_34.cjs.entry.js.map +1 -1
  15. package/dist/cjs/cpsl-col.cjs.entry.js +1 -1
  16. package/dist/cjs/cpsl-grid.cjs.entry.js +2 -2
  17. package/dist/cjs/cpsl-hero.cjs.entry.js +4 -3
  18. package/dist/cjs/cpsl-hero.cjs.entry.js.map +1 -1
  19. package/dist/cjs/cpsl-nav-button.cjs.entry.js +40 -0
  20. package/dist/cjs/cpsl-nav-button.cjs.entry.js.map +1 -0
  21. package/dist/cjs/cpsl-row.cjs.entry.js +1 -1
  22. package/dist/cjs/index-65f57499.js +4 -4
  23. package/dist/cjs/loader.cjs.js +1 -1
  24. package/dist/collection/assets/icons/folder.svg +5 -0
  25. package/dist/collection/assets/icons/hero-plus-circle-capsule.svg +14 -0
  26. package/dist/collection/assets/icons/hero-plus-circle.svg +7 -0
  27. package/dist/collection/assets/icons/index.js +4 -1
  28. package/dist/collection/assets/icons/index.js.map +1 -1
  29. package/dist/collection/assets/icons/plus-circle.svg +1 -1
  30. package/dist/collection/collection-manifest.json +1 -1
  31. package/dist/collection/components/cpsl-alert/cpsl-alert.js +1 -1
  32. package/dist/collection/components/cpsl-animation/cpsl-animation.js +44 -104
  33. package/dist/collection/components/cpsl-animation/cpsl-animation.js.map +1 -1
  34. package/dist/collection/components/cpsl-app-bar/cpsl-app-bar.js +3 -3
  35. package/dist/collection/components/cpsl-avatar/cpsl-avatar.js +1 -1
  36. package/dist/collection/components/cpsl-button/cpsl-button.js +2 -2
  37. package/dist/collection/components/cpsl-button-group/cpsl-button-group.js +1 -1
  38. package/dist/collection/components/cpsl-card/cpsl-card.js +1 -1
  39. package/dist/collection/components/cpsl-checkbox/cpsl-checkbox.js +1 -1
  40. package/dist/collection/components/cpsl-code-input/cpsl-code-input.js +2 -2
  41. package/dist/collection/components/cpsl-col/cpsl-col.js +1 -1
  42. package/dist/collection/components/cpsl-divider/cpsl-divider.js +1 -1
  43. package/dist/collection/components/cpsl-drawer/cpsl-drawer.js +2 -2
  44. package/dist/collection/components/cpsl-dropdown/cpsl-dropdown.js +1 -1
  45. package/dist/collection/components/cpsl-file-upload/cpsl-file-upload.js +1 -1
  46. package/dist/collection/components/cpsl-grid/cpsl-grid.js +2 -2
  47. package/dist/collection/components/cpsl-hero/cpsl-hero.css +29 -2
  48. package/dist/collection/components/cpsl-hero/cpsl-hero.js +6 -5
  49. package/dist/collection/components/cpsl-hero/cpsl-hero.js.map +1 -1
  50. package/dist/collection/components/cpsl-icon/cpsl-icon.js +1 -1
  51. package/dist/collection/components/cpsl-input/cpsl-input.js +1 -1
  52. package/dist/collection/components/cpsl-nav-button/cpsl-nav-button.css +107 -0
  53. package/dist/collection/components/cpsl-nav-button/cpsl-nav-button.js +175 -0
  54. package/dist/collection/components/cpsl-nav-button/cpsl-nav-button.js.map +1 -0
  55. package/dist/collection/components/cpsl-nav-button-group/cpsl-nav-button-group.css +0 -42
  56. package/dist/collection/components/cpsl-nav-button-group/cpsl-nav-button-group.js +2 -50
  57. package/dist/collection/components/cpsl-nav-button-group/cpsl-nav-button-group.js.map +1 -1
  58. package/dist/collection/components/cpsl-overlay/cpsl-overlay.js +1 -1
  59. package/dist/collection/components/cpsl-pagination/cpsl-pagination.js +1 -1
  60. package/dist/collection/components/cpsl-pill/cpsl-pill.js +1 -1
  61. package/dist/collection/components/cpsl-popover/cpsl-popover.js +2 -2
  62. package/dist/collection/components/cpsl-qr-code/cpsl-qr-code.js +1 -1
  63. package/dist/collection/components/cpsl-radio/cpsl-radio.js +1 -1
  64. package/dist/collection/components/cpsl-row/cpsl-row.js +1 -1
  65. package/dist/collection/components/cpsl-select/cpsl-select.js +2 -2
  66. package/dist/collection/components/cpsl-select/cpsl-select.js.map +1 -1
  67. package/dist/collection/components/cpsl-select-item/cpsl-select-item.js +1 -1
  68. package/dist/collection/components/cpsl-slide-button/cpsl-slide-button.js +3 -3
  69. package/dist/collection/components/cpsl-spinner/cpsl-spinner.js +2 -2
  70. package/dist/collection/components/cpsl-switch/cpsl-switch.js +1 -1
  71. package/dist/collection/components/cpsl-tab/cpsl-tab.js +1 -1
  72. package/dist/collection/components/cpsl-table/cpsl-table.js +1 -1
  73. package/dist/collection/components/cpsl-tabs/cpsl-tabs.js +1 -1
  74. package/dist/collection/components/cpsl-text/cpsl-text.js +1 -1
  75. package/dist/collection/components/cpsl-tile-button/cpsl-tile-button.js +2 -2
  76. package/dist/esm/capsule.js +1 -1
  77. package/dist/esm/cpsl-alert_34.entry.js +72 -63
  78. package/dist/esm/cpsl-alert_34.entry.js.map +1 -1
  79. package/dist/esm/cpsl-col.entry.js +1 -1
  80. package/dist/esm/cpsl-grid.entry.js +2 -2
  81. package/dist/esm/cpsl-hero.entry.js +4 -3
  82. package/dist/esm/cpsl-hero.entry.js.map +1 -1
  83. package/dist/esm/cpsl-nav-button.entry.js +36 -0
  84. package/dist/esm/cpsl-nav-button.entry.js.map +1 -0
  85. package/dist/esm/cpsl-row.entry.js +1 -1
  86. package/dist/esm/index-91db3414.js +4 -4
  87. package/dist/esm/loader.js +1 -1
  88. package/dist/types/assets/icons/index.d.ts +3 -0
  89. package/dist/types/components/cpsl-animation/cpsl-animation.d.ts +0 -15
  90. package/dist/types/components/cpsl-hero/cpsl-hero.d.ts +2 -2
  91. package/dist/types/components/cpsl-nav-button/cpsl-nav-button.d.ts +43 -0
  92. package/dist/types/components/cpsl-nav-button-group/cpsl-nav-button-group.d.ts +0 -6
  93. package/dist/types/components.d.ts +85 -33
  94. package/package.json +2 -3
  95. package/dist/capsule/p-0e558c7f.entry.js +0 -10
  96. package/dist/capsule/p-0e558c7f.entry.js.map +0 -1
  97. package/dist/capsule/p-0e6007ae.entry.js +0 -20
  98. package/dist/capsule/p-0e6007ae.entry.js.map +0 -1
  99. package/dist/capsule/p-32cdf894.entry.js.map +0 -1
  100. package/dist/capsule/p-3b042fd1.entry.js +0 -2
  101. package/dist/cjs/cpsl-animation.cjs.entry.js +0 -20133
  102. package/dist/cjs/cpsl-animation.cjs.entry.js.map +0 -1
  103. package/dist/collection/components/cpsl-animation/cpsl-animation.css +0 -17
  104. package/dist/esm/cpsl-animation.entry.js +0 -20129
  105. package/dist/esm/cpsl-animation.entry.js.map +0 -1
  106. /package/dist/capsule/{p-3b042fd1.entry.js.map → p-cfc382c0.entry.js.map} +0 -0
  107. /package/dist/capsule/{p-de2a16e4.entry.js.map → p-d165df27.entry.js.map} +0 -0
  108. /package/dist/capsule/{p-41bc3c58.entry.js.map → p-f0cd0482.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["navigator","global","factory","module","exports","this","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","value","getLocationHref","createTag","type","document","createElement","extendPrototype","sources","destination","i","len","length","sourcePrototype","prototype","attr","Object","hasOwnProperty","call","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","push","pause","resume","setRate","rateValue","createAudio","assetPath","window","Howl","src","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","createSizedArray","Array","apply","_typeof$6","obj","Symbol","iterator","_typeof","constructor","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","test","userAgent","bmPow","Math","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","max","bmMin","min","BMMath","propertyNames","random","abs","val","tOfVal","absArr","defaultCurveSegments","degToRads","PI","roundCorner","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","createElementID","_count","createID","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","hex","toString","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","createNS","createElementNS","_typeof$5","dataManager","_counterId","processes","workerFn","workerInstance","workerProxy","onmessage","postMessage","path","data","_workerSelf","createWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","setupWorker","workerStart","e","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeChars","chars","assets","findComp","id","comp","__used","JSON","parse","stringify","ks","it","o","checkVersion","minimum","animVersionString","animVersion","split","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","loadAsset","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","status","open","join","error","send","load","payload","animation","event","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","box","getBBox","_imageLoaded","clearInterval","bind","createImageData","addEventListener","ob","setAttributeNS","_elementHelper","append","appendChild","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","lines","keys","line","keysCount","trim","Error","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","_","__","name","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","key","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","undefined","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","round","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","setTimeout","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","Number","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","end","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","index","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","first","searchAnimations","standalone","animElements","concat","slice","getElementsByClassName","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","str","replace","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","_p","_mSampleValues","_precomputed","get","x","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","pooling","_double","double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","create","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","dist1","dist2","dist3","diffDist","getBezierLength","pt1","pt2","pt3","pt4","curveSegments","ptCoord","perc","ptDistance","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","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","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","offsetTime","newValue","propType","pv","iterationIndex","lastIndex","keyframes","keyData","nextKeyData","keyframeMetadata","keyframesMetadata","fnc","nextKeyTime","keyTime","endValue","to","ti","ind","__fnct","y","n","distanceInLine","segmentPerc","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","quaternionToEuler","slerp","out","ax","ay","az","aw","bx","by","bz","bw","omega","cosom","sinom","scale0","scale1","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","w","z","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","rad","roundness","perimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_a","_b","_c","_d","_e","_f","_typeof$3","lottie","setLocation","href","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","useWebWorker","setIDPrefix","__getFactory","version","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","scripts","myScript","define","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","TrimModifier","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","shapeSegments","segmentOb","shapeS","shapeE","releasePathsData","processShapes","_s","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShapeInCollection","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","PuckerAndBloatModifier","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","RepeaterModifier","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","hasReloaded","copies","ceil","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","RoundCornersModifier","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","derivative","tangentAngle","normalAngle","inflectionPoints","denom","tcusp","square","root","filter","p10","p11","p20","p21","extrema","bounds","boundingBox","right","bottom","cx","cy","intersectData","t2","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","other","nextIndex","shapeSegmentInverted","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","amplitude","frequency","pointsType","setPoint","outputBezier","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","rotatedVector","getProjectingAngle","cur","prevIndex","prevPoint","nextPoint","pVector","zigZagCorner","pointType","prevDist","nextDist","zigZagSegment","count","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","flex","mid","OffsetPathModifier","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","getFontProperties","fontData","styles","fStyle","fWeight","styleName","toLowerCase","weight","FontManager","maxWaitingTime","emptyChar","size","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","parentNode","fontFamily","node","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","parent","checkLoadedFonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","Date","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","engine","helper","fontProps","tHelper","fFamily","textContent","fClass","tCanvasHelper","OffscreenCanvas","measure","text","getComputedTextLength","measureText","list","forEach","cache","fontArr","_pendingFonts","shouldLoadFont","loadedSelector","fPath","querySelectorAll","rel","sc","found","ch","getCharData","_char","charCodeAt","console","warn","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","getCodePoint","string","codePoint","second","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","typekitLoaded","fontPrototype","SlotManager","slots","assign","slotFactory","RenderableElement","initRenderable","isInRange","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","eff","BaseElement","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","content","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","effectsManager","getType","FrameElement","prepareProperties","isVisible","_isParent","FootageElement","imageLoader","getBaseElement","FootageInterface","getFootageData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","timeRemapped","totalVolume","volumeValue","BaseRenderer","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","addPendingElement","setAsParent","setHierarchy","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","renderLocalTransform","localTransforms","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","MaskElement","maskElement","viewData","solidPath","properties","currentMasks","rect","expansor","feMorph","maskType","maskRef","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","createAlphaToLuminanceFilter","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","source","filters","filterManager","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","HierarchyElement","initHierarchy","checkParenting","RenderableDOMElement","_prototype","initElement","createContent","renderInnerContent","innerElem","IImageElement","sourceRect","pr","imagePreserveAspectRatio","ProcessedElement","IShapeElement","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","shouldBreakProcess","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","comparePoints","diff","SVGGradientFillStyleData","initGradientData","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","lLen","iterations","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","stylesList","animatedContents","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","GradientConstructor","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","shapeProperty","setElementStyles","render","ownStyles","ownModifiers","currentTransform","modifier","processedPos","renderShape","animatedContent","LetterProps","sw","fc","update","updated","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","charAt","letters","newLineFlag","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","boxHeight","currentHeight","lastSpaceIndex","uncollapsedSpaces","currentChar","an","add","anIndexes","animatorJustifyOffset","extra","animators","animatorData","letterData","based","indexes","fh","fs","fb","rn","totalChars","currentInd","newInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","searchProperties","getMeasures","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","tLength","pi","yOff","firstLine","animatorSelector","letterValue","offf","xPathPos","yPathPos","initPathPos","initSegmentInd","initPointInd","elemOpacity","letterSw","letterSc","letterFc","letterM","letterP","defaultPropsArray","letterO","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","ITextElement","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","String","fromCharCode","buildShapeData","shapeItem","usesGlyphs","tSpan","tElement","justify","span","glyph","cachedSpansLength","childSpan","glyphElement","SVGCompElement","_debug","textBox","bbox","renderedLetter","textSpan","ISolidElement","NullElement","SVGRendererBase","svgElement","viewBoxSize","viewBoxOnly","contentVisibility","className","focusable","preserveAspectRatio","destroyed","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","ICompElement","setElements","getElements","destroyElements","supports3d","SVGRenderer","config","ariaLabel","title","titleElement","titleId","description","descElement","descId","filterSize","runExpressions","ShapeTransformManager","sequences","sequenceList","transform_key_count","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","CVBaseElement","operationsMap","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearCanvas","clearRect","prepareLayer","buffer","bufferCtx","drawImage","getTransform","exitLayer","forceRealStack","ctxTransform","ctxOpacity","restore","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","currentGlobalAlpha","ctxStrokeStyle","grd","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFillStyle","setLineDash","lineDashOffset","closePath","ctxStroke","ctxFill","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","CVTextElement","stroke","fill","currentRender","sWidth","fValue","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","CVImageElement","imgW","imgH","imgRel","canvasRel","widthCrop","heightCrop","par","CVSolidElement","ctxFillRect","CanvasRendererBase","globalAlpha","strokeStyle","lineCap","rule","contextData","actionFlag","containerStyle","mozTransformOrigin","context","setContext","isDashed","elementWidth","elementHeight","offsetHeight","dpr","elementRel","animationRel","fillType","CanvasContext","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","CVCompElement","CanvasRenderer","devicePixelRatio","HBaseElement","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","HSolidElement","backgroundColor","HShapeElement","shapesContainer","currentBBox","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","HTextElement","textPaths","isMasked","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","HCameraElement","pe","_prevMat","setup","threeDElements","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","HImageElement","Image","imageElem","HybridRendererBase","camera","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","tmpDOMElement","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","HCompElement","_createBaseContainerElements","HybridRenderer","_thisLayerFunction","defineProperty","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","chunks","digits","rngname","startdenom","significance","seedrandom","seed","options","entropy","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","int32","quick","S","pass","is_math_call","state","copy","keylen","me","result","typ","stringseed","smear","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","rndm","createPath","inTangents","outTangents","arrPlaceholder","inVertexPoint","outVertexPoint","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","lookAt","elem1","elem2","fVec","pitch","yaw","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","randSeed","substring","posterizeTime","framesPerSecond","velocity","textIndex","textTotal","selectorValue","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","MaskManager","_masksInterfaces","maskFunction","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","_registerMaskInterface","_registerEffectsInterface","anchorPointDescriptor","defineProperties","hasParent","anchor_point","startTime","_name","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","_propertyGroup","effectsData","createGroupInterface","groupInterface","mn","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","ShapePathInterface","pathInterfaceFactory","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","_interfaceFunction","transformInterfaceFactory","cix","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","start","skewAxis","outerRadius","outerRoundness","innerRadius","innerRoundness","parentGroupWrapper","_sourceText","sourceText","stringValue","fillColor","outlineInterfaceFactory","currentPropertyName","currentProperty","propertyNameIndex","dataInterfaceFactory","outlineInterface","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","_cachingAtTime","speed","getStaticValueAtTime","addPropertyDecorator","durationFlag","lastKeyFrame","cycleDuration","firstKeyFrame","ret","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","endFrame","sampleFrequency","sampleValue","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","shapeValue","lastTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","unitVector","tangentOnPath","normalOnPath","propertyGetShapeProp","trims","initialize$1","addDecorator","calculateExpression","getExpressionValue","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMerge","feMergeNode","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","colorBlack","colorWhite","SVGFillFilter","SVGStrokeEffect","initialized","elemChildren","childNodes","groupPath","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","color1","color2","color3","tableR","tableG","tableB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","table","colorValue","outputDelta","inputDelta","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","SVGGaussianBlurEffect","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","TransformEffect","forceFrame","isUniformScale","scaleHeight","scaleWidth","SVGTransformEffect","CVTransformEffect","cpslAnimationCss","CpslAnimationStyle0","CpslAnimation","replayAnimation","componentDidLoad","animationContainerEl","el","shadowRoot","Host","part","class"],"sources":["../../node_modules/lottie-web/build/player/lottie.js","src/components/cpsl-animation/cpsl-animation.scss?tag=cpsl-animation&encapsulation=shadow","src/components/cpsl-animation/cpsl-animation.tsx"],"sourcesContent":["(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",":host {\n position: absolute;\n height: 100%;\n width: 100%;\n\n display: block;\n pointer-events: none;\n}\n\n:host {\n .background-16 {\n path {\n fill: var(--cpsl-color-background-16);\n }\n }\n .background-48 {\n path {\n fill: var(--cpsl-color-background-48);\n }\n }\n .background-80 {\n path {\n fill: var(--cpsl-color-background-80);\n }\n }\n}\n","import { Component, Host, h, Element, Method, Prop } from '@stencil/core';\nimport lottie, { AnimationItem } from 'lottie-web';\n\n@Component({\n tag: 'cpsl-animation',\n styleUrl: 'cpsl-animation.scss',\n shadow: true,\n})\nexport class CpslAnimation {\n private animation: AnimationItem;\n\n @Element() el!: HTMLCpslAnimationElement;\n\n /**\n * Source of the Lottie animation file.\n */\n @Prop() src: string;\n\n /**\n * Will replay the animation\n */\n @Method()\n async replayAnimation() {\n this.animation.play();\n }\n\n componentDidLoad() {\n this.animation = lottie.loadAnimation({\n loop: false,\n container: this.animationContainerEl,\n renderer: 'svg',\n path: this.src,\n });\n\n this.animation.play();\n }\n\n private get animationContainerEl() {\n return this.el.shadowRoot.getElementById('animation-container');\n }\n\n render() {\n return (\n <Host>\n <div part=\"animation-container\" id=\"animation-container\" class=\"animation-container\" />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}