diff --git a/views/ngXosViews/truckroll/bower.json b/views/ngXosViews/truckroll/bower.json
index c0f3265..a1000df 100644
--- a/views/ngXosViews/truckroll/bower.json
+++ b/views/ngXosViews/truckroll/bower.json
@@ -14,9 +14,7 @@
     "test",
     "tests"
   ],
-  "dependencies": {
-    "angular-animate": "~1.5.0"
-  },
+  "dependencies": {},
   "devDependencies": {
     "jquery": "~2.1.4",
     "angular-mocks": "~1.4.7",
diff --git a/views/ngXosViews/truckroll/src/index.html b/views/ngXosViews/truckroll/src/index.html
index 048c112..0b6606e 100644
--- a/views/ngXosViews/truckroll/src/index.html
+++ b/views/ngXosViews/truckroll/src/index.html
@@ -20,7 +20,6 @@
 <script src="vendor/angular-resource/angular-resource.js"></script>
 <script src="vendor/ng-lodash/build/ng-lodash.js"></script>
 <script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
 <!-- endbower --><!-- endjs -->
 <!-- inject:js -->
 <script src="/xosHelpers/src/xosHelpers.module.js"></script>
diff --git a/xos/core/xoslib/dashboards/xosTruckroll.html b/xos/core/xoslib/dashboards/xosTruckroll.html
index ab289f2..d5e2cbf 100644
--- a/xos/core/xoslib/dashboards/xosTruckroll.html
+++ b/xos/core/xoslib/dashboards/xosTruckroll.html
@@ -1,7 +1,8 @@
 <!-- browserSync -->
 
 <!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosTruckroll.css">
+<link rel="stylesheet" href="/css/dev.css">
+<link rel="stylesheet" href="/css/truckroll.css">
 <!-- endinject -->
 
 <div id="xosTruckroll">
@@ -10,6 +11,5 @@
 
 
 <!-- inject:js -->
-<script src="/static/js/vendor/xosTruckrollVendor.js"></script>
 <script src="/static/js/xosTruckroll.js"></script>
 <!-- endinject -->
diff --git a/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js b/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js
deleted file mode 100644
index 81b0d27..0000000
--- a/xos/core/xoslib/static/js/vendor/xosTruckrollVendor.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(n,t,e){"use strict";function a(n,t,e){if(!n)throw gn("areq","Argument '{0}' is {1}",t||"?",e||"required");return n}function r(n,t){return n||t?n?t?(K(n)&&(n=n.join(" ")),K(t)&&(t=t.join(" ")),n+" "+t):n:t:""}function i(n){var t={};return n&&(n.to||n.from)&&(t.to=n.to,t.from=n.from),t}function o(n,t,e){var a="";return n=K(n)?n:n&&Q(n)&&n.length?n.split(/\s+/):[],J(n,function(n,r){n&&n.length>0&&(a+=r>0?" ":"",a+=e?t+n:n+t)}),a}function s(n,t){var e=n.indexOf(t);t>=0&&n.splice(e,1)}function u(n){if(n instanceof B)switch(n.length){case 0:return[];case 1:if(n[0].nodeType===X)return n;break;default:return B(l(n))}return n.nodeType===X?B(n):void 0}function l(n){if(!n[0])return n;for(var t=0;t<n.length;t++){var e=n[t];if(e.nodeType==X)return e}}function c(n,t,e){J(t,function(t){n.addClass(t,e)})}function f(n,t,e){J(t,function(t){n.removeClass(t,e)})}function m(n){return function(t,e){e.addClass&&(c(n,t,e.addClass),e.addClass=null),e.removeClass&&(f(n,t,e.removeClass),e.removeClass=null)}}function v(n){if(n=n||{},!n.$$prepared){var t=n.domOperation||q;n.domOperation=function(){n.$$domOperationFired=!0,t(),t=q},n.$$prepared=!0}return n}function d(n,t){p(n,t),h(n,t)}function p(n,t){t.from&&(n.css(t.from),t.from=null)}function h(n,t){t.to&&(n.css(t.to),t.to=null)}function g(n,t,e){var a=t.options||{},r=e.options||{},i=(a.addClass||"")+" "+(r.addClass||""),o=(a.removeClass||"")+" "+(r.removeClass||""),s=$(n.attr("class"),i,o);r.preparationClasses&&(a.preparationClasses=w(r.preparationClasses,a.preparationClasses),delete r.preparationClasses);var u=a.domOperation!==q?a.domOperation:null;return H(a,r),u&&(a.domOperation=u),s.addClass?a.addClass=s.addClass:a.addClass=null,s.removeClass?a.removeClass=s.removeClass:a.removeClass=null,t.addClass=a.addClass,t.removeClass=a.removeClass,a}function $(n,t,e){function a(n){Q(n)&&(n=n.split(" "));var t={};return J(n,function(n){n.length&&(t[n]=!0)}),t}var r=1,i=-1,o={};n=a(n),t=a(t),J(t,function(n,t){o[t]=r}),e=a(e),J(e,function(n,t){o[t]=o[t]===r?null:i});var s={addClass:"",removeClass:""};return J(o,function(t,e){var a,o;t===r?(a="addClass",o=!n[e]):t===i&&(a="removeClass",o=n[e]),o&&(s[a].length&&(s[a]+=" "),s[a]+=e)}),s}function C(n){return n instanceof t.element?n[0]:n}function y(n,t,e){var a="";t&&(a=o(t,_,!0)),e.addClass&&(a=w(a,o(e.addClass,Y))),e.removeClass&&(a=w(a,o(e.removeClass,Z))),a.length&&(e.preparationClasses=a,n.addClass(a))}function D(n,t){t.preparationClasses&&(n.removeClass(t.preparationClasses),t.preparationClasses=null),t.activeClasses&&(n.removeClass(t.activeClasses),t.activeClasses=null)}function b(n,t){var e=t?"-"+t+"s":"";return k(n,[pn,e]),[pn,e]}function A(n,t){var e=t?"paused":"",a=I+fn;return k(n,[a,e]),[a,e]}function k(n,t){var e=t[0],a=t[1];n.style[e]=a}function w(n,t){return n?t?n+" "+t:n:t}function T(n){return[dn,n+"s"]}function S(n,t){var e=t?vn:pn;return[e,n+"s"]}function j(n,t,e){var a=Object.create(null),r=n.getComputedStyle(t)||{};return J(e,function(n,t){var e=r[n];if(e){var i=e.charAt(0);("-"===i||"+"===i||i>=0)&&(e=x(e)),0===e&&(e=null),a[t]=e}}),a}function x(n){var t=0,e=n.split(/\s*,\s*/);return J(e,function(n){"s"==n.charAt(n.length-1)&&(n=n.substring(0,n.length-1)),n=parseFloat(n)||0,t=t?Math.max(n,t):n}),t}function O(n){return 0===n||null!=n}function P(n,t){var e=M,a=n+"s";return t?e+=on:a+=" linear all",[e,a]}function N(){var n=Object.create(null);return{flush:function(){n=Object.create(null)},count:function(t){var e=n[t];return e?e.total:0},get:function(t){var e=n[t];return e&&e.value},put:function(t,e){n[t]?n[t].total++:n[t]={total:1,value:e}}}}function F(n,t,e){J(e,function(e){n[e]=V(n[e])?n[e]:t.style.getPropertyValue(e)})}var M,E,I,R,q=t.noop,L=t.copy,H=t.extend,B=t.element,J=t.forEach,K=t.isArray,Q=t.isString,U=t.isObject,W=t.isUndefined,V=t.isDefined,z=t.isFunction,G=t.isElement,X=1,Y="-add",Z="-remove",_="ng-",nn="-active",tn="-prepare",en="ng-animate",an="$$ngAnimateChildren",rn="";W(n.ontransitionend)&&V(n.onwebkittransitionend)?(rn="-webkit-",M="WebkitTransition",E="webkitTransitionEnd transitionend"):(M="transition",E="transitionend"),W(n.onanimationend)&&V(n.onwebkitanimationend)?(rn="-webkit-",I="WebkitAnimation",R="webkitAnimationEnd animationend"):(I="animation",R="animationend");var on="Duration",sn="Property",un="Delay",ln="TimingFunction",cn="IterationCount",fn="PlayState",mn=9999,vn=I+un,dn=I+on,pn=M+un,hn=M+on,gn=t.$$minErr("ng"),$n=["$$rAF",function(n){function t(n){a=a.concat(n),e()}function e(){if(a.length){for(var t=a.shift(),i=0;i<t.length;i++)t[i]();r||n(function(){r||e()})}}var a,r;return a=t.queue=[],t.waitUntilQuiet=function(t){r&&r(),r=n(function(){r=null,t(),e()})},t}],Cn=["$interpolate",function(n){return{link:function(e,a,r){function i(n){n="on"===n||"true"===n,a.data(an,n)}var o=r.ngAnimateChildren;t.isString(o)&&0===o.length?a.data(an,!0):(i(n(o)(e)),r.$observe("ngAnimateChildren",i))}}}],yn="$$animateCss",Dn=1e3,bn=3,An=1.5,kn={transitionDuration:hn,transitionDelay:pn,transitionProperty:M+sn,animationDuration:dn,animationDelay:vn,animationIterationCount:I+cn},wn={transitionDuration:hn,transitionDelay:pn,animationDuration:dn,animationDelay:vn},Tn=["$animateProvider",function(n){var t=N(),e=N();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(n,a,r,u,l,c,f,g){function $(n,t){var e="$$ngAnimateParentKey",a=n.parentNode,r=a[e]||(a[e]=++H);return r+"-"+n.getAttribute("class")+"-"+t}function y(e,a,r,i){var o=t.get(r);return o||(o=j(n,e,i),"infinite"===o.animationIterationCount&&(o.animationIterationCount=1)),t.put(r,o),o}function D(r,i,s,u){var l;if(t.count(s)>0&&(l=e.get(s),!l)){var c=o(i,"-stagger");a.addClass(r,c),l=j(n,r,u),l.animationDuration=Math.max(l.animationDuration,0),l.transitionDuration=Math.max(l.transitionDuration,0),a.removeClass(r,c),e.put(s,l)}return l||{}}function w(n){B.push(n),f.waitUntilQuiet(function(){t.flush(),e.flush();for(var n=l(),a=0;a<B.length;a++)B[a](n);B.length=0})}function x(n,t,e){var a=y(n,t,e,kn),r=a.animationDelay,i=a.transitionDelay;return a.maxDelay=r&&i?Math.max(r,i):r||i,a.maxDuration=Math.max(a.animationDuration*a.animationIterationCount,a.transitionDuration),a}var N=m(a),H=0,B=[];return function(n,e){function l(){m()}function f(){m(!0)}function m(t){if(!(V||G&&z)){V=!0,z=!1,Q.$$skipPreparationClasses||a.removeClass(n,Cn),a.removeClass(n,Tn),A(W,!1),b(W,!1),J(cn,function(n){W.style[n[0]]=""}),N(n,Q),d(n,Q),Object.keys(U).length&&J(U,function(n,t){n?W.style.setProperty(t,n):W.style.removeProperty(t)}),Q.onDone&&Q.onDone(),dn&&dn.length&&n.off(dn.join(" "),H);var e=n.data(yn);e&&(u.cancel(e[0].timer),n.removeData(yn)),X&&X.complete(!t)}}function y(n){Hn.blockTransition&&b(W,n),Hn.blockKeyframeAnimation&&A(W,!!n)}function j(){return X=new r({end:l,cancel:f}),w(q),m(),{$$willAnimate:!1,start:function(){return X},end:l}}function H(n){n.stopPropagation();var t=n.originalEvent||n,e=t.$manualTimeStamp||Date.now(),a=parseFloat(t.elapsedTime.toFixed(bn));Math.max(e-un,0)>=an&&a>=rn&&(G=!0,m())}function B(){function t(){if(!V){if(y(!1),J(cn,function(n){var t=n[0],e=n[1];W.style[t]=e}),N(n,Q),a.addClass(n,Tn),Hn.recalculateTimingStyles){if(kn=W.className+" "+Cn,xn=$(W,kn),qn=x(W,kn,xn),Ln=qn.maxDelay,en=Math.max(Ln,0),rn=qn.maxDuration,0===rn)return void m();Hn.hasTransitions=qn.transitionDuration>0,Hn.hasAnimations=qn.animationDuration>0}if(Hn.applyAnimationDelay&&(Ln="boolean"!=typeof Q.delay&&O(Q.delay)?parseFloat(Q.delay):Ln,en=Math.max(Ln,0),qn.animationDelay=Ln,Bn=S(Ln,!0),cn.push(Bn),W.style[Bn[0]]=Bn[1]),an=en*Dn,on=rn*Dn,Q.easing){var t,r=Q.easing;Hn.hasTransitions&&(t=M+ln,cn.push([t,r]),W.style[t]=r),Hn.hasAnimations&&(t=I+ln,cn.push([t,r]),W.style[t]=r)}qn.transitionDuration&&dn.push(E),qn.animationDuration&&dn.push(R),un=Date.now();var i=an+An*on,o=un+i,s=n.data(yn)||[],l=!0;if(s.length){var c=s[0];l=o>c.expectedEndTime,l?u.cancel(c.timer):s.push(m)}if(l){var f=u(e,i,!1);s[0]={timer:f,expectedEndTime:o},s.push(m),n.data(yn,s)}dn.length&&n.on(dn.join(" "),H),Q.to&&(Q.cleanupStyles&&F(U,W,Object.keys(Q.to)),h(n,Q))}}function e(){var t=n.data(yn);if(t){for(var e=1;e<t.length;e++)t[e]();n.removeData(yn)}}if(!V){if(!W.parentNode)return void m();var r=function(n){if(G)z&&n&&(z=!1,m());else if(z=!n,qn.animationDuration){var t=A(W,z);z?cn.push(t):s(cn,t)}},i=In>0&&(qn.transitionDuration&&0===On.transitionDuration||qn.animationDuration&&0===On.animationDuration)&&Math.max(On.animationDelay,On.transitionDelay);i?u(t,Math.floor(i*In*Dn),!1):t(),tn.resume=function(){r(!0)},tn.pause=function(){r(!1)}}}var Q=e||{};Q.$$prepared||(Q=v(L(Q)));var U={},W=C(n);if(!W||!W.parentNode||!g.enabled())return j();var V,z,G,X,tn,en,an,rn,on,un,cn=[],fn=n.attr("class"),vn=i(Q),dn=[];if(0===Q.duration||!c.animations&&!c.transitions)return j();var pn=Q.event&&K(Q.event)?Q.event.join(" "):Q.event,hn=pn&&Q.structural,gn="",$n="";hn?gn=o(pn,_,!0):pn&&(gn=pn),Q.addClass&&($n+=o(Q.addClass,Y)),Q.removeClass&&($n.length&&($n+=" "),$n+=o(Q.removeClass,Z)),Q.applyClassesEarly&&$n.length&&N(n,Q);var Cn=[gn,$n].join(" ").trim(),kn=fn+" "+Cn,Tn=o(Cn,nn),Sn=vn.to&&Object.keys(vn.to).length>0,jn=(Q.keyframeStyle||"").length>0;if(!jn&&!Sn&&!Cn)return j();var xn,On;if(Q.stagger>0){var Pn=parseFloat(Q.stagger);On={transitionDelay:Pn,animationDelay:Pn,transitionDuration:0,animationDuration:0}}else xn=$(W,kn),On=D(W,Cn,xn,wn);Q.$$skipPreparationClasses||a.addClass(n,Cn);var Nn;if(Q.transitionStyle){var Fn=[M,Q.transitionStyle];k(W,Fn),cn.push(Fn)}if(Q.duration>=0){Nn=W.style[M].length>0;var Mn=P(Q.duration,Nn);k(W,Mn),cn.push(Mn)}if(Q.keyframeStyle){var En=[I,Q.keyframeStyle];k(W,En),cn.push(En)}var In=On?Q.staggerIndex>=0?Q.staggerIndex:t.count(xn):0,Rn=0===In;Rn&&!Q.skipBlocking&&b(W,mn);var qn=x(W,kn,xn),Ln=qn.maxDelay;en=Math.max(Ln,0),rn=qn.maxDuration;var Hn={};if(Hn.hasTransitions=qn.transitionDuration>0,Hn.hasAnimations=qn.animationDuration>0,Hn.hasTransitionAll=Hn.hasTransitions&&"all"==qn.transitionProperty,Hn.applyTransitionDuration=Sn&&(Hn.hasTransitions&&!Hn.hasTransitionAll||Hn.hasAnimations&&!Hn.hasTransitions),Hn.applyAnimationDuration=Q.duration&&Hn.hasAnimations,Hn.applyTransitionDelay=O(Q.delay)&&(Hn.applyTransitionDuration||Hn.hasTransitions),Hn.applyAnimationDelay=O(Q.delay)&&Hn.hasAnimations,Hn.recalculateTimingStyles=$n.length>0,(Hn.applyTransitionDuration||Hn.applyAnimationDuration)&&(rn=Q.duration?parseFloat(Q.duration):rn,Hn.applyTransitionDuration&&(Hn.hasTransitions=!0,qn.transitionDuration=rn,Nn=W.style[M+sn].length>0,cn.push(P(rn,Nn))),Hn.applyAnimationDuration&&(Hn.hasAnimations=!0,qn.animationDuration=rn,cn.push(T(rn)))),0===rn&&!Hn.recalculateTimingStyles)return j();if(null!=Q.delay){var Bn;"boolean"!=typeof Q.delay&&(Bn=parseFloat(Q.delay),en=Math.max(Bn,0)),Hn.applyTransitionDelay&&cn.push(S(Bn)),Hn.applyAnimationDelay&&cn.push(S(Bn,!0))}return null==Q.duration&&qn.transitionDuration>0&&(Hn.recalculateTimingStyles=Hn.recalculateTimingStyles||Rn),an=en*Dn,on=rn*Dn,Q.skipBlocking||(Hn.blockTransition=qn.transitionDuration>0,Hn.blockKeyframeAnimation=qn.animationDuration>0&&On.animationDelay>0&&0===On.animationDuration),Q.from&&(Q.cleanupStyles&&F(U,W,Object.keys(Q.from)),p(n,Q)),Hn.blockTransition||Hn.blockKeyframeAnimation?y(rn):Q.skipBlocking||b(W,!1),{$$willAnimate:!0,end:l,start:function(){return V?void 0:(tn={end:l,cancel:f,resume:null,pause:null},X=new r(tn),w(B),X)}}}}]}],Sn=["$$animationProvider",function(n){function t(n){return n.parentNode&&11===n.parentNode.nodeType}n.drivers.push("$$animateCssDriver");var e="ng-animate-shim",a="ng-anchor",r="ng-anchor-out",i="ng-anchor-in";this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(n,o,s,u,l,c,f){function v(n){return n.replace(/\bng-\S+\b/g,"")}function d(n,t){return Q(n)&&(n=n.split(" ")),Q(t)&&(t=t.split(" ")),n.filter(function(n){return-1===t.indexOf(n)}).join(" ")}function p(t,o,u){function l(n){var t={},e=C(n).getBoundingClientRect();return J(["width","height","top","left"],function(n){var a=e[n];switch(n){case"top":a+=$.scrollTop;break;case"left":a+=$.scrollLeft}t[n]=Math.floor(a)+"px"}),t}function c(){var t=n(h,{addClass:r,delay:!0,from:l(o)});return t.$$willAnimate?t:null}function f(n){return n.attr("class")||""}function m(){var t=v(f(u)),e=d(t,g),a=d(g,t),o=n(h,{to:l(u),addClass:i+" "+e,removeClass:r+" "+a,delay:!0});return o.$$willAnimate?o:null}function p(){h.remove(),o.removeClass(e),u.removeClass(e)}var h=B(C(o).cloneNode(!0)),g=v(f(h));o.addClass(e),u.addClass(e),h.addClass(a),D.append(h);var y,b=c();if(!b&&(y=m(),!y))return p();var A=b||y;return{start:function(){function n(){e&&e.end()}var t,e=A.start();return e.done(function(){return e=null,!y&&(y=m())?(e=y.start(),e.done(function(){e=null,p(),t.complete()}),e):(p(),void t.complete())}),t=new s({end:n,cancel:n})}}}function h(n,t,e,a){var r=g(n,q),i=g(t,q),o=[];return J(a,function(n){var t=n.out,a=n["in"],r=p(e,t,a);r&&o.push(r)}),r||i||0!==o.length?{start:function(){function n(){J(t,function(n){n.end()})}var t=[];r&&t.push(r.start()),i&&t.push(i.start()),J(o,function(n){t.push(n.start())});var e=new s({end:n,cancel:n});return s.all(t,function(n){e.complete(n)}),e}}:void 0}function g(t){var e=t.element,a=t.options||{};t.structural&&(a.event=t.event,a.structural=!0,a.applyClassesEarly=!0,"leave"===t.event&&(a.onDone=a.domOperation)),a.preparationClasses&&(a.event=w(a.event,a.preparationClasses));var r=n(e,a);return r.$$willAnimate?r:null}if(!l.animations&&!l.transitions)return q;var $=f[0].body,y=C(u),D=B(t(y)||$.contains(y)?y:$);m(c);return function(n){return n.from&&n.to?h(n.from,n.to,n.classes,n.anchors):g(n)}}]}],jn=["$animateProvider",function(n){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(t,e,a){function r(e){e=K(e)?e:e.split(" ");for(var a=[],r={},i=0;i<e.length;i++){var o=e[i],s=n.$$registeredAnimations[o];s&&!r[o]&&(a.push(t.get(s)),r[o]=!0)}return a}var i=m(a);return function(n,t,a,o){function s(){o.domOperation(),i(n,o)}function u(){m=!0,s(),d(n,o)}function l(n,t,a,r,i){var o;switch(a){case"animate":o=[t,r.from,r.to,i];break;case"setClass":o=[t,g,$,i];break;case"addClass":o=[t,g,i];break;case"removeClass":o=[t,$,i];break;default:o=[t,i]}o.push(r);var s=n.apply(n,o);if(s)if(z(s.start)&&(s=s.start()),s instanceof e)s.done(i);else if(z(s))return s;return q}function c(n,t,a,r,i){var o=[];return J(r,function(r){var s=r[i];s&&o.push(function(){var r,i,o=!1,u=function(n){o||(o=!0,(i||q)(n),r.complete(!n))};return r=new e({end:function(){u()},cancel:function(){u(!0)}}),i=l(s,n,t,a,function(n){var t=n===!1;u(t)}),r})}),o}function f(n,t,a,r,i){var o=c(n,t,a,r,i);if(0===o.length){var s,u;"beforeSetClass"===i?(s=c(n,"removeClass",a,r,"beforeRemoveClass"),u=c(n,"addClass",a,r,"beforeAddClass")):"setClass"===i&&(s=c(n,"removeClass",a,r,"removeClass"),u=c(n,"addClass",a,r,"addClass")),s&&(o=o.concat(s)),u&&(o=o.concat(u))}if(0!==o.length)return function(n){var t=[];return o.length&&J(o,function(n){t.push(n())}),t.length?e.all(t,n):n(),function(n){J(t,function(t){n?t.cancel():t.end()})}}}var m=!1;3===arguments.length&&U(a)&&(o=a,a=null),o=v(o),a||(a=n.attr("class")||"",o.addClass&&(a+=" "+o.addClass),o.removeClass&&(a+=" "+o.removeClass));var p,h,g=o.addClass,$=o.removeClass,C=r(a);if(C.length){var y,D;"leave"==t?(D="leave",y="afterLeave"):(D="before"+t.charAt(0).toUpperCase()+t.substr(1),y=t),"enter"!==t&&"move"!==t&&(p=f(n,t,o,C,D)),h=f(n,t,o,C,y)}if(p||h){var b;return{$$willAnimate:!0,end:function(){return b?b.end():(u(),b=new e,b.complete(!0)),b},start:function(){function n(n){u(n),b.complete(n)}function t(t){m||((a||q)(t),n(t))}if(b)return b;b=new e;var a,r=[];return p&&r.push(function(n){a=p(n)}),r.length?r.push(function(n){s(),n(!0)}):s(),h&&r.push(function(n){a=h(n)}),b.setHost({end:function(){t()},cancel:function(){t(!0)}}),e.chain(r,n),b}}}}}]}],xn=["$$animationProvider",function(n){n.drivers.push("$$animateJsDriver"),this.$get=["$$animateJs","$$AnimateRunner",function(n,t){function e(t){var e=t.element,a=t.event,r=t.options,i=t.classes;return n(e,a,i,r)}return function(n){if(n.from&&n.to){var a=e(n.from),r=e(n.to);if(!a&&!r)return;return{start:function(){function n(){return function(){J(i,function(n){n.end()})}}function e(n){o.complete(n)}var i=[];a&&i.push(a.start()),r&&i.push(r.start()),t.all(i,e);var o=new t({end:n(),cancel:n()});return o}}}return e(n)}}]}],On="data-ng-animate",Pn="$ngAnimatePin",Nn=["$animateProvider",function(n){function t(n){if(!n)return null;var t=n.split(c),e=Object.create(null);return J(t,function(n){e[n]=!0}),e}function e(n,e){if(n&&e){var a=t(e);return n.split(c).some(function(n){return a[n]})}}function r(n,t,e,a){return f[n].some(function(n){return n(t,e,a)})}function i(n,t){var e=(n.addClass||"").length>0,a=(n.removeClass||"").length>0;return t?e&&a:e||a}var o=1,s=2,c=" ",f=this.rules={skip:[],cancel:[],join:[]};f.join.push(function(n,t,e){return!t.structural&&i(t)}),f.skip.push(function(n,t,e){return!t.structural&&!i(t)}),f.skip.push(function(n,t,e){return"leave"==e.event&&t.structural}),f.skip.push(function(n,t,e){return e.structural&&e.state===s&&!t.structural}),f.cancel.push(function(n,t,e){return e.structural&&t.structural}),f.cancel.push(function(n,t,e){return e.state===s&&t.structural}),f.cancel.push(function(n,t,a){var r=t.addClass,i=t.removeClass,o=a.addClass,s=a.removeClass;return W(r)&&W(i)||W(o)&&W(s)?!1:e(r,s)||e(i,o)}),this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(t,e,c,f,p,h,$,b,A,k){function w(){var n=!1;return function(t){n?t():e.$$postDigest(function(){n=!0,t()})}}function T(n,t){return g(n,t,{})}function S(n,t,e){var a=C(t),r=C(n),i=[],o=q[e];return o&&J(o,function(n){_.call(n.node,a)?i.push(n.callback):"leave"===e&&_.call(n.node,r)&&i.push(n.callback)}),i}function j(n,a,l){function c(e,a,r,i){j(function(){var e=S(b,n,a);e.length&&t(function(){J(e,function(t){t(n,r,i)})})}),e.progress(a,r,i)}function m(t){D(n,A),Z(n,A),d(n,A),A.domOperation(),k.complete(!t)}var p,b,A=L(l);n=u(n),n&&(p=C(n),b=n.parent()),A=v(A);var k=new $,j=w();if(K(A.addClass)&&(A.addClass=A.addClass.join(" ")),A.addClass&&!Q(A.addClass)&&(A.addClass=null),K(A.removeClass)&&(A.removeClass=A.removeClass.join(" ")),A.removeClass&&!Q(A.removeClass)&&(A.removeClass=null),A.from&&!U(A.from)&&(A.from=null),A.to&&!U(A.to)&&(A.to=null),!p)return m(),k;var P=[p.className,A.addClass,A.removeClass].join(" ");if(!Y(P))return m(),k;var R=["enter","move","leave"].indexOf(a)>=0,q=!I||f[0].hidden||E.get(p),H=!q&&M.get(p)||{},B=!!H.state;if(q||B&&H.state==o||(q=!N(n,b,a)),q)return m(),k;R&&x(n);var W={structural:R,element:n,event:a,addClass:A.addClass,removeClass:A.removeClass,close:m,options:A,runner:k};if(B){var V=r("skip",n,W,H);if(V)return H.state===s?(m(),k):(g(n,H,W),H.runner);var z=r("cancel",n,W,H);if(z)if(H.state===s)H.runner.end();else{if(!H.structural)return g(n,H,W),H.runner;H.close()}else{var G=r("join",n,W,H);if(G){if(H.state!==s)return y(n,R?a:null,A),a=W.event=H.event,A=g(n,H,W),H.runner;T(n,W)}}}else T(n,W);var X=W.structural;if(X||(X="animate"===W.event&&Object.keys(W.options.to||{}).length>0||i(W)),!X)return m(),O(n),k;var _=(H.counter||0)+1;return W.counter=_,F(n,o,W),e.$$postDigest(function(){var t=M.get(p),e=!t;t=t||{};var r=n.parent()||[],o=r.length>0&&("animate"===t.event||t.structural||i(t));if(e||t.counter!==_||!o)return e&&(Z(n,A),d(n,A)),(e||R&&t.event!==a)&&(A.domOperation(),k.end()),void(o||O(n));a=!t.structural&&i(t,!0)?"setClass":t.event,F(n,s);var u=h(n,a,t.options);u.done(function(t){m(!t);var e=M.get(p);e&&e.counter===_&&O(C(n)),c(k,a,"close",{})}),k.setHost(u),c(k,a,"start",{})}),k}function x(n){var t=C(n),e=t.querySelectorAll("["+On+"]");J(e,function(n){var t=parseInt(n.getAttribute(On)),e=M.get(n);if(e)switch(t){case s:e.runner.end();case o:M.remove(n)}})}function O(n){var t=C(n);t.removeAttribute(On),M.remove(t)}function P(n,t){return C(n)===C(t)}function N(n,t,e){var a,r=B(f[0].body),i=P(n,r)||"HTML"===n[0].nodeName,o=P(n,c),s=!1,u=E.get(C(n)),l=n.data(Pn);for(l&&(t=l);t&&t.length;){o||(o=P(t,c));var m=t[0];if(m.nodeType!==X)break;var v=M.get(m)||{};if(!s){var d=E.get(m);if(d===!0&&u!==!1){u=!0;break}d===!1&&(u=!1),s=v.structural}if(W(a)||a===!0){var p=t.data(an);V(p)&&(a=p)}if(s&&a===!1)break;if(i||(i=P(t,r)),i&&o)break;t=o||!(l=t.data(Pn))?t.parent():l}var h=(!s||a)&&u!==!0;return h&&o&&i}function F(n,t,e){e=e||{},e.state=t;var a=C(n);a.setAttribute(On,t);var r=M.get(a),i=r?H(r,e):e;M.put(a,i)}var M=new p,E=new p,I=null,R=e.$watch(function(){return 0===b.totalPendingRequests},function(n){n&&(R(),e.$$postDigest(function(){e.$$postDigest(function(){null===I&&(I=!0)})}))}),q={},z=n.classNameFilter(),Y=z?function(n){return z.test(n)}:function(){return!0},Z=m(A),_=Node.prototype.contains||function(n){return this===n||!!(16&this.compareDocumentPosition(n))};return{on:function(n,t,e){var a=l(t);q[n]=q[n]||[],q[n].push({node:a,callback:e})},off:function(n,t,e){function a(n,t,e){var a=l(t);return n.filter(function(n){var t=n.node===a&&(!e||n.callback===e);return!t})}var r=q[n];r&&(q[n]=1===arguments.length?null:a(r,t,e))},pin:function(n,t){a(G(n),"element","not an element"),a(G(t),"parentElement","not an element"),n.data(Pn,t)},push:function(n,t,e,a){return e=e||{},e.domOperation=a,j(n,t,e)},enabled:function(n,t){var e=arguments.length;if(0===e)t=!!I;else{var a=G(n);if(a){var r=C(n),i=E.get(r);1===e?t=!i:E.put(r,!t)}else t=I=!!n}return t}}}]}],Fn=["$animateProvider",function(n){function t(n,t){n.data(s,t)}function e(n){n.removeData(s)}function a(n){return n.data(s)}var i="ng-animate-ref",o=this.drivers=[],s="$$animationRunner";this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(n,s,u,l,c,f){function p(n){function t(n){if(n.processed)return n;n.processed=!0;var e=n.domNode,a=e.parentNode;i.put(e,n);for(var o;a;){if(o=i.get(a)){o.processed||(o=t(o));break}a=a.parentNode}return(o||r).children.push(n),n}function e(n){var t,e=[],a=[];for(t=0;t<n.children.length;t++)a.push(n.children[t]);var r=a.length,i=0,o=[];for(t=0;t<a.length;t++){var s=a[t];0>=r&&(r=i,i=0,e.push(o),o=[]),o.push(s.fn),s.children.forEach(function(n){i++,a.push(n)}),r--}return o.length&&e.push(o),e}var a,r={children:[]},i=new c;for(a=0;a<n.length;a++){var o=n[a];i.put(o.domNode,n[a]={domNode:o.domNode,fn:o.fn,children:[]})}for(a=0;a<n.length;a++)t(n[a]);return e(r)}var h=[],g=m(n);return function(c,m,$){function y(n){var t="["+i+"]",e=n.hasAttribute(i)?[n]:n.querySelectorAll(t),a=[];return J(e,function(n){var t=n.getAttribute(i);t&&t.length&&a.push(n)}),a}function D(n){var t=[],e={};J(n,function(n,a){var r=n.element,o=C(r),s=n.event,u=["enter","move"].indexOf(s)>=0,l=n.structural?y(o):[];if(l.length){var c=u?"to":"from";J(l,function(n){var t=n.getAttribute(i);e[t]=e[t]||{},e[t][c]={animationID:a,element:B(n)}})}else t.push(n)});var a={},r={};return J(e,function(e,i){var o=e.from,s=e.to;if(!o||!s){var u=o?o.animationID:s.animationID,l=u.toString();return void(a[l]||(a[l]=!0,t.push(n[u])))}var c=n[o.animationID],f=n[s.animationID],m=o.animationID.toString();if(!r[m]){var v=r[m]={structural:!0,beforeStart:function(){c.beforeStart(),f.beforeStart()},close:function(){c.close(),f.close()},classes:b(c.classes,f.classes),from:c,to:f,anchors:[]};v.classes.length?t.push(v):(t.push(c),t.push(f))}r[m].anchors.push({out:o.element,"in":s.element})}),t}function b(n,t){n=n.split(" "),t=t.split(" ");for(var e=[],a=0;a<n.length;a++){var r=n[a];if("ng-"!==r.substring(0,3))for(var i=0;i<t.length;i++)if(r===t[i]){e.push(r);break}}return e.join(" ")}function A(n){for(var t=o.length-1;t>=0;t--){var e=o[t];if(u.has(e)){var a=u.get(e),r=a(n);if(r)return r}}}function k(){c.addClass(en),P&&n.addClass(c,P),N&&(n.removeClass(c,N),N=null)}function w(n,t){function e(n){a(n).setHost(t)}n.from&&n.to?(e(n.from.element),e(n.to.element)):e(n.element)}function T(){var n=a(c);!n||"leave"===m&&$.$$domOperationFired||n.end()}function S(t){c.off("$destroy",T),e(c),g(c,$),d(c,$),$.domOperation(),P&&n.removeClass(c,P),c.removeClass(en),x.complete(!t)}$=v($);var j=["enter","move","leave"].indexOf(m)>=0,x=new l({end:function(){S()},cancel:function(){S(!0)}});if(!o.length)return S(),x;t(c,x);var O=r(c.attr("class"),r($.addClass,$.removeClass)),P=$.tempClasses;P&&(O+=" "+P,$.tempClasses=null);var N;return j&&(N="ng-"+m+tn,n.addClass(c,N)),h.push({element:c,classes:O,event:m,structural:j,options:$,beforeStart:k,close:S}),c.on("$destroy",T),h.length>1?x:(s.$$postDigest(function(){var n=[];J(h,function(t){a(t.element)?n.push(t):t.close()}),h.length=0;var t=D(n),e=[];J(t,function(n){e.push({domNode:C(n.from?n.from.element:n.element),fn:function(){n.beforeStart();var t,e=n.close,r=n.anchors?n.from.element||n.to.element:n.element;if(a(r)){var i=A(n);i&&(t=i.start)}if(t){var o=t();o.done(function(n){e(!n)}),w(n,o)}else e()}})}),f(p(e))}),x)}}]}],Mn=["$animate","$rootScope",function(n,t){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(t,e,a,r,i){var o,s;t.$watchCollection(a.ngAnimateSwap||a["for"],function(a){o&&n.leave(o),s&&(s.$destroy(),s=null),(a||0===a)&&(s=t.$new(),i(s,function(t){o=t,n.enter(t,null,e)}))})}}}];t.module("ngAnimate",[]).directive("ngAnimateSwap",Mn).directive("ngAnimateChildren",Cn).factory("$$rAFScheduler",$n).provider("$$animateQueue",Nn).provider("$$animation",Fn).provider("$animateCss",Tn).provider("$$animateCssDriver",Sn).provider("$$animateJs",jn).provider("$$animateJsDriver",xn)}(window,window.angular);
\ No newline at end of file
