{"version":3,"sources":["webpack:///./node_modules/lottie-web/build/player/lottie.js"],"names":["factory","root","window","svgNS","locationHref","initialDefaultFrame","subframeEnabled","expressionsPlugin","isSafari","test","navigator","userAgent","cachedColors","bm_rounder","Math","round","bm_rnd","bm_pow","pow","bm_sqrt","sqrt","bm_abs","abs","bm_floor","floor","bm_max","max","bm_min","min","blitter","BMMath","ProjectInterface","i","propertyNames","len","length","random","val","absArr","createSizedArray","defaultCurveSegments","degToRads","PI","roundCorner","roundValues","flag","styleDiv","element","style","position","top","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","type","currentTime","totalTime","frameMultiplier","this","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","target","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","h","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","offset","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","toString","BaseEvent","prototype","triggerEvent","eventName","args","_cbs","addEventListener","callback","push","removeEventListener","bind","splice","createTypedArray","Uint8ClampedArray","Float32Array","Int16Array","value","arr","Array","apply","createNS","document","createElementNS","createTag","createElement","DynamicPropertyContainer","addDynamicProperty","prop","dynamicProperties","indexOf","container","_isAnimated","iterateDynamicProperties","_mdf","getValue","initDynamicPropertyContainer","getBlendMode","blendModeEnums","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","mode","Matrix","_cos","cos","_sin","sin","_tan","tan","_rnd","reset","props","rotate","angle","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","sy","skew","ax","ay","skewFromAxis","scale","sz","setTransform","a","c","e","j","k","l","m","n","o","translate","tx","ty","tz","transform","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_p","_identityCalculated","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","isIdentity","_identity","equals","matr","clone","cloneFromProps","applyToPoint","x","y","z","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","pt","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","pt1","pt2","pt3","p0","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","pool","math","global","startdenom","significance","overflow","ARC4","key","keylen","me","S","width","count","copy","slice","mixkey","seed","smear","stringseed","charCodeAt","tostring","String","fromCharCode","options","shortseed","flatten","obj","depth","result","typ","entropy","nodecrypto","out","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","Date","screen","autoseed","arc4","prng","int32","quick","double","pass","is_math_call","state","BezierFactory","ob","nm","str","replace","beziers","bezEasing","BezierEasing","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","points","_mSampleValues","_precomputed","get","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","aX","mSampleValues","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","extendPrototype","sources","destination","sourcePrototype","attr","hasOwnProperty","getDescriptor","object","Object","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","bezFunction","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","getBezierLength","pt4","ptCoord","perc","ptDistance","curveSegments","addedLength","point","lastPoint","lengthData","bezier_length_pool","newElement","percents","lengths","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","bezier_segment_points","getSegmentsLength","shapeData","segmentsLength","segments_length_pool","closed","pathV","pathO","pathI","_length","totalLength","getNewSegment","startPerc","endPerc","t0","t1","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","percent","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","currTime","getTime","timeToCall","id","setTimeout","clearTimeout","bez","dataFunctionManager","completeLayers","layers","comps","fontManager","layerData","jLen","kLen","completed","tt","td","hasMask","maskProps","masksProperties","convertPathsToAbsoluteValues","findCompLayers","refId","completeShapes","shapes","completeText","__used","JSON","parse","stringify","ks","it","path","checkVersion","minimum","animVersionString","animVersion","split","minimumVersion","checkText","iterateLayers","textLayer","documentData","animationData","assets","checkChars","chars","pathData","paths","data","__converted","checkColors","iterateShapes","checkShapes","cl","singleShape","moduleOb","__complete","dataManager","FontManager","emptyChar","w","size","combinedCharacters","setUpNode","font","family","parentNode","fontFamily","node","innerText","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","appendChild","body","offsetWidth","familyArray","enabledFamilies","join","trimFontOptions","parent","createHelper","def","fontData","tHelper","setAttribute","fFamily","fStyle","fWeight","textContent","fClass","getContext","concat","Font","fonts","typekitLoaded","isLoaded","_warned","initTime","now","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","getCombinedCharacterCodes","addChars","found","ch","addFonts","defs","list","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","loaded","monoCase","sansCase","fPath","fOrigin","origin","querySelectorAll","href","rel","src","sc","helper","cache","getCharData","char","console","warn","getFontByName","name","fName","measureText","fontName","index","doubleSize","getComputedTextLength","singleSize","loadedCount","removeChild","PropertyFactory","initFrame","math_abs","interpolateValue","frameNum","caching","newValue","offsetTime","propType","pv","keyData","nextKeyData","fnc","iterationIndex","lastIndex","keyframes","endValue","nextKeyTime","keyTime","to","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","quaternionToEuler","omega","cosom","sinom","scale0","scale1","az","aw","bx","by","bz","bw","acos","slerp","createQuaternion","constructor","values","c3","s1","s2","s3","getValueAtCurrentTime","comp","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","processEffectsSequence","elem","globalData","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","st","KeyframedMultidimensionalProperty","arrLen","getProp","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","px","py","pz","rx","ry","rz","or","sk","sa","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v1","v2","frameRate","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","ShapePath","_maxLength","setPathData","setLength","point_pool","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","init","cnt","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","shape_pool","releaseShapes","addShape","ShapeProperty","shapeCollection_pool","newShapeCollection","KeyframedShapeProperty","EllShapeProperty","cPoint","convertEllToPath","s0","_cw","_v","StarShapeProperty","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","os","rad","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","convertRectToPath","v0","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","RoundCornersModifier","PuckerAndBloatModifier","RepeaterModifier","ShapeCollection","DashProperty","renderer","dataProps","dashStr","dashArray","dashoffset","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","initModifierProperties","addShapeToModifier","shape","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segments","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","release","processShapes","shapePaths","_s","totalShapeLength","edges","newShapesData","addShapes","lastShape","pop","addPaths","newPaths","addSegment","shapePath","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","segment","rd","processPath","cloned_path","currentV","currentI","currentO","closerV","distance","newPosPerc","amount","centerPoint","pathLength","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","matrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","items","itemsTransform","cont","copies","ceil","group","reloadShapes","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","op","comparePoints","buildShapeString","pathNodes","_o","_i","shapeString","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","ImagePreloader","proxyImage","canvas","height","ctx","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","imagesLoadedCb","getAssetsPath","assetData","assetsPath","original_path","imagePath","u","_imageLoaded","images","loadAssets","cb","_createImageData","setAssetsPath","setPath","destroy","getImage","img","createImgData","crossOrigin","createImageData","setAttributeNS","setCacheType","featureSupport","maskType","filtersFactory","createFilter","filId","fil","createAlphaToLuminanceFilter","feColorMatrix","assetLoader","formatResponse","xhr","response","responseText","load","errorCallback","XMLHttpRequest","open","responseType","err","send","onreadystatechange","readyState","status","TextAnimatorProperty","textData","renderType","_hasMaskedPath","_frameId","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","TextAnimatorDataProperty","animatorProps","defaultData","textAnimator_animatables","sw","fc","fh","fs","fb","TextSelectorProp","getTextSelectorProp","LetterProps","TextProperty","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","of","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","searchProperties","maskManager","getMaskProperty","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","mask","animators","matrixHelper","mHelper","renderedLettersCount","letters","tLength","pi","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","currentLine","letterM","letterP","defaultPropsArray","animatorJustifyOffset","animatorFirstCharOffset","justifyOffsetMult","isNewLine","getMult","anIndexes","totalChars","line","extra","an","animatorOffset","add","rot","atan","update","updated","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","text","charCode","charactersArray","charAt","substr","newLineFlag","charData","anchorGrouping","currentSize","currentPos","lineWidth","maxLineWidth","styles","toLowerCase","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","animatorData","letterData","based","indexes","rn","newInd","currentInd","updateDocumentData","newData","undefined","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","_currentTextLength","finalS","finalE","xe","ne","textProperty","easer","tot","newCharsFlag","divisor","pool_factory","initialLength","_create","_release","_clone","pooling","cloned","shapeCollection","BaseRenderer","SVGRenderer","animationItem","config","svgElement","ariaLabel","title","titleElement","titleId","description","descElement","descId","maskElement","layerElement","renderConfig","preserveAspectRatio","imagePreserveAspectRatio","progressiveLoad","hideOnTransparent","viewBoxOnly","viewBoxSize","className","focusable","filterSize","pendingElements","destroyed","rendererType","CanvasRenderer","clearCanvas","context","dpr","wrapper","devicePixelRatio","currentGlobalAlpha","contextData","CVContextData","transformMat","HybridRenderer","threeDElements","camera","supports3d","MaskElement","viewData","solidPath","rect","expansor","feMorph","properties","currentMasks","layerId","maskRef","filterID","expan","lastPath","lastOperator","filterId","lastRadius","createLayerSolidPath","getShapeProp","invRect","drawPath","maskedElement","addRenderableComponent","HierarchyElement","FrameElement","TransformElement","RenderableElement","RenderableDOMElement","ProcessedElement","SVGStyleData","level","lvl","hd","pElem","msElem","SVGShapeData","transformers","caches","lStr","SVGTransformData","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","checkLayers","num","ip","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","Error","AudioElement","buildAllItems","includeLayers","newLayers","setProjectInterface","pInterface","projectInterface","initItems","buildElementParenting","parentName","hierarchy","setAsParent","setHierarchy","addPendingElement","searchExtraCompositions","xt","initExpressions","registerComposition","setupGlobalData","animData","fontsContainer","getAssetData","imageLoader","imagePreloader","audioController","fr","compSize","NullElement","SVGShapeElement","SVGTextElement","IImageElement","SVGCompElement","ISolidElement","configAnimation","maskId","updateContainerSize","appendElementInPos","setMatte","checkParenting","renderFrame","currentFrame","prepareFrame","getBaseElement","nextElement","insertBefore","hide","show","CVShapeElement","CVTextElement","CVImageElement","CVCompElement","CVSolidElement","ctxTransform","cProps","cTr","trProps","canvasContext","ctxOpacity","globalAlpha","cO","restore","save","actionFlag","cArrPos","duplicate","saved","savedOp","blendMode","popped","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","offsetHeight","par","fillType","beginPath","closePath","clip","clearRect","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","HShapeElement","HTextElement","HCameraElement","HImageElement","HCompElement","HSolidElement","startPos","endPos","perspectiveElem","createThreeDContainer","webkitTransform","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","svg","setup","cWidth","cHeight","perspective","webkitPerspective","floatingContainer","isFirstFrame","finalMat","finalTransform","mProp","getMaskelement","pathString","pathShapeValue","initHierarchy","_isParent","prepareProperties","isVisible","initTransform","_matMdf","_opMdf","ao","renderTransform","globalToLocal","transforms","ptNew","initRenderable","isInRange","hidden","isTransparent","renderableComponents","component","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","renderRenderable","sourceRectAtTime","getLayerSize","initElement","initBaseData","initRendererElement","createContainerElements","createRenderableComponents","createContent","baseElement","renderElement","renderInnerContent","innerElem","destroyBaseElement","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","stop","gf","cst","opacityId","opFill","ms","ost","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","ang","dist","createRenderFunction","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","BaseElement","SVGBaseElement","IShapeElement","ITextElement","ICompElement","sourceRect","_isPlaying","_canPlay","_currentTime","tm","_placeholder","textSpans","shapesData","stylesList","shapeModifiers","itemsData","processedElements","animatedContents","SVGTintFilter","filter","filterManager","matrixFilter","effectElements","feMergeNode","feMerge","SVGFillFilter","SVGGaussianBlurEffect","feGaussianBlur","SVGStrokeEffect","initialized","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","feOffset","feFlood","feComposite","originalNodeAdded","sequence","processSequence","processSequences","getNewKey","checkMasks","layerInterface","LayerExpressionInterface","registerMaskInterface","effectsInterface","EffectsExpressionInterface","createEffectsInterface","registerEffectsInterface","compInterface","CompExpressionInterface","shapeInterface","ShapeExpressionInterface","content","textInterface","TextExpressionInterface","setBlendMode","blendModeValue","bm","sr","effectsManager","EffectsManager","getType","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","ln","cp","clipId","cpGroup","renderableEffectsManager","SVGEffects","addShapeToModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","lcEnum","ljEnum","searchProcessedElement","addProcessedElement","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","timeRemapped","setElements","elems","getElements","destroyElements","pr","volumeValue","textContainer","buildTextContents","textArray","textContents","currentTextContent","tSpan","usesGlyphs","cachedSpansLength","tElement","justify","time","textBox","getBBox","bbox","renderedLetter","textSpan","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","lc","lj","ml","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","fn","setElementStyles","render","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","colorBlack","colorWhite","opacity","sigma","dimensions","sigmaX","sigmaY","edgeMode","initialize","groupPath","elemChildren","children","childNodes","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","colorValue","table","call","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","ef","filters","CVBaseElement","CVMaskElement","hasMasks","stroke","fill","currentRender","sWidth","fValue","CVEffects","HBaseElement","shapesContainer","currentBBox","textPaths","isMasked","pe","_prevMat","HEffects","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","newLength","currentSavedOp","set","createElements","globalCompositeOperation","hideElement","showElement","forceRealStack","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","drawImage","parentMatrix","moveTo","lineTo","bezierCurveTo","transformHelper","dashResetter","preTransforms","co","wi","da","do","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","strokeStyle","grd","lineCap","lineJoin","miterLimit","setLineDash","lineDashOffset","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","hasFill","hasStroke","commands","pathArr","lastFill","lastStroke","lastStrokeW","checkBlendMode","tg","addEffects","backgroundColor","_createBaseContainerElements","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","item","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","bounds","shapeBoundingBox","xMax","right","yMax","bottom","tempBoundingBox","p3","b2ac","t2","calculateF","calculateBoundingBox","currentBoxContains","box","changed","compW","compH","innerElemStyle","strokeWidth","lineHeight","tParent","tCont","textPath","margin","Image","imageElem","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","m_rotationX","m_rotationY","hasMatrixChanged","animationManager","registeredAnimations","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","animation","isPaused","subtractPlayingCount","registerAnimation","AnimationItem","setupAnimation","setData","addPlayingCount","activate","nowTime","elapsedTime","advanceTime","first","loadAnimation","params","setParams","setSpeed","setDirection","togglePause","searchAnimations","standalone","animElements","getElementsByClassName","getElementsByTagName","div","resize","goToAndStop","isFrame","freeze","unfreeze","getRegisteredAnimations","animations","currentRawFrame","frameMult","playSpeed","playDirection","playCount","autoplay","loop","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","animType","rendererSettings","parseInt","autoloadSegments","initialSegment","lastIndexOf","fileName","trigger","wrapperAttributes","attributes","getNamedItem","prerender","completeData","loadNextSegment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","updaFrameModifier","waitForFontsLoaded","error","triggerConfigError","gotoFrame","setSubframe","triggerRenderFrameError","setCurrentRawFrameValue","frameModifier","goToAndPlay","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","end","pendingFrame","playSegments","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onComplete","onSegmentStart","onDestroy","getPath","getDuration","onError","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","Number","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","sum","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","createPath","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","property","needsVelocity","_needsRandom","elemType","$bm_transform","effect","thisProperty","valueAtTime","defineProperty","frameDuration","displayStartTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","__expression_functions","scoped_bm_rt","xf","eval","expression_function","numKeys","active","wiggle","freq","amp","addedAmps","periods","loopInDuration","duration","loopOutDuration","getVelocityAtTime","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","ease","nearestKey","framesToTime","frames","fps","timeToFrames","seedRandom","seedrandom","randSeed","substring","posterizeTime","framesPerSecond","hasParent","executeExpression","_value","frameExpressionId","expressionHelpers","searchExpressions","getSpeedAtTime","speed","_cachingAtTime","getStaticValueAtTime","setGroupProperty","propertyGroup","durationFlag","cycleDuration","firstKeyFrame","ret","lastKeyFrame","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","skewAxis","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","propertyIndex","ix","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","propertyGetShapeProp","trims","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","ShapePathInterface","view","interfaceFunction","_propertyGroup","propertyGroupFactory","PropertyInterface","defineProperties","mn","parentPropertyGroup","propertyName","_name","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","interfaces","numProperties","transformInterface","transformInterfaceFactory","cix","contentsInterfaceFactory","np","ExpressionPropertyInterface","_dashPropertyGroup","dashOb","addPropertyToDashOb","start","outerRadius","outerRoundness","innerRoundness","innerRadius","radius","_interfaceFunction","_sourceText","_thisLayerFunction","sourceText","stringValue","_prevValue","getMatrix","toWorldMat","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","anchorPointDescriptor","TransformExpressionInterface","anchor_point","startTime","source","MaskManagerInterface","effects","pixelAspect","numLayers","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_transformFactory","_pz","_px","_py","compositions","_thisProjectFunction","createGroupInterface","groupInterface","createValueInterface","enabled","en","expressionProperty","effectsData","MaskInterface","_mask","_data","_masksInterfaces","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","assign","speedAtTime","defaultGetter","UnidimensionalPropertyInterface","arrValue","MultidimensionalPropertyInterface","TextExpressionSelectorProp","propertyGetTextProp","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","effectItem","GroupEffect","getValueProxy","total","eff","lottie","setLocationHref","setSubframeRendering","setQuality","isNaN","inBrowser","installPlugin","plugin","getFactory","checkReady","clearInterval","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","__getFactory","version","scripts","myScript","setInterval"],"mappings":"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","file":"ea88be26-f60f7b7c573bc0973f25.js","sourcesContent":["typeof navigator !== \"undefined\" && function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(function () {\n return factory(root);\n });\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory(root);\n } else {\n root.lottie = factory(root);\n root.bodymovin = root.lottie;\n }\n}(window || {}, function (window) {\n \"use strict\";\n\n var svgNS = \"http://www.w3.org/2000/svg\";\n var locationHref = '';\n var initialDefaultFrame = -999999;\n var subframeEnabled = true;\n var expressionsPlugin;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var cachedColors = {};\n var bm_rounder = Math.round;\n var bm_rnd;\n var bm_pow = Math.pow;\n var bm_sqrt = Math.sqrt;\n var bm_abs = Math.abs;\n var bm_floor = Math.floor;\n var bm_max = Math.max;\n var bm_min = Math.min;\n var blitter = 10;\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 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() {\n return {};\n }\n\n BMMath.random = Math.random;\n\n BMMath.abs = function (val) {\n var tOfVal = typeof val;\n\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i,\n 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 if (flag) {\n bm_rnd = Math.round;\n } else {\n bm_rnd = function bm_rnd(val) {\n return val;\n };\n }\n }\n\n roundValues(false);\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 = element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = element.style.webkitTransformStyle = 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 this.currentTime = currentTime;\n }\n\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n return '__lottie_element_' + ++_count;\n };\n }();\n\n function HSVtoRGB(h, s, v) {\n var r, g, b, i, f, p, q, 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\n return [r, g, b];\n }\n\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b),\n d = max - min,\n h,\n s = max === 0 ? 0 : d / max,\n 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\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 function BaseEvent() {}\n\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var len = this._cbs[eventName].length;\n\n for (var i = 0; i < len; i++) {\n this._cbs[eventName][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 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 createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0,\n arr = [],\n 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 createTypedArray(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n } else if (type === 'int16') {\n return new Int16Array(len);\n } else if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n }\n\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArray;\n } else {\n return createRegularArray;\n }\n }();\n\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function createNS(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function createTag(type) {\n //return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function DynamicPropertyContainer() {}\n\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 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 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 /*!\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\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] = _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 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 len = pts.length,\n 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 p1 = this.props[1],\n p4 = this.props[4],\n p5 = this.props[5],\n p12 = this.props[12],\n 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.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 /*\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\n\n (function (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 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 })([], // pool: entropy pool starts empty\n BMMath // math: package containing random, pow, and seedrandom\n );\n\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 if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues();\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 } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n };\n return ob;\n }();\n\n (function () {\n var lastTime = 0;\n var vendors = ['ms', 'moz', 'webkit', 'o'];\n\n for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n }\n\n if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback, element) {\n var currTime = new Date().getTime();\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n var id = setTimeout(function () {\n callback(currTime + timeToCall);\n }, timeToCall);\n lastTime = currTime + timeToCall;\n return id;\n };\n if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) {\n clearTimeout(id);\n };\n })();\n\n function extendPrototype(sources, destination) {\n var i,\n len = sources.length,\n sourcePrototype;\n\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n\n for (var attr in sourcePrototype) {\n if (sourcePrototype.hasOwnProperty(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 function bezFunction() {\n var easingFunctions = [];\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 = defaultCurveSegments;\n var k;\n var i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point = [],\n lastPoint = [];\n var lengthData = bezier_length_pool.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 = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bm_pow(perc, 2) * pt4[i] + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint[i] !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n\n lastPoint[i] = point[i];\n }\n\n if (ptDistance) {\n ptDistance = bm_sqrt(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 = segments_length_pool.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 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 = defaultCurveSegments;\n var k, i, len;\n var ptCoord,\n perc,\n addedLength = 0;\n var ptDistance;\n var point,\n 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 = bm_pow(1 - perc, 3) * pt1[i] + 3 * bm_pow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bm_pow(perc, 2) * (pt2[i] + pt4[i]) + bm_pow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n\n if (lastPoint !== null) {\n ptDistance += bm_pow(point[i] - lastPoint[i], 2);\n }\n }\n\n ptDistance = bm_sqrt(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 = bm_floor((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 } else {\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\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u0 = 1;\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 function getSegmentArray() {}\n\n var bezier_segment_points = createTypedArray('float32', 8);\n\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n startPerc = startPerc < 0 ? 0 : startPerc > 1 ? 1 : startPerc;\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i,\n 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;\n var t0t0u0_3 = t0 * t0 * u0 * 3;\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;\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;\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;\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;\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;\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;\n var t1t1t1 = t1 * t1 * t1;\n\n for (i = 0; i < len; i += 1) {\n bezier_segment_points[i * 4] = Math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 1] = Math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 2] = Math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000;\n bezier_segment_points[i * 4 + 3] = Math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000;\n }\n\n return bezier_segment_points;\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 function dataFunctionManager() {\n //var tCanvasHelper = createTag('canvas').getContext('2d');\n function completeLayers(layers, comps, fontManager) {\n var layerData;\n var animArray, lastFrame;\n var i,\n len = layers.length;\n var j, jLen, k, kLen;\n\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n\n if (!('ks' in layerData) || layerData.completed) {\n continue;\n }\n\n layerData.completed = true;\n\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n\n animArray = [];\n lastFrame = -1;\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, fontManager);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty == 5) {\n completeText(layerData, fontManager);\n }\n }\n }\n\n function findCompLayers(id, comps) {\n var i = 0,\n len = comps.length;\n\n while (i < len) {\n if (comps[i].id === id) {\n if (!comps[i].layers.__used) {\n comps[i].layers.__used = true;\n return comps[i].layers;\n }\n\n return JSON.parse(JSON.stringify(comps[i].layers));\n }\n\n i += 1;\n }\n }\n\n function completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n /*if(hasPaths){\r\n //mx: distance\r\n //ss: sensitivity\r\n //dc: decay\r\n arr.splice(arr.length-1,0,{\r\n \"ty\": \"ms\",\r\n \"mx\":20,\r\n \"ss\":10,\r\n \"dc\":0.001,\r\n \"maxDist\":200\r\n });\r\n }*/\n\n }\n\n function convertPathsToAbsoluteValues(path) {\n var i,\n 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 } else if (animVersion[0] > minimum[0]) {\n return false;\n }\n\n if (minimum[1] > animVersion[1]) {\n return true;\n } else if (animVersion[1] > minimum[1]) {\n return false;\n }\n\n if (minimum[2] > animVersion[2]) {\n return true;\n } else if (animVersion[2] > minimum[2]) {\n return false;\n }\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 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 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 len = animationData.chars.length,\n j,\n jLen,\n k,\n kLen;\n var pathData, paths;\n\n for (i = 0; i < len; i += 1) {\n if (animationData.chars[i].data && animationData.chars[i].data.shapes) {\n paths = animationData.chars[i].data.shapes[0].it;\n jLen = paths.length;\n\n for (j = 0; j < jLen; j += 1) {\n pathData = paths[j].ks.k;\n\n if (!pathData.__converted) {\n convertPathsToAbsoluteValues(paths[j].ks.k);\n pathData.__converted = true;\n }\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 len = shapes.length;\n var j, 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 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 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 completeShapes(arr) {\n var i,\n len = arr.length;\n var j, jLen;\n var hasPaths = false;\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\n hasPaths = true;\n } else if (arr[i].ty == 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n\n function iterateLayers(layers) {\n var layerData;\n var i,\n len = layers.length;\n var j, jLen, k, 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 completeShapes(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 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, fontManager) {\n if (animationData.__complete) {\n return;\n }\n\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets, fontManager);\n animationData.__complete = true; //blitAnimation(animationData, animationData.assets, fontManager);\n }\n\n function completeText(data, fontManager) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n data.singleShape = true;\n }\n }\n\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n\n var dataManager = dataFunctionManager();\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: []\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\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i,\n 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');\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 len = this.fonts.length;\n var node, w;\n var loadedCount = len;\n\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n continue;\n }\n\n 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(def, fontData) {\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', fontData.fStyle);\n tHelper.setAttribute('font-weight', fontData.fWeight);\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 var tCanvasHelper = createTag('canvas').getContext('2d');\n tCanvasHelper.font = fontData.fWeight + ' ' + fontData.fStyle + ' 100px ' + fontData.fFamily; //tCanvasHelper.font = ' 100px '+ fontData.fFamily;\n\n return tHelper;\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 var fontArr = fontData.list;\n var i,\n 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++) {\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++) {\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(defs, fontArr[i]);\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 len = chars.length;\n var j,\n jLen = this.chars.length,\n 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 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 && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', char, style, font);\n }\n\n return emptyChar;\n }\n\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index = char.charCodeAt(0);\n\n if (!fontData.cache[index + 1]) {\n var tHelper = fontData.helper; //Canvas version\n //fontData.cache[index] = tHelper.measureText(char).width / 100;\n //SVG version\n //console.log(tHelper.getBBox().width)\n\n if (char === ' ') {\n tHelper.textContent = '|' + char + '|';\n var doubleSize = tHelper.getComputedTextLength();\n tHelper.textContent = '||';\n var singleSize = tHelper.getComputedTextLength();\n fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n } else {\n tHelper.textContent = char;\n fontData.cache[index + 1] = tHelper.getComputedTextLength() / 100;\n }\n }\n\n return fontData.cache[index + 1] * size;\n }\n\n function getFontByName(name) {\n var i = 0,\n 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 getCombinedCharacterCodes() {\n return combinedCharacters;\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 }; //TODO: for now I'm adding these methods to the Class and not the prototype. Think of a better way to implement it. \n\n\n Font.getCombinedCharacterCodes = getCombinedCharacterCodes;\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 var PropertyFactory = function () {\n var initFrame = initialDefaultFrame;\n var math_abs = 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 flag = true;\n var keyData, nextKeyData;\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 var k, kLen, perc, jLen, j, fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n\n if (keyData.to) {\n if (!keyData.bezierData) {\n keyData.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n\n var bezierData = keyData.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 (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyData.__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, outY, inX, inY, 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 (!keyData.__fnct) {\n keyData.__fnct = [];\n }\n\n if (!keyData.__fnct[i]) {\n outX = typeof keyData.o.x[i] === 'undefined' ? keyData.o.x[0] : keyData.o.x[i];\n outY = typeof keyData.o.y[i] === 'undefined' ? keyData.o.y[0] : keyData.o.y[i];\n inX = typeof keyData.i.x[i] === 'undefined' ? keyData.i.x[0] : keyData.i.x[i];\n inY = typeof keyData.i.y[i] === 'undefined' ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.__fnct[i] = fnc;\n } else {\n fnc = keyData.__fnct[i];\n }\n } else {\n if (!keyData.__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.__fnct = fnc;\n } else {\n fnc = keyData.__fnct;\n }\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 ay = a[1],\n az = a[2],\n aw = a[3],\n bx = b[0],\n by = b[1],\n bz = b[2],\n bw = b[3];\n var omega, cosom, sinom, scale0, 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 (math_abs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0,\n len = this.v.length;\n\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n\n if (math_abs(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 multipliedValue;\n var i,\n 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 len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n var arr = 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.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 len = data.k.length;\n var s, e, to, 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.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 function getProp(elem, data, type, mult, container) {\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 }\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 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 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 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 py = this.py,\n frameRate;\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 v1 = v2 = defaultVector;\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 if (!this.a.k) {\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 } else {\n return;\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 len = data.or.k.length;\n\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = 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 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] = point_pool.newElement();\n this.o[i] = point_pool.newElement();\n this.i[i] = point_pool.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\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = point_pool.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 outPoints = this.o,\n 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 var ShapePropertyFactory = function () {\n var initFrame = -999999;\n\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS, keyPropE, isHold, j, k, jLen, kLen, perc, 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 flag = true,\n keyData,\n nextKeyData;\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 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 (keyData.__fnct) {\n fnc = keyData.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyData.__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 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 = shape_pool.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 } else 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 = this.kf ? this.pv : this.data.ks ? this.data.ks.k : this.data.pt.k;\n var i,\n 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 ;\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 = shape_pool.clone(pathData);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.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.k = true;\n this.kf = true;\n var i,\n len = this.keyframes[0].s[0].i.length;\n var jLen = this.keyframes[0].s[0].i[0].length;\n this.v = shape_pool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shape_pool.clone(this.v);\n this.localShapeCollection = shapeCollection_pool.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 EllShapeProperty(elem, data) {\n /*this.v = {\r\n v: createSizedArray(4),\r\n i: createSizedArray(4),\r\n o: createSizedArray(4),\r\n c: true\r\n };*/\n this.v = shape_pool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollection_pool.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 ;\n EllShapeProperty.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 p1 = this.p.v[1],\n s0 = this.s.v[0] / 2,\n 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], EllShapeProperty);\n return EllShapeProperty;\n }();\n\n var StarShapeProperty = function () {\n function StarShapeProperty(elem, data) {\n this.v = shape_pool.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 = shapeCollection_pool.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 ;\n StarShapeProperty.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 rad,\n roundness,\n perimSegment,\n 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 currentAng = -Math.PI / 2;\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], StarShapeProperty);\n return StarShapeProperty;\n }();\n\n var RectShapeProperty = function () {\n function RectShapeProperty(elem, data) {\n this.v = shape_pool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollection_pool.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 ;\n RectShapeProperty.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0],\n p1 = this.p.v[1],\n v0 = this.s.v[0] / 2,\n v1 = this.s.v[1] / 2;\n var round = bm_min(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(frameNum) {\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], RectShapeProperty);\n return RectShapeProperty;\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 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: shapeCollection_pool.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 len = segments.length,\n 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) {} else {\n var shapeS, 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 len = pathsData.length;\n\n for (i = 0; i < len; i += 1) {\n segments_length_pool.release(pathsData[i]);\n }\n\n pathsData.length = 0;\n return pathsData;\n };\n\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s, 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 s = (this.s.v > 1 ? 1 : this.s.v < 0 ? 0 : this.s.v) + o;\n e = (this.e.v > 1 ? 1 : this.e.v < 0 ? 0 : this.e.v) + o;\n\n if (s === e) {}\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 len = this.shapes.length,\n j,\n jLen;\n var pathsData,\n pathData,\n totalShapeLength,\n 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 shapeData,\n 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 shapeE = e,\n addedLength = 0,\n 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 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 len = shapeData.shape.paths._length,\n j,\n jLen;\n var addedLength = 0;\n var currentLengthData, segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n\n if (!shapePath) {\n shapePath = shape_pool.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 = shape_pool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n\n return shapes;\n };\n\n ShapeModifiers.registerModifier('tm', TrimModifier);\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 cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var i,\n len = path._length;\n var currentV,\n currentI,\n currentO,\n closerV,\n newV,\n newO,\n newI,\n distance,\n newPosPerc,\n index = 0;\n var vX, vY, oX, oY, iX, 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 cloned_path.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /*cloned_path.v[index] = currentV;\r\n cloned_path.o[index] = currentO;\r\n cloned_path.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 vX = iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.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 vX = oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vY = oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n cloned_path.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 cloned_path;\n };\n\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var rd = this.rd.v;\n\n if (rd !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\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 ShapeModifiers.registerModifier('rd', RoundCornersModifier);\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 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 cloned_path = shape_pool.newElement();\n cloned_path.c = path.c;\n var vX, vY, oX, oY, iX, 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 cloned_path.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n\n return cloned_path;\n };\n\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i,\n len = this.shapes.length;\n var j, jLen;\n var amount = this.amount.v;\n\n if (amount !== 0) {\n var shapeData, newPaths, localShapeCollection;\n\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n newPaths = shapeData.shape.paths;\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 ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\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 var cont = 0;\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 cont += 1;\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 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 i,\n len = elements.length;\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 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, itemsTransform, i, dir, cont;\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 }\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 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 k;\n var tMat = this.tr.v.props;\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, 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.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\n RepeaterModifier.prototype.addShape = function () {};\n\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\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 shape_pool.release(this.shapes[i]);\n }\n\n this._length = 0;\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 len = data.length || 0,\n 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 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 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 len = this.o.length / 2,\n 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 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 len = this.data.p * 4;\n var mult, 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 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 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 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 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 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 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 } else if (Howl) {\n return new Howl({\n src: [assetPath]\n });\n } else {\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 },\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(value) {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i,\n 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 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) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n\n function getAssetsPath(assetData, assetsPath, original_path) {\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 = original_path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n\n return path;\n }\n\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\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.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\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 loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i,\n len = assets.length;\n\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\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 getImage(assetData) {\n var i = 0,\n 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\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n\n function loaded() {\n return this.totalImages === this.loadedAssets;\n }\n\n function setCacheType(type) {\n if (type === 'svg') {\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n\n function ImagePreloader(type) {\n this._imageLoaded = imageLoaded.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.loadedAssets = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n\n ;\n ImagePreloader.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loaded: loaded,\n destroy: destroy,\n getImage: getImage,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloader;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true\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 return ob;\n }();\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n function createFilter(filId) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\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 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 assetLoader = function () {\n function formatResponse(xhr) {\n if (xhr.response && typeof xhr.response === 'object') {\n return xhr.response;\n } else if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n } else if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n }\n\n function loadAsset(path, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n xhr.open('GET', path, true); // 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) {}\n\n xhr.send();\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\n return {\n load: loadAsset\n };\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 len = this._textData.a.length,\n 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 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: this._textData.p.r,\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 data = this.data;\n var xPos, yPos;\n var i, len;\n var letters = documentData.l,\n pathInfo,\n currentLength,\n currentPoint,\n segmentLength,\n flag,\n pointInd,\n segmentInd,\n prevPoint,\n points,\n segments,\n partialLength,\n totalLength,\n perc,\n tanAngle,\n 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) {\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, animatorSelector;\n var j, jLen;\n var letterValue;\n jLen = animators.length;\n var lastLetter;\n var mult,\n ind = -1,\n offf,\n xPathPos,\n yPathPos;\n var initPathPos = currentLength,\n initSegmentInd = segmentInd,\n initPointInd = pointInd,\n currentLine = -1;\n var elemOpacity;\n var sc, sw, fc, k;\n var lineLength = 0;\n var letterSw,\n letterSc,\n letterFc,\n letterM = '',\n letterP = this.defaultPropsArray,\n 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 lineLength = 0;\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 letterO = letterSw = letterFc = letterM = '';\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\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 / 200;\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;\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 / 200, -(alignment[1] * yOff / 100));\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 / 200, -alignment[1] * yOff / 100, 0);\n }\n\n lineLength += letters[i].l / 2;\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 {\n if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n }\n\n lineLength += letters[i].l / 2;\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] = sc[k] + (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] = 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] = fc[k] + (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] = 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 {\n 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\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 / 100 + yPos, 0);\n\n if (textData.p.p) {\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 / 200;\n\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr / 1000 * 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\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an / 200, alignment[1] * yOff / 100, 0);\n xPos += letters[i].l + documentData.tr / 1000 * 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 TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimator_animatables = animatorProps.a;\n this.a = {\n r: textAnimator_animatables.r ? getProp(elem, textAnimator_animatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimator_animatables.rx ? getProp(elem, textAnimator_animatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimator_animatables.ry ? getProp(elem, textAnimator_animatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimator_animatables.sk ? getProp(elem, textAnimator_animatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimator_animatables.sa ? getProp(elem, textAnimator_animatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimator_animatables.s ? getProp(elem, textAnimator_animatables.s, 1, 0.01, container) : defaultData,\n a: textAnimator_animatables.a ? getProp(elem, textAnimator_animatables.a, 1, 0, container) : defaultData,\n o: textAnimator_animatables.o ? getProp(elem, textAnimator_animatables.o, 0, 0.01, container) : defaultData,\n p: textAnimator_animatables.p ? getProp(elem, textAnimator_animatables.p, 1, 0, container) : defaultData,\n sw: textAnimator_animatables.sw ? getProp(elem, textAnimator_animatables.sw, 0, 0, container) : defaultData,\n sc: textAnimator_animatables.sc ? getProp(elem, textAnimator_animatables.sc, 1, 0, container) : defaultData,\n fc: textAnimator_animatables.fc ? getProp(elem, textAnimator_animatables.fc, 1, 0, container) : defaultData,\n fh: textAnimator_animatables.fh ? getProp(elem, textAnimator_animatables.fh, 0, 0, container) : defaultData,\n fs: textAnimator_animatables.fs ? getProp(elem, textAnimator_animatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimator_animatables.fb ? getProp(elem, textAnimator_animatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimator_animatables.t ? getProp(elem, textAnimator_animatables.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 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 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 (data.hasOwnProperty(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 multipliedValue;\n var i,\n 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.pv = this.v = this.currentData;\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 textDocumentData;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0,\n len = textKeys.length;\n\n while (i <= len - 1) {\n textDocumentData = textKeys[i].s;\n\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 combinedCharacters = FontManager.getCombinedCharacterCodes();\n var charactersArray = [];\n var i = 0,\n len = text.length;\n var charCode;\n\n while (i < len) {\n charCode = text.charCodeAt(i);\n\n if (combinedCharacters.indexOf(charCode) !== -1) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else {\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n charCode = text.charCodeAt(i + 1);\n\n if (charCode >= 0xDC00 && charCode <= 0xDFFF) {\n charactersArray.push(text.substr(i, 2));\n ++i;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else {\n charactersArray.push(text.charAt(i));\n }\n }\n\n i += 1;\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, len;\n var newLineFlag,\n index = 0,\n val;\n var anchorGrouping = data.m.g;\n var currentSize = 0,\n currentPos = 0,\n currentLine = 0,\n lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j, jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData,\n cLength = 0;\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal',\n fStyle = 'normal';\n len = styles.length;\n var styleName;\n\n for (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 }\n\n documentData.fWeight = fontData.fWeight || fWeight;\n documentData.fStyle = fStyle;\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, 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 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 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 animatorData,\n letterData;\n jLen = animators.length;\n var based,\n ind,\n 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 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 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 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.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 TextSelectorProp(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.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n\n TextSelectorProp.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n } //var easer = bez.getEasingCurve(this.ne.v/100,0,1-this.xe.v/100,1);\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;\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 }\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], TextSelectorProp);\n\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorProp(elem, data, arr);\n }\n\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n var pool_factory = function () {\n return function (initialLength, _create, _release, _clone) {\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 = _maxLength * 2;\n }\n\n if (_release) {\n _release(element);\n }\n\n pool[_length] = element;\n _length += 1;\n }\n\n function clone() {\n var clonedElement = newElement();\n return _clone(clonedElement);\n }\n\n return ob;\n };\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 point_pool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n\n return pool_factory(8, create);\n }();\n\n var shape_pool = function () {\n function create() {\n return new ShapePath();\n }\n\n function release(shapePath) {\n var len = shapePath._length,\n i;\n\n for (i = 0; i < len; i += 1) {\n point_pool.release(shapePath.v[i]);\n point_pool.release(shapePath.i[i]);\n point_pool.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 len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n var pt;\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 = pool_factory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n var shapeCollection_pool = 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 len = shapeCollection._length;\n\n for (i = 0; i < len; i += 1) {\n shape_pool.release(shapeCollection.shapes[i]);\n }\n\n shapeCollection._length = 0;\n\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength = _maxLength * 2;\n }\n\n pool[_length] = shapeCollection;\n _length += 1;\n }\n\n return ob;\n }();\n\n var segments_length_pool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n\n function release(element) {\n var i,\n len = element.lengths.length;\n\n for (i = 0; i < len; i += 1) {\n bezier_length_pool.release(element.lengths[i]);\n }\n\n element.lengths.length = 0;\n }\n\n return pool_factory(8, create, release);\n }();\n\n var bezier_length_pool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', defaultCurveSegments),\n lengths: createTypedArray('float32', defaultCurveSegments)\n };\n }\n\n return pool_factory(8, create);\n }();\n\n function BaseRenderer() {}\n\n BaseRenderer.prototype.checkLayers = function (num) {\n var i,\n len = this.layers.length,\n data;\n this.completeLayers = true;\n\n for (i = len - 1; i >= 0; i--) {\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\n return this.createNull(layer);\n };\n\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n\n BaseRenderer.prototype.buildAllItems = function () {\n var i,\n 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 len = newLayers.length;\n var j,\n 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 len = layers.length;\n\n while (i < len) {\n if (layers[i].ind == parentName) {\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 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.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\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 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 progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: config && config.hideOnTransparent === false ? false : true,\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 };\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([BaseRenderer], SVGRenderer);\n\n SVGRenderer.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createText = function (data) {\n return new SVGTextElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n\n SVGRenderer.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\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 }\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(\" + locationHref + \"#\" + maskId + \")\");\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n\n SVGRenderer.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 len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n SVGRenderer.prototype.updateContainerSize = function () {};\n\n SVGRenderer.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 (expressionsPlugin) {\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 if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n\n SVGRenderer.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 len = this.elements.length;\n\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n\n i += 1;\n }\n }\n }\n };\n\n SVGRenderer.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 len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = len - 1; i >= 0; i--) {\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 SVGRenderer.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 SVGRenderer.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n\n SVGRenderer.prototype.show = function () {\n this.layerElement.style.display = 'block';\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 className: config && config.className || '',\n id: config && config.id || ''\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\n extendPrototype([BaseRenderer], CanvasRenderer);\n\n CanvasRenderer.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n\n CanvasRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n CanvasRenderer.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 if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); //this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n\n CanvasRenderer.prototype.ctxOpacity = function (op) {\n /*if(op === 1){\r\n return;\r\n }*/\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n\n this.contextData.cO *= op < 0 ? 0 : op;\n\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n\n CanvasRenderer.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n this.contextData.reset();\n };\n\n CanvasRenderer.prototype.save = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.save();\n }\n\n var props = this.contextData.cTr.props;\n\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n\n var i,\n arr = this.contextData.saved[this.contextData.cArrPos];\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n\n CanvasRenderer.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = 'source-over';\n }\n\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i,\n arr = this.contextData.cTr.props;\n\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n\n CanvasRenderer.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n this.animationItem.container.style.width = '100%';\n this.animationItem.container.style.height = '100%'; //this.animationItem.container.style.transform = 'translate3d(0,0,0)';\n //this.animationItem.container.style.webkitTransform = 'translate3d(0,0,0)';\n\n this.animationItem.container.style.transformOrigin = this.animationItem.container.style.mozTransformOrigin = this.animationItem.container.style.webkitTransformOrigin = this.animationItem.container.style['-webkit-transform'] = \"0px 0px 0px\";\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.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 CanvasRenderer.prototype.updateContainerSize = function () {\n this.reset();\n var elementWidth, elementHeight;\n\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n\n var elementRel, animationRel;\n\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio == 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /*var i, len = this.elements.length;\r\n for(i=0;i= 0; i -= 1) {\n if (this.elements[i]) {\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 CanvasRenderer.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 len = this.layers.length;\n\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n\n for (i = 0; i < len; i++) {\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 CanvasRenderer.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 CanvasRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n CanvasRenderer.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n\n CanvasRenderer.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\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 ? false : true,\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], HybridRenderer);\n HybridRenderer.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n HybridRenderer.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n\n HybridRenderer.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, nextLayer, 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 {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n\n HybridRenderer.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 HybridRenderer.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextElement(data, this.globalData, this);\n }\n\n return new HTextElement(data, this.globalData, this);\n };\n\n HybridRenderer.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n\n HybridRenderer.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 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 HybridRenderer.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 HybridRenderer.prototype.createNull = SVGRenderer.prototype.createNull;\n\n HybridRenderer.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0,\n 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\n HybridRenderer.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n\n if (type === '3d') {\n perspectiveElem.style.width = this.globalData.compSize.w + 'px';\n perspectiveElem.style.height = this.globalData.compSize.h + 'px';\n perspectiveElem.style.transformOrigin = perspectiveElem.style.mozTransformOrigin = perspectiveElem.style.webkitTransformOrigin = \"50% 50%\";\n container.style.transform = container.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\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 HybridRenderer.prototype.build3dContainers = function () {\n var i,\n 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--) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n\n HybridRenderer.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0,\n 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 HybridRenderer.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n resizerElem.style.width = animData.w + 'px';\n resizerElem.style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n resizerElem.style.transformStyle = resizerElem.style.webkitTransformStyle = resizerElem.style.mozTransformStyle = \"flat\";\n\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n\n wrapper.appendChild(resizerElem);\n resizerElem.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 HybridRenderer.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 len = this.layers ? this.layers.length : 0;\n\n for (i = 0; i < len; i++) {\n this.elements[i].destroy();\n }\n\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n\n HybridRenderer.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, sy, tx, 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 this.resizerElem.style.transform = this.resizerElem.style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n };\n\n HybridRenderer.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n HybridRenderer.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n\n HybridRenderer.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n\n HybridRenderer.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 len = this.threeDElements.length;\n\n for (i = 0; i < len; i += 1) {\n this.threeDElements[i].perspectiveElem.style.perspective = this.threeDElements[i].perspectiveElem.style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n }\n }\n };\n\n HybridRenderer.prototype.searchExtraCompositions = function (assets) {\n var i,\n 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 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 len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path,\n properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j, jLen;\n var layerId = createElementID();\n var rect, expansor, feMorph, x;\n var maskType = 'clipPath',\n maskRef = 'clip-path';\n\n for (i = 0; i < len; i++) {\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 continue;\n }\n\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(' + locationHref + '#' + 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 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(\" + locationHref + \"#\" + 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 len = this.masksProperties.length;\n\n for (i = 0; i < len; i++) {\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(' + locationHref + '#' + 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, 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 /**\r\n * @file \r\n * Handles AE's layer parenting property.\r\n *\r\n */\n\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 /**\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\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 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 TransformElement() {}\n\n TransformElement.prototype = {\n initTransform: function initTransform() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\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 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 mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\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 len = transforms.length,\n 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 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 {\n if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n }\n },\n renderRenderable: function renderRenderable() {\n var i,\n 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 } else {\n return {\n w: this.data.width,\n h: this.data.height\n };\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 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 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.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 ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\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 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 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 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 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 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, j, 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(' + locationHref + '#' + 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, j, 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(' + locationHref + '#' + opacityId + ')');\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 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 var ty = data.ty;\n\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 }\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 renderPath(styleData, itemData, isFirstFrame) {\n var j,\n jLen,\n pathStringTransformed,\n redraw,\n pathNodes,\n l,\n lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths, mat, props, iterations, 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--;\n k--;\n }\n\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n iterations--;\n k--;\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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 ;\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 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, i, len, 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 >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\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 ;\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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 ;\n return ob;\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 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 len = sequence.transforms.length,\n _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 var props;\n sequence.finalTransform.reset();\n\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n }\n }\n\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i,\n 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 return '_' + this.transform_key_count++;\n }\n };\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 len = styles.length,\n 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 BaseElement() {}\n\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n\n var i = 0,\n 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 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 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 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 var filId, fil, gg;\n\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = createNS('mask');\n masker.setAttribute('id', this.layerId);\n masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha');\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n if (!featureSupport.maskType && this.data.td == 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(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + locationHref + '#' + filId + ')');\n }\n } else if (this.data.td == 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', this.layerId);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId); ////\n // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n /*var feColorMatrix = createNS('feColorMatrix');\r\n feColorMatrix.setAttribute('type', 'matrix');\r\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n fil.appendChild(feColorMatrix);*/\n ////\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(' + locationHref + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\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 layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n\n this.globalData.defs.appendChild(maskGroup);\n }\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(' + locationHref + '#' + 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(' + locationHref + '#' + clipId + ')');\n }\n }\n\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\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 },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n\n this.matteElement.setAttribute(\"mask\", \"url(\" + locationHref + \"#\" + id + \")\");\n }\n };\n\n function IShapeElement() {}\n\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i,\n 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 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 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\n for (i = len - 1; i >= 0; i -= 1) {\n this.shapeModifiers[i].processShapes(this._isFirstFrame);\n }\n },\n lcEnum: {\n '1': 'butt',\n '2': 'round',\n '3': 'square'\n },\n ljEnum: {\n '1': 'miter',\n '2': 'round',\n '3': 'bevel'\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0,\n 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 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 if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j,\n jLen = shapes.length;\n var k, kLen, pathNodes;\n var shapeStr = '';\n\n for (j = 0; j < jLen; j += 1) {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\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\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 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 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 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 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 IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\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 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 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.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\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\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.audio.volume(volumeValue);\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 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) : []; //this.layerElement = createNS('g');\n\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([SVGRenderer, ICompElement, SVGBaseElement], SVGCompElement);\n\n function SVGTextElement(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], SVGTextElement);\n\n SVGTextElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n\n SVGTextElement.prototype.buildTextContents = function (textArray) {\n var i = 0,\n len = textArray.length;\n var textContents = [],\n 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 SVGTextElement.prototype.buildNewText = function () {\n var i, 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 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 shapes,\n shapeStr = '',\n singleShape = this.data.singleShape;\n var xPos = 0,\n yPos = 0,\n firstLine = true;\n var trackingOffset = documentData.tr / 1000 * 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\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] || 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 this.textSpans[i] = tSpan;\n yPos += documentData.finalLineHeight;\n }\n\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var shapeData, charData;\n\n for (i = 0; i < len; i += 1) {\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i] : createNS(usesGlyphs ? 'path' : '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] = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n\n tSpan.style.display = 'inherit';\n }\n\n matrixHelper.reset();\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\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 shapeData = charData && charData.data || {};\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n\n if (!singleShape) {\n tSpan.setAttribute('d', this.createPathShape(matrixHelper, shapes));\n } else {\n shapeStr += this.createPathShape(matrixHelper, shapes);\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].style.display = 'none';\n i += 1;\n }\n\n this._sizeChanged = true;\n };\n\n SVGTextElement.prototype.sourceRectAtTime = function (time) {\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 SVGTextElement.prototype.renderInnerContent = function () {\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i, len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i];\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 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 len = this.shapes.length,\n shape;\n var j,\n jLen = this.stylesList.length;\n var style,\n count = 0;\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 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(' + locationHref + '#' + elementData.maskId + ')');\n }\n }\n\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', this.lcEnum[data.lc] || 'round');\n pathElement.setAttribute('stroke-linejoin', this.ljEnum[data.lj] || 'round');\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 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 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 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 len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n styleOb,\n currentTransform,\n modifier,\n 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') {\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 container.appendChild(itemsData[i].style.pElem);\n }\n\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty == 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n\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 container.appendChild(itemsData[i].gr);\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') {\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 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 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 SVGTintFilter(filter, filterManager) {\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 feColorMatrix.setAttribute('result', 'f1');\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', 'f2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n\n if (filterManager.effectElements[2].p.v !== 100 || filterManager.effectElements[2].p.k) {\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'f2');\n feMerge.appendChild(feMergeNode);\n }\n }\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.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager) {\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 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 SVGGaussianBlurEffect(filter, filterManager) {\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 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;\n var sigmaY = dimensions == 2 ? 0 : sigma;\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';\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function SVGStrokeEffect(elem, filterManager) {\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, groupPath, i, 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(' + locationHref + '#' + 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 len = this.paths.length;\n var mask, path;\n\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m === -1) {\n continue;\n }\n\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) / 100;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) / 100;\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 / 100;\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 / 100 + ' ';\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 / 100;\n }\n\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n\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(' + bm_floor(color[0] * 255) + ',' + bm_floor(color[1] * 255) + ',' + bm_floor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager) {\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 feColorMatrix.setAttribute('result', 'f1');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\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 }\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); //var opacity = this.filterManager.effectElements[2].p.v/100;\n //this.matrixFilter.setAttribute('values',(colorWhite[0]- colorBlack[0])+' 0 0 0 '+ colorBlack[0] +' '+ (colorWhite[1]- colorBlack[1]) +' 0 0 0 '+ colorBlack[1] +' '+ (colorWhite[2]- colorBlack[2]) +' 0 0 0 '+ colorBlack[2] +' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n var feFuncR, feFuncG, feFuncB;\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 }\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 }\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 }\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 }\n\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n feComponentTransfer = createNS('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.setAttribute('color-interpolation-filters', 'sRGB');\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 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, cnt, perc, bezier;\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) {\n var filterSize = filterManager.container.globalData.renderConfig.filterSize;\n filter.setAttribute('x', filterSize.x);\n filter.setAttribute('y', filterSize.y);\n filter.setAttribute('width', filterSize.width);\n filter.setAttribute('height', filterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', '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', 'drop_shadow_1');\n feOffset.setAttribute('result', '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', 'drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', 'drop_shadow_3');\n feComposite.setAttribute('in2', 'drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', 'drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = createNS('feMerge');\n filter.appendChild(feMerge);\n var feMergeNode;\n feMergeNode = createNS('feMergeNode');\n feMerge.appendChild(feMergeNode);\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', 'SourceGraphic');\n this.feMergeNode = feMergeNode;\n this.feMerge = feMerge;\n this.originalNodeAdded = false;\n feMerge.appendChild(feMergeNode);\n }\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 /*if(forceRender || this.filterManager.effectElements[5].p._mdf){\r\n if(this.filterManager.effectElements[5].p.v === 1 && this.originalNodeAdded) {\r\n this.feMerge.removeChild(this.feMergeNode);\r\n this.originalNodeAdded = false;\r\n } else if(this.filterManager.effectElements[5].p.v === 0 && !this.originalNodeAdded) {\r\n this.feMerge.appendChild(this.feMergeNode);\r\n this.originalNodeAdded = true;\r\n }\r\n }*/\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 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 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 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 SVGEffects(elem) {\n var i,\n len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId);\n var count = 0;\n this.filters = [];\n var filterManager;\n\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n\n if (elem.data.ef[i].ty === 20) {\n count += 1;\n filterManager = new SVGTintFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 21) {\n count += 1;\n filterManager = new SVGFillFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 22) {\n filterManager = new SVGStrokeEffect(elem, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 23) {\n count += 1;\n filterManager = new SVGTritoneFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 24) {\n count += 1;\n filterManager = new SVGProLevelsFilter(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 25) {\n count += 1;\n filterManager = new SVGDropShadowEffect(fil, elem.effectsManager.effectElements[i]);\n } else if (elem.data.ef[i].ty === 28) {\n //count += 1;\n filterManager = new SVGMatte3Effect(fil, elem.effectsManager.effectElements[i], elem);\n } else if (elem.data.ef[i].ty === 29) {\n count += 1;\n filterManager = new SVGGaussianBlurEffect(fil, elem.effectsManager.effectElements[i]);\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(' + locationHref + '#' + 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 len = this.filters.length;\n\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i,\n len = 15;\n this.savedOp = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = len;\n }\n\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray('float32', newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray('float32', 16);\n }\n\n this._length = newLength;\n };\n\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n\n function CVBaseElement() {}\n\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects(this);\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 },\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 renderFrame: function renderFrame() {\n if (this.hidden || this.data.hd) {\n return;\n }\n\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\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 CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getImage(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, 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 (parentMatrix) {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n\n CVImageElement.prototype.destroy = function () {\n this.img = null;\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([CanvasRenderer, 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 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 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 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 len = this.masksProperties.length,\n hasMasks = false;\n\n for (i = 0; i < len; i++) {\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 len = this.masksProperties.length;\n var pt, pts, data;\n ctx.beginPath();\n\n for (i = 0; i < len; i++) {\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 jLen = data._length;\n\n for (j = 1; j < jLen; j++) {\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 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(' + bm_floor(elementData.c.v[0]) + ',' + bm_floor(elementData.c.v[1]) + ',' + bm_floor(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 = this.lcEnum[data.lc] || 'round';\n styleElem.lj = this.ljEnum[data.lj] || 'round';\n\n if (data.lj == 1) {\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 (data) {\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 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 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 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 len = styles.length,\n j,\n jLen;\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 len = arr.length - 1;\n var j, jLen;\n var ownStyles = [],\n ownModifiers = [],\n processedPos,\n modifier,\n 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') {\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 var props, groupMatrix;\n\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 len = this.stylesList.length;\n var j,\n jLen,\n k,\n kLen,\n elems,\n nodes,\n renderer = this.globalData.renderer,\n ctx = this.globalData.canvasContext,\n type,\n 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 continue;\n }\n\n renderer.save();\n elems = currentStyle.elements;\n\n if (type === 'st' || type === 'gs') {\n ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n 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\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 }\n\n renderer.restore();\n }\n };\n\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i,\n 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 len,\n j,\n 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 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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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\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 grd;\n var pt1 = itemData.s.v,\n 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 >= 1 ? 0.99 : itemData.h.v <= -1 ? -0.99 : itemData.h.v;\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 var grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n\n var i,\n 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(' + bm_floor(itemData.c.v[0]) + ',' + bm_floor(itemData.c.v[1]) + ',' + bm_floor(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 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 ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\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, 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 shapeData,\n k,\n kLen,\n shapes,\n j,\n jLen,\n pathNodes,\n commands,\n pathArr,\n singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var xPos = 0,\n yPos = 0,\n 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);\n\n for (j = 0; j < jLen; j += 1) {\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[j] = pathArr;\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 var ctx = this.canvasContext;\n var finalMat = this.finalTransform.mat.props;\n ctx.font = this.values.fValue;\n ctx.lineCap = 'butt';\n ctx.lineJoin = 'miter';\n ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n\n var i, len, j, jLen, k, 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 lastStroke = null,\n lastStrokeW = null,\n commands,\n pathArr;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n continue;\n }\n\n renderedLetter = renderedLetters[i];\n\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n 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 this.globalData.canvasContext.fill(); ///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 ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n 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 this.globalData.canvasContext.stroke(); ///ctx.strokeText(letters[i].val,0,0);\n }\n\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n };\n\n function CVEffects() {}\n\n CVEffects.prototype.renderFrame = function () {};\n\n function HBaseElement(data, globalData, comp) {}\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 if (this.finalTransform._matMdf) {\n this.transformedElement.style.transform = this.transformedElement.style.webkitTransform = this.finalTransform.mat.toCSS();\n }\n\n if (this.finalTransform._opMdf) {\n this.transformedElement.style.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 = HybridRenderer.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 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([HybridRenderer, 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 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 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 len = shape._length,\n vPoint,\n oPoint,\n nextIPoint,\n nextVPoint,\n bounds;\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 = bm_min(bounds.left, boundingBox.x);\n boundingBox.xMax = bm_max(bounds.right, boundingBox.xMax);\n boundingBox.y = bm_min(bounds.top, boundingBox.y);\n boundingBox.yMax = bm_max(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 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 = b | 0;\n a = a | 0;\n c = c | 0;\n\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n\n t = -c / b;\n\n if (0 < t && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n\n continue;\n }\n\n b2ac = b * b - 4 * c * a;\n\n if (b2ac < 0) {\n continue;\n }\n\n t1 = (-b + bm_sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bm_sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n\n this.shapeBoundingBox.left = bm_min.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bm_min.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bm_max.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bm_max.apply(null, bounds[1]);\n };\n\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bm_pow(1 - t, 3) * p0[i] + 3 * bm_pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bm_pow(t, 2) * p2[i] + bm_pow(t, 3) * p3[i];\n };\n\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i,\n len = itemsData.length,\n path;\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 }\n }\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 this.shapeCont.style.transform = this.shapeCont.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\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 innerElemStyle.color = innerElemStyle.fill = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\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 fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n\n var i, len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan, tParent, tCont;\n var matrixHelper = this.mHelper;\n var shapes,\n 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', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\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 {\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n }\n } //tSpan.setAttribute('visibility', 'hidden');\n\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) {\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 tCont.style.transform = tCont.style.webkitTransform = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\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 tSpan.style.transform = tSpan.style.webkitTransform = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\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 if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n } else {\n // Todo Benchmark if using this is better than getBBox\n if (this.isMasked && this.finalTransform._matMdf) {\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n }\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 len,\n count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter, textSpan, textPath;\n\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n continue;\n }\n\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.transform = textSpan.style.webkitTransform = 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 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 this.svgElement.style.transform = this.svgElement.style.webkitTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n }\n }\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.src = assetPath;\n\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\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 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 len = this.comp.threeDElements.length,\n comp;\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 comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.webkitPerspective = this.pe.v + 'px';\n comp.container.style.transformOrigin = comp.container.style.mozTransformOrigin = comp.container.style.webkitTransformOrigin = \"0px 0px 0px\";\n comp.perspectiveElem.style.transform = comp.perspectiveElem.style.webkitTransform = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\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, 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 var mat;\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 m_rotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var m_rotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(m_rotationY).rotateX(-m_rotationX);\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\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n comp.container.style.transform = comp.container.style.webkitTransform = this.mat.toCSS();\n }\n\n if (this.pe._mdf) {\n comp.perspectiveElem.style.perspective = comp.perspectiveElem.style.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 HEffects() {}\n\n HEffects.prototype.renderFrame = function () {};\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 len = registeredAnimations.length;\n var animations = [];\n\n for (i = 0; i < len; 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 len = animElements.length;\n\n for (i = 0; i < len; 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 && len === 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 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 = subframeEnabled;\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 };\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 = params.animType ? params.animType : params.renderer ? params.renderer : 'svg';\n\n switch (animType) {\n case 'canvas':\n this.renderer = new CanvasRenderer(this, params.rendererSettings);\n break;\n\n case 'svg':\n this.renderer = new SVGRenderer(this, params.rendererSettings);\n break;\n\n default:\n this.renderer = new HybridRenderer(this, params.rendererSettings);\n break;\n }\n\n this.imagePreloader.setCacheType(animType);\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);\n }\n\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = params.hasOwnProperty('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.configAnimation(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 assetLoader.load(params.path, this.configAnimation.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n }\n };\n\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n var params = {\n wrapper: wrapper,\n animationData: animationData ? typeof animationData === \"object\" ? animationData : JSON.parse(animationData) : null\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n if (loop === '') {} else if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else {\n params.loop = parseInt(loop);\n }\n\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') ? 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') ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') ? 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 this.setParams(params);\n };\n\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n\n var layers = this.animationData.layers;\n var i,\n len = layers.length;\n var newLayers = data.layers;\n var j,\n 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.completeData(this.animationData, this.renderer.globalData.fontManager);\n this.renderer.includeLayers(data.layers);\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 assetLoader.load(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.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.loaded() || this.renderer.rendererType !== 'canvas')) {\n this.isLoaded = true;\n dataManager.completeData(this.animationData, this.renderer.globalData.fontManager);\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 () {\n this.renderer.updateContainerSize();\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;\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 };\n\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false) {\n return;\n }\n\n try {\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.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._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.goToAndStop = function (value, isFrame, name) {\n if (name && this.name != name) {\n return;\n }\n\n 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 this.goToAndStop(value, isFrame, name);\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 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.timeCompleted = this.totalFrames = arr[0] - arr[1];\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.timeCompleted = this.totalFrames = arr[1] - arr[0];\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.timeCompleted = this.totalFrames = end - init;\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 arr[0] === 'object') {\n var i,\n 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]); //this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);\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 = this.onLoopComplete = this.onComplete = this.onSegmentStart = this.onDestroy = null;\n this.renderer = 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.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 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\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.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 '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 Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\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 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 expressionsPlugin = Expressions;\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\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n }\n\n function $bm_neg(a) {\n var tOfA = typeof a;\n\n if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n return -a;\n }\n\n if ($bm_isInstanceOfArray(a)) {\n var i,\n 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\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, .833, .833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, .667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(.33, 0, .667, 1, 'easeInOut').get;\n\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n\n if (tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = 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 lenA = a.length,\n 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 a;\n var tOfB = typeof b;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a);\n }\n\n if (tOfB === 'string') {\n b = parseInt(b);\n }\n\n return a - b;\n }\n\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] = 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 lenA = a.length,\n 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 a;\n var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n\n var i, 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 a;\n var tOfB = typeof b;\n var arr;\n\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n\n var i, 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);\n }\n\n if (typeof b === 'string') {\n b = parseInt(b);\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 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 min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n\n if (max == min) {\n h = 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\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, g, b;\n\n if (s === 0) {\n r = g = b = 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 } else 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 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 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 len = points.length;\n var path = shape_pool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0],\n inVertexPoint,\n 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 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, $bm_transform, content, 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, loop_in, loopOut, loop_out, smooth;\n var toWorld, fromWorld, fromComp, toComp, fromCompToSurface, position, rotation, anchorPoint, scale, thisLayer, thisComp, mask, valueAtTime, velocityAtTime;\n var __expression_functions = [];\n\n if (data.xf) {\n var i,\n len = data.xf.length;\n\n for (i = 0; i < len; i += 1) {\n __expression_functions[i] = eval('(function(){ return ' + data.xf[i] + '}())');\n }\n }\n\n var scoped_bm_rt;\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}' + ']')[0];\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 i,\n j,\n len = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', len);\n freq = 5;\n var iterations = Math.floor(time * freq);\n i = 0;\n j = 0;\n\n while (i < iterations) {\n //var rnd = BMMath.random();\n for (j = 0; j < len; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random(); //addedAmps[j] += -amp + amp*2*rnd;\n }\n\n i += 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', len);\n\n if (len > 1) {\n for (j = 0; j < len; 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 } else {\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }\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 t = t > 1 ? 1 : t < 0 ? 0 : t;\n var mult = fn(t);\n\n if ($bm_isInstanceOfArray(val1)) {\n var i,\n len = val1.length;\n var arr = createTypedArray('float32', len);\n\n for (i = 0; i < len; i += 1) {\n arr[i] = (val2[i] - val1[i]) * mult + val1[i];\n }\n\n return arr;\n } else {\n return (val2 - val1) * mult + val1;\n }\n }\n\n function nearestKey(time) {\n var i,\n len = data.k.length,\n index,\n 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 (i = 0; i < len - 1; i += 1) {\n if (time === data.k[i].t) {\n index = i + 1;\n keyTime = data.k[i].t;\n break;\n } else if (time > data.k[i].t && time < data.k[i + 1].t) {\n if (time - data.k[i].t > data.k[i + 1].t - time) {\n index = i + 2;\n keyTime = data.k[i + 1].t;\n } else {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n\n break;\n }\n }\n\n if (index === -1) {\n index = i + 1;\n keyTime = data.k[i].t;\n }\n }\n }\n\n var ob = {};\n ob.index = index;\n ob.time = keyTime / elem.comp.globalData.frameRate;\n return ob;\n }\n\n function key(ind) {\n var ob, i, len;\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 ob = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = data.k[ind].hasOwnProperty('s') ? data.k[ind].s : data.k[ind - 1].e;\n len = arr.length;\n\n for (i = 0; i < len; i += 1) {\n ob[i] = arr[i];\n ob.value[i] = arr[i];\n }\n\n return ob;\n }\n\n function framesToTime(frames, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n\n return frames / 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, velocity, value, text, textIndex, textTotal, 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 (_needsRandom) {\n seedRandom(randSeed);\n }\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 (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\n if (scoped_bm_rt.propType === \"shape\") {\n scoped_bm_rt = scoped_bm_rt.v;\n } // globalData.popExpression();\n\n\n return scoped_bm_rt;\n }\n\n return executeExpression;\n }\n\n ob.initiateExpression = initiateExpression;\n return ob;\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 } else {\n var cycleDuration, 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 - elem.comp.globalData.frameRate * duration);\n }\n\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n\n var i, len, 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);\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);\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;\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);\n }\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 } else {\n var cycleDuration, 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(elem.comp.globalData.frameRate * duration);\n }\n\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n\n var i, len, 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);\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);\n }\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 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 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 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(time) {\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: shape_pool.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 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 len = lengths.length;\n var j = 0,\n jLen;\n var accumulatedLength = 0,\n 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 perc = perc == 1 ? this.v.c ? 0 : 0.999 : perc;\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 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\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 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\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 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 } else {\n return parentPropertyGroup(val - 1);\n }\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 } else {\n return propertyGroup(--val);\n }\n }\n\n return _propertyGroup;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i,\n 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 }\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 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\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 } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\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 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 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 } else if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n } else if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\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\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\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\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 || 'ADBE Vector Star Outer Radius' === value) {\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 || 'ADBE Vector Star Inner Radius' === value)) {\n return interfaceFunction.innerRadius;\n }\n\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\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\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 || 'Round Corners 1' === value) {\n return interfaceFunction.radius;\n }\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 || 'Copies' === value) {\n return interfaceFunction.copies;\n } else if (shape.o.ix === value || 'Offset' === value) {\n return interfaceFunction.offset;\n }\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 } else {\n return interfaces[value - 1];\n }\n } else {\n var i = 0,\n 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 }\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 _prevValue, _sourceText;\n\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Text Document\":\n return _thisLayerFunction.sourceText;\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 (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue); //If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n _sourceText.value = stringValue ? stringValue : new String(stringValue);\n }\n\n return _sourceText;\n }\n });\n return _thisLayerFunction;\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] = toWorldMat.props[13] = 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] = toWorldMat.props[13] = 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 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 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 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 }\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 CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0,\n 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 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 }\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 if (transform.p) {\n var _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n var _px = ExpressionPropertyInterface(transform.px);\n\n var _py = ExpressionPropertyInterface(transform.py);\n\n var _pz;\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 } else {\n return [_px(), _py(), _pz ? _pz() : 0];\n }\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 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 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\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\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 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, 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\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n }\n\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef,\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 if (effects[i].ty === 5) {\n return effectElements[i];\n } else {\n return effectElements[i]();\n }\n }\n\n i += 1;\n }\n\n throw new Error();\n }\n\n ;\n\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n var effectElements = [];\n var i,\n 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.active = groupInterface.enabled = data.en !== 0;\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 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, elem) {\n var _maskManager = maskManager;\n var _elem = elem;\n\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n var i,\n 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\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 } else {\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);\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\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);\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);\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 expressionValue[i] = arrValue[i] = property.v[i] * mult;\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 } else if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n } else {\n return MultidimensionalPropertyInterface(property);\n }\n };\n }();\n\n (function () {\n var TextExpressionSelectorProp = function () {\n function getValueProxy(index, total) {\n this.textIndex = index + 1;\n this.textTotal = total;\n this.v = this.getValue() * this.mult;\n return this.v;\n }\n\n return function TextExpressionSelectorProp(elem, data) {\n this.pv = 1;\n this.comp = elem.comp;\n this.elem = elem;\n this.mult = 0.01;\n this.propType = 'textSelector';\n this.textTotal = data.totalChars;\n this.selectorValue = 100;\n this.lastValue = [1, 1, 1];\n this.k = true;\n this.x = true;\n this.getValue = ExpressionManager.initiateExpression.bind(this)(elem, data, this);\n this.getMult = getValueProxy;\n this.getVelocityAtTime = expressionHelpers.getVelocityAtTime;\n\n if (this.kf) {\n this.getValueAtTime = expressionHelpers.getValueAtTime.bind(this);\n } else {\n this.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(this);\n }\n\n this.setGroupProperty = expressionHelpers.setGroupProperty;\n };\n }();\n\n var propertyGetTextProp = TextSelectorProp.getTextSelectorProp;\n\n TextSelectorProp.getTextSelectorProp = function (elem, data, arr) {\n if (data.t === 1) {\n return new TextExpressionSelectorProp(elem, data, arr);\n } else {\n return propertyGetTextProp(elem, data, arr);\n }\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 len = effects.length;\n var effectItem;\n\n for (i = 0; i < len; i++) {\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 len = this.data.ef.length;\n var eff,\n 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 var lottie = {};\n var _isFrozen = false;\n\n function setLocationHref(href) {\n locationHref = 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 subframeEnabled = flag;\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 defaultCurveSegments = 200;\n break;\n\n case 'medium':\n defaultCurveSegments = 50;\n break;\n\n case 'low':\n defaultCurveSegments = 10;\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n defaultCurveSegments = value;\n }\n\n if (defaultCurveSegments >= 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 expressionsPlugin = 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 }\n\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocationHref;\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.__getFactory = getFactory;\n lottie.version = '5.7.4';\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++) {\n var pair = vars[i].split('=');\n\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n }\n\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\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 var queryString = myScript.src.replace(/^[^\\?]+\\??/, '');\n renderer = getQueryVariable('renderer');\n }\n\n var readyStateCheckInterval = setInterval(checkReady, 100);\n return lottie;\n});"],"sourceRoot":""}