!function(shared,scope,testing){function webAnimationsNextTick(t){var timeline=window.document.timeline;timeline.currentTime=t,timeline._discardAnimations(),0==timeline._animations.length?ticking=!1:requestAnimationFrame(webAnimationsNextTick)}scope.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},scope.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},getAnimationPlayers:function(){return shared.deprecated("AnimationTimeline.getAnimationPlayers","2015-03-23","Use AnimationTimeline.getAnimations instead."),this.getAnimations()},_discardAnimations:function(){this._animations=this._animations.filter(function(animation){return"finished"!=animation.playState&&"idle"!=animation.playState})},play:function(effect){var animation=new scope.Animation(effect);return this._animations.push(animation),scope.restartWebAnimationsNextTick(),animation._animation.play(),animation}};var ticking=!1;scope.restartWebAnimationsNextTick=function(){ticking||(ticking=!0,requestAnimationFrame(webAnimationsNextTick))};var timeline=new scope.AnimationTimeline;scope.timeline=timeline;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return timeline}})}catch(e){}try{window.document.timeline=timeline}catch(e){}}(webAnimationsShared,webAnimationsNext,webAnimationsTesting),function(shared,scope,testing){scope.Animation=function(effect){this.effect=effect,effect&&(effect.animation=this),this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._rebuildUnderlyingAnimation(),this._animation.cancel()},scope.Animation.prototype={_rebuildUnderlyingAnimation:function(){this._animation&&(this._animation.cancel(),this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=scope.newUnderlyingAnimationForKeyframeEffect(this.effect),scope.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=scope.newUnderlyingAnimationForGroup(this.effect),scope.bindAnimationForGroup(this))},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var offset=this.effect._timing.delay;this._childAnimations.forEach(function(childAnimation){this._arrangeChildren(childAnimation,offset),this.effect instanceof window.SequenceEffect&&(offset+=scope.groupChildDuration(childAnimation.effect))}.bind(this))}},_setExternalAnimation:function(animation){if(this.effect&&this._isGroup)for(var i=0;i