abcd

JavaScript performance comparison

Test case created

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    function FastClick(t){var e,n=this;if(this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.lastTouchIdentifier=this.touchStartY=this.touchStartX=0,this.touchBoundary=10,this.layer=t,!t||!t.nodeType)throw new TypeError("Layer must be a document node");this.onClick=function(){return FastClick.prototype.onClick.apply(n,arguments)},this.onMouse=function(){return FastClick.prototype.onMouse.apply(n,arguments)},this.onTouchStart=function(){return FastClick.prototype.onTouchStart.apply(n,arguments)},this.onTouchMove=function(){return FastClick.prototype.onTouchMove.apply(n,arguments)},this.onTouchEnd=function(){return FastClick.prototype.onTouchEnd.apply(n,arguments)},this.onTouchCancel=function(){return FastClick.prototype.onTouchCancel.apply(n,arguments)},FastClick.notNeeded(t)||(this.deviceIsAndroid&&(t.addEventListener("mouseover",this.onMouse,!0),t.addEventListener("mousedown",this.onMouse,!0),t.addEventListener("mouseup",this.onMouse,!0)),t.addEventListener("click",this.onClick,!0),t.addEventListener("touchstart",this.onTouchStart,!1),t.addEventListener("touchmove",this.onTouchMove,!1),t.addEventListener("touchend",this.onTouchEnd,!1),t.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(t.removeEventListener=function(e,n,r){var i=Node.prototype.removeEventListener;"click"===e?i.call(t,e,n.hijacked||n,r):i.call(t,e,n,r)},t.addEventListener=function(e,n,r){var i=Node.prototype.addEventListener;"click"===e?i.call(t,e,n.hijacked||(n.hijacked=function(t){t.propagationStopped||n(t)}),r):i.call(t,e,n,r)}),"function"==typeof t.onclick&&(e=t.onclick,t.addEventListener("click",function(t){e(t)},!1),t.onclick=null))}var Zepto=function(){function t(t){return null==t?String(t):V[W.call(t)]||"object"}function e(e){return"function"==t(e)}function n(t){return null!=t&&t==t.window}function r(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function i(e){return"object"==t(e)}function o(t){return i(t)&&!n(t)&&Object.getPrototypeOf(t)==Object.prototype}function a(t){return t instanceof Array}function s(t){return"number"==typeof t.length}function u(t){return P.call(t,function(t){return null!=t})}function c(t){return t.length>0?T.fn.concat.apply([],t):t}function l(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function h(t){return t in I?I[t]:I[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function f(t,e){return"number"!=typeof e||$[l(t)]?e:e+"px"}function p(t){var e,n;return O[t]||(e=N.createElement(t),N.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),O[t]=n),O[t]}function d(t){return"children"in t?A.call(t.children):T.map(t.childNodes,function(t){return 1==t.nodeType?t:void 0})}function g(t,e,n){for(S in e)n&&(o(e[S])||a(e[S]))?(o(e[S])&&!o(t[S])&&(t[S]={}),a(e[S])&&!a(t[S])&&(t[S]=[]),g(t[S],e[S],n)):e[S]!==E&&(t[S]=e[S])}function v(t,e){return null==e?T(t):T(t).filter(e)}function m(t,n,r,i){return e(n)?n.call(t,r,i):n}function y(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function w(t,e){var n=t.className,r=n&&n.baseVal!==E;return e===E?r?n.baseVal:n:void(r?n.baseVal=e:t.className=e)}function b(t){var e;try{return t?"true"==t||("false"==t?!1:"null"==t?null:/^0/.test(t)||isNaN(e=Number(t))?/^[\[\{]/.test(t)?T.parseJSON(t):t:e):t}catch(n){return t}}function x(t,e){e(t);for(var n in t.childNodes)x(t.childNodes[n],e)}var E,S,T,k,_,C,j=[],A=j.slice,P=j.filter,N=window.document,O={},I={},$={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},M=/^\s*<(\w+|!)[^>]*>/,F=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,H=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,L=/^(?:body|html)$/i,R=/([A-Z])/g,D=["val","css","html","text","data","width","height","offset"],J=["after","prepend","before","append"],B=N.createElement("table"),q=N.createElement("tr"),z={tr:N.createElement("tbody"),tbody:B,thead:B,tfoot:B,td:q,th:q,"*":N.createElement("div")},U=/complete|loaded|interactive/,Z=/^[\w-]*$/,V={},W=V.toString,X={},Y=N.createElement("div"),G={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"};return X.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=Y).appendChild(t),r=~X.qsa(i,e).indexOf(t),o&&Y.removeChild(t),r},_=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},C=function(t){return P.call(t,function(e,n){return t.indexOf(e)==n})},X.fragment=function(t,e,n){var r,i,a;return F.test(t)&&(r=T(N.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(H,"<$1></$2>")),e===E&&(e=M.test(t)&&RegExp.$1),e in z||(e="*"),a=z[e],a.innerHTML=""+t,r=T.each(A.call(a.childNodes),function(){a.removeChild(this)})),o(n)&&(i=T(r),T.each(n,function(t,e){D.indexOf(t)>-1?i[t](e):i.attr(t,e)})),r},X.Z=function(t,e){return t=t||[],t.__proto__=T.fn,t.selector=e||"",t},X.isZ=function(t){return t instanceof X.Z},X.init=function(t,n){var r;if(!t)return X.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&M.test(t))r=X.fragment(t,RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=X.qsa(N,t)}else{if(e(t))return T(N).ready(t);if(X.isZ(t))return t;if(a(t))r=u(t);else if(i(t))r=[t],t=null;else if(M.test(t))r=X.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=X.qsa(N,t)}}return X.Z(r,t)},T=function(t,e){return X.init(t,e)},T.extend=function(t){var e,n=A.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){g(t,n,e)}),t},X.qsa=function(t,e){var n,i="#"==e[0],o=!i&&"."==e[0],a=i||o?e.slice(1):e,s=Z.test(a);return r(t)&&s&&i?(n=t.getElementById(a))?[n]:[]:1!==t.nodeType&&9!==t.nodeType?[]:A.call(s&&!i?o?t.getElementsByClassName(a):t.getElementsByTagName(e):t.querySelectorAll(e))},T.contains=function(t,e){return t!==e&&t.contains(e)},T.type=t,T.isFunction=e,T.isWindow=n,T.isArray=a,T.isPlainObject=o,T.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},T.inArray=function(t,e,n){return j.indexOf.call(e,t,n)},T.camelCase=_,T.trim=function(t){return null==t?"":String.prototype.trim.call(t)},T.uuid=0,T.support={},T.expr={},T.map=function(t,e){var n,r,i,o=[];if(s(t))for(r=0;r<t.length;r++)n=e(t[r],r),null!=n&&o.push(n);else for(i in t)n=e(t[i],i),null!=n&&o.push(n);return c(o)},T.each=function(t,e){var n,r;if(s(t)){for(n=0;n<t.length;n++)if(e.call(t[n],n,t[n])===!1)return t}else for(r in t)if(e.call(t[r],r,t[r])===!1)return t;return t},T.grep=function(t,e){return P.call(t,e)},window.JSON&&(T.parseJSON=JSON.parse),T.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){V["[object "+e+"]"]=e.toLowerCase()}),T.fn={forEach:j.forEach,reduce:j.reduce,push:j.push,sort:j.sort,indexOf:j.indexOf,concat:j.concat,map:function(t){return T(T.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return T(A.apply(this,arguments))},ready:function(t){return U.test(N.readyState)&&N.body?t(T):N.addEventListener("DOMContentLoaded",function(){t(T)},!1),this},get:function(t){return t===E?A.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return j.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return e(t)?this.not(this.not(t)):T(P.call(this,function(e){return X.matches(e,t)}))},add:function(t,e){return T(C(this.concat(T(t,e))))},is:function(t){return this.length>0&&X.matches(this[0],t)},not:function(t){var n=[];if(e(t)&&t.call!==E)this.each(function(e){t.call(this,e)||n.push(this)});else{var r="string"==typeof t?this.filter(t):s(t)&&e(t.item)?A.call(t):T(t);this.forEach(function(t){r.indexOf(t)<0&&n.push(t)})}return T(n)},has:function(t){return this.filter(function(){return i(t)?T.contains(this,t):T(this).find(t).size()})},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!i(t)?t:T(t)},last:function(){var t=this[this.length-1];return t&&!i(t)?t:T(t)},find:function(t){var e,n=this;return e="object"==typeof t?T(t).filter(function(){var t=this;return j.some.call(n,function(e){return T.contains(e,t)})}):1==this.length?T(X.qsa(this[0],t)):this.map(function(){return X.qsa(this,t)})},closest:function(t,e){var n=this[0],i=!1;for("object"==typeof t&&(i=T(t));n&&!(i?i.indexOf(n)>=0:X.matches(n,t));)n=n!==e&&!r(n)&&n.parentNode;return T(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=T.map(n,function(t){return(t=t.parentNode)&&!r(t)&&e.indexOf(t)<0?(e.push(t),t):void 0});return v(e,t)},parent:function(t){return v(C(this.pluck("parentNode")),t)},children:function(t){return v(this.map(function(){return d(this)}),t)},contents:function(){return this.map(function(){return A.call(this.childNodes)})},siblings:function(t){return v(this.map(function(t,e){return P.call(d(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return T.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=p(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var n=e(t);if(this[0]&&!n)var r=T(t).get(0),i=r.parentNode||this.length>1;return this.each(function(e){T(this).wrapAll(n?t.call(this,e):i?r.cloneNode(!0):r)})},wrapAll:function(t){if(this[0]){T(this[0]).before(t=T(t));for(var e;(e=t.children()).length;)t=e.first();T(t).append(this)}return this},wrapInner:function(t){var n=e(t);return this.each(function(e){var r=T(this),i=r.contents(),o=n?t.call(this,e):t;i.length?i.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){T(this).replaceWith(T(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=T(this);(t===E?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return T(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return T(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0===arguments.length?this.length>0?this[0].innerHTML:null:this.each(function(e){var n=this.innerHTML;T(this).empty().append(m(this,t,e,n))})},text:function(t){return 0===arguments.length?this.length>0?this[0].textContent:null:this.each(function(){this.textContent=t===E?"":""+t})},attr:function(t,e){var n;return"string"==typeof t&&e===E?0==this.length||1!==this[0].nodeType?E:"value"==t&&"INPUT"==this[0].nodeName?this.val():!(n=this[0].getAttribute(t))&&t in this[0]?this[0][t]:n:this.each(function(n){if(1===this.nodeType)if(i(t))for(S in t)y(this,S,t[S]);else y(this,t,m(this,e,n,this.getAttribute(t)))})},removeAttr:function(t){return this.each(function(){1===this.nodeType&&y(this,t)})},prop:function(t,e){return t=G[t]||t,e===E?this[0]&&this[0][t]:this.each(function(n){this[t]=m(this,e,n,this[t])})},data:function(t,e){var n=this.attr("data-"+t.replace(R,"-$1").toLowerCase(),e);return null!==n?b(n):E},val:function(t){return 0===arguments.length?this[0]&&(this[0].multiple?T(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value):this.each(function(e){this.value=m(this,t,e,this.value)})},offset:function(t){if(t)return this.each(function(e){var n=T(this),r=m(this,t,e,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(0==this.length)return null;var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(e,n){if(arguments.length<2){var r=this[0],i=getComputedStyle(r,"");if(!r)return;if("string"==typeof e)return r.style[_(e)]||i.getPropertyValue(e);if(a(e)){var o={};return T.each(a(e)?e:[e],function(t,e){o[e]=r.style[_(e)]||i.getPropertyValue(e)}),o}}var s="";if("string"==t(e))n||0===n?s=l(e)+":"+f(e,n):this.each(function(){this.style.removeProperty(l(e))});else for(S in e)e[S]||0===e[S]?s+=l(S)+":"+f(S,e[S])+";":this.each(function(){this.style.removeProperty(l(S))});return this.each(function(){this.style.cssText+=";"+s})},index:function(t){return t?this.indexOf(T(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return t?j.some.call(this,function(t){return this.test(w(t))},h(t)):!1},addClass:function(t){return t?this.each(function(e){k=[];var n=w(this),r=m(this,t,e,n);r.split(/\s+/g).forEach(function(t){T(this).hasClass(t)||k.push(t)},this),k.length&&w(this,n+(n?" ":"")+k.join(" "))}):this},removeClass:function(t){return this.each(function(e){return t===E?w(this,""):(k=w(this),m(this,t,e,k).split(/\s+/g).forEach(function(t){k=k.replace(h(t)," ")}),w(this,k.trim()),void 0)})},toggleClass:function(t,e){return t?this.each(function(n){var r=T(this),i=m(this,t,n,w(this));i.split(/\s+/g).forEach(function(t){(e===E?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===E?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===E?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=L.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(T(t).css("margin-top"))||0,n.left-=parseFloat(T(t).css("margin-left"))||0,r.top+=parseFloat(T(e[0]).css("border-top-width"))||0,r.left+=parseFloat(T(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||N.body;t&&!L.test(t.nodeName)&&"static"==T(t).css("position");)t=t.offsetParent;return t})}},T.fn.detach=T.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});T.fn[t]=function(i){var o,a=this[0];return i===E?n(a)?a["inner"+e]:r(a)?a.documentElement["scroll"+e]:(o=this.offset())&&o[t]:this.each(function(e){a=T(this),a.css(t,m(this,i,e,a[t]()))})}}),J.forEach(function(e,n){var r=n%2;T.fn[e]=function(){var e,i,o=T.map(arguments,function(n){return e=t(n),"object"==e||"array"==e||null==n?n:X.fragment(n)}),a=this.length>1;return o.length<1?this:this.each(function(t,e){i=r?e:e.parentNode,e=0==n?e.nextSibling:1==n?e.firstChild:2==n?e:null,o.forEach(function(t){if(a)t=t.cloneNode(!0);else if(!i)return T(t).remove();x(i.insertBefore(t,e),function(t){null!=t.nodeName&&"SCRIPT"===t.nodeName.toUpperCase()&&(!t.type||"text/javascript"===t.type)&&!t.src&&window.eval.call(window,t.innerHTML)})})})},T.fn[r?e+"To":"insert"+(n?"Before":"After")]=function(t){return T(t)[e](this),this}}),X.Z.prototype=T.fn,X.uniq=C,X.deserializeValue=b,T.zepto=X,T}();window.Zepto=Zepto,void 0===window.$&&(window.$=Zepto),function(t){function e(t){return t._zid||(t._zid=f++)}function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).filter(function(t){return!(!t||n.e&&t.e!=n.e||n.ns&&!s.test(t.ns)||o&&e(t.fn)!==e(o)||a&&t.sel!=a)})}function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function i(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function o(t,e){return t.del&&!y&&t.e in w||!!e}function a(t){return b[t]||y&&w[t]||t}function s(n,i,s,u,l,f,p){var d=e(n),g=v[d]||(v[d]=[]);i.split(/\s/).forEach(function(e){if("ready"==e)return t(document).ready(s);var i=r(e);i.fn=s,i.sel=l,i.e in b&&(s=function(e){var n=e.relatedTarget;return!n||n!==this&&!t.contains(this,n)?i.fn.apply(this,arguments):void 0}),i.del=f;var d=f||s;i.proxy=function(t){if(t=c(t),!t.isImmediatePropagationStopped()){t.data=u;var e=d.apply(n,t._args==h?[t]:[t].concat(t._args));return e===!1&&(t.preventDefault(),t.stopPropagation()),e}},i.i=g.length,g.push(i),"addEventListener"in n&&n.addEventListener(a(i.e),i.proxy,o(i,p))})}function u(t,r,i,s,u){var c=e(t);(r||"").split(/\s/).forEach(function(e){n(t,e,i,s).forEach(function(e){delete v[c][e.i],"removeEventListener"in t&&t.removeEventListener(a(e.e),e.proxy,o(e,u))})})}function c(e,n){return(n||!e.isDefaultPrevented)&&(n||(n=e),t.each(T,function(t,r){var i=n[t];e[t]=function(){return this[r]=x,i&&i.apply(n,arguments)},e[r]=E}),(n.defaultPrevented!==h?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(e.isDefaultPrevented=x)),e}function l(t){var e,n={originalEvent:t};for(e in t)!S.test(e)&&t[e]!==h&&(n[e]=t[e]);return c(n,t)}var h,f=(t.zepto.qsa,1),p=Array.prototype.slice,d=t.isFunction,g=function(t){return"string"==typeof t},v={},m={},y="onfocusin"in window,w={focus:"focusin",blur:"focusout"},b={mouseenter:"mouseover",mouseleave:"mouseout"};m.click=m.mousedown=m.mouseup=m.mousemove="MouseEvents",t.event={add:s,remove:u},t.proxy=function(n,r){if(d(n)){var i=function(){return n.apply(r,arguments)};return i._zid=e(n),i}if(g(r))return t.proxy(n[r],n);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var x=function(){return!0},E=function(){return!1},S=/^([A-Z]|returnValue$|layer[XY]$)/,T={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,n,r,i,o){var a,c,f=this;return e&&!g(e)?(t.each(e,function(t,e){f.on(t,n,r,e,o)}),f):(!g(n)&&!d(i)&&i!==!1&&(i=r,r=n,n=h),(d(r)||r===!1)&&(i=r,r=h),i===!1&&(i=E),f.each(function(h,f){o&&(a=function(t){return u(f,t.type,i),i.apply(this,arguments)}),n&&(c=function(e){var r,o=t(e.target).closest(n,f).get(0);return o&&o!==f?(r=t.extend(l(e),{currentTarget:o,liveFired:f}),(a||i).apply(o,[r].concat(p.call(arguments,1)))):void 0}),s(f,e,i,r,n,c||a)}))},t.fn.off=function(e,n,r){var i=this;return e&&!g(e)?(t.each(e,function(t,e){i.off(t,n,e)}),i):(!g(n)&&!d(r)&&r!==!1&&(r=n,n=h),r===!1&&(r=E),i.each(function(){u(this,e,r,n)}))},t.fn.trigger=function(e,n){return e=g(e)||t.isPlainObject(e)?t.Event(e):c(e),e._args=n,this.each(function(){"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,r){var i,o;return this.each(function(a,s){i=l(g(e)?t.Event(e):e),i._args=r,i.target=s,t.each(n(s,e.type||e),function(t,e){return o=e.proxy(i),i.isImmediatePropagationStopped()?!1:void 0})}),o},"focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.trigger(e)}}),["focus","blur"].forEach(function(e){t.fn[e]=function(t){return t?this.bind(e,t):this.each(function(){try{this[e]()}catch(t){}}),this}}),t.Event=function(t,e){g(t)||(e=t,t=e.type);var n=document.createEvent(m[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),c(n)}}(Zepto),function(t){function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefaultPrevented()}function n(t,n,r,i){return t.global?e(n||y,r,i):void 0}function r(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}function i(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)===!1||n(e,r,"ajaxBeforeSend",[t,e])===!1?!1:void n(e,r,"ajaxSend",[t,e])}function a(t,e,r,i){var o=r.context,a="success";r.success.call(o,t,a,e),i&&i.resolveWith(o,[t,a,e]),n(r,o,"ajaxSuccess",[e,r,t]),u(a,e,r)}function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectWith(a,[r,e,t]),n(i,a,"ajaxError",[r,i,t||e]),u(e,r,i)}function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,"ajaxComplete",[e,r]),i(r)}function c(){}function l(t){return t&&(t=t.split(";",2)[0]),t&&(t==S?"html":t==E?"json":b.test(t)?"script":x.test(t)&&"xml")||"text"}function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function f(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),e.data&&(!e.type||"GET"==e.type.toUpperCase())&&(e.url=h(e.url,e.data),e.data=void 0)}function p(e,n,r,i){var o=!t.isFunction(n);return{url:e,data:o?n:void 0,success:o?t.isFunction(r)?r:void 0:n,dataType:o?i||r:r}}function d(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),i&&(n=r?i:i+"["+(s||"object"==o||"array"==o?n:"")+"]"),!i&&a?e.add(u.name,u.value):"array"==o||!r&&"object"==o?d(e,u,r,n):e.add(n,u)})}var g,v,m=0,y=window.document,w=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,b=/^(?:text|application)\/javascript/i,x=/^(?:text|application)\/xml/i,E="application/json",S="text/html",T=/^\s*$/;t.active=0,t.ajaxJSONP=function(e,n){if("type"in e){var r,i,u=e.jsonpCallback,c=(t.isFunction(u)?u():u)||"jsonp"+ ++m,l=y.createElement("script"),h=window[c],f=function(e){t(l).triggerHandler("error",e||"abort")},p={abort:f};return n&&n.promise(p),t(l).on("load error",function(o,u){clearTimeout(i),t(l).off().remove(),"error"!=o.type&&r?a(r[0],p,e,n):s(null,u||"error",p,e,n),window[c]=h,r&&t.isFunction(h)&&h(r[0]),h=r=void 0}),o(p,e)===!1?(f("abort"),p):(window[c]=function(){r=arguments},l.src=e.url.replace(/=\?/,"="+c),y.head.appendChild(l),e.timeout>0&&(i=setTimeout(function(){f("timeout")},e.timeout)),p)}return t.ajax(e)},t.ajaxSettings={type:"GET",beforeSend:c,success:c,error:c,complete:c,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:E,xml:"application/xml, text/xml",html:S,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0},t.ajax=function(e){var n=t.extend({},e||{}),i=t.Deferred&&t.Deferred();for(g in t.ajaxSettings)void 0===n[g]&&(n[g]=t.ajaxSettings[g]);r(n),n.crossDomain||(n.crossDomain=/^([\w-]+:)?\/\/([^\/]+)/.test(n.url)&&RegExp.$2!=window.location.host),n.url||(n.url=window.location.toString()),f(n),n.cache===!1&&(n.url=h(n.url,"_="+Date.now()));var u=n.dataType,p=/=\?/.test(n.url);if("jsonp"==u||p)return p||(n.url=h(n.url,n.jsonp?n.jsonp+"=?":n.jsonp===!1?"":"callback=?")),t.ajaxJSONP(n,i);var d,m=n.accepts[u],y={},w=function(t,e){y[t.toLowerCase()]=[t,e]},b=/^([\w-]+:)\/\//.test(n.url)?RegExp.$1:window.location.protocol,x=n.xhr(),E=x.setRequestHeader;if(i&&i.promise(x),n.crossDomain||w("X-Requested-With","XMLHttpRequest"),w("Accept",m||"*/*"),(m=n.mimeType||m)&&(m.indexOf(",")>-1&&(m=m.split(",",2)[0]),x.overrideMimeType&&x.overrideMimeType(m)),(n.contentType||n.contentType!==!1&&n.data&&"GET"!=n.type.toUpperCase())&&w("Content-Type",n.contentType||"application/x-www-form-urlencoded"),n.headers)for(v in n.headers)w(v,n.headers[v]);if(x.setRequestHeader=w,x.onreadystatechange=function(){if(4==x.readyState){x.onreadystatechange=c,clearTimeout(d);var e,r=!1;if(x.status>=200&&x.status<300||304==x.status||0==x.status&&"file:"==b){u=u||l(n.mimeType||x.getResponseHeader("content-type")),e=x.responseText;try{"script"==u?(1,eval)(e):"xml"==u?e=x.responseXML:"json"==u&&(e=T.test(e)?null:t.parseJSON(e))}catch(o){r=o}r?s(r,"parsererror",x,n,i):a(e,x,n,i)}else s(x.statusText||null,x.status?"error":"abort",x,n,i)}},o(x,n)===!1)return x.abort(),s(null,"abort",x,n,i),x;if(n.xhrFields)for(v in n.xhrFields)x[v]=n.xhrFields[v];var S="async"in n?n.async:!0;x.open(n.type,n.url,S,n.username,n.password);for(v in y)E.apply(x,y[v]);return n.timeout>0&&(d=setTimeout(function(){x.onreadystatechange=c,x.abort(),s(null,"timeout",x,n,i)},n.timeout)),x.send(n.data?n.data:null),x},t.get=function(){return t.ajax(p.apply(null,arguments))},t.post=function(){var e=p.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=p.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,r){if(!this.length)return this;var i,o=this,a=e.split(/\s/),s=p(e,n,r),u=s.success;return a.length>1&&(s.url=a[0],i=a[1]),s.success=function(e){o.html(i?t("<div>").html(e.replace(w,"")).find(i):e),u&&u.apply(o,arguments)},t.ajax(s),this};var k=encodeURIComponent;t.param=function(t,e){var n=[];return n.add=function(t,e){this.push(k(t)+"="+k(e))},d(n,t,e),n.join("&").replace(/%20/g,"+")}}(Zepto),function(t){t.fn.serializeArray=function(){var e,n=[];return t([].slice.call(this.get(0).elements)).each(function(){e=t(this);var r=e.attr("type");"fieldset"!=this.nodeName.toLowerCase()&&!this.disabled&&"submit"!=r&&"reset"!=r&&"button"!=r&&("radio"!=r&&"checkbox"!=r||this.checked)&&n.push({name:e.attr("name"),value:e.val()})}),n},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(e)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(Zepto),function(t){"__proto__"in{}||t.extend(t.zepto,{Z:function(e,n){return e=e||[],t.extend(e,t.fn),e.selector=n||"",e.__Z=!0,e},isZ:function(e){return"array"===t.type(e)&&"__Z"in e}});try{getComputedStyle(void 0)}catch(e){var n=getComputedStyle;window.getComputedStyle=function(t){try{return n(t)}catch(e){return null}}}}(Zepto),function(t){function e(e,r){var u=e[s],c=u&&i[u];if(void 0===r)return c||n(e);if(c){if(r in c)return c[r];var l=a(r);if(l in c)return c[l]}return o.call(t(e),r)}function n(e,n,o){var u=e[s]||(e[s]=++t.uuid),c=i[u]||(i[u]=r(e));return void 0!==n&&(c[a(n)]=o),c}function r(e){var n={};return t.each(e.attributes||u,function(e,r){0==r.name.indexOf("data-")&&(n[a(r.name.replace("data-",""))]=t.zepto.deserializeValue(r.value))}),n}var i={},o=t.fn.data,a=t.camelCase,s=t.expando="Zepto"+ +new Date,u=[];t.fn.data=function(r,i){return void 0===i?t.isPlainObject(r)?this.each(function(e,i){t.each(r,function(t,e){n(i,t,e)})}):0==this.length?void 0:e(this[0],r):this.each(function(){n(this,r,i)})},t.fn.removeData=function(e){return"string"==typeof e&&(e=e.split(/\s+/)),this.each(function(){var n=this[s],r=n&&i[n];r&&t.each(e||r,function(t){delete r[e?a(this):t]})})},["remove","empty"].forEach(function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}})}(Zepto),function(t){function e(n){var r=[["resolve","done",t.Callbacks({once:1,memory:1}),"resolved"],["reject","fail",t.Callbacks({once:1,memory:1}),"rejected"],["notify","progress",t.Callbacks({memory:1})]],i="pending",o={state:function(){return i},always:function(){return a.done(arguments).fail(arguments),this},then:function(){var n=arguments;return e(function(e){t.each(r,function(r,i){var s=t.isFunction(n[r])&&n[r];a[i[1]](function(){var n=s&&s.apply(this,arguments);if(n&&t.isFunction(n.promise))n.promise().done(e.resolve).fail(e.reject).progress(e.notify);else{var r=this===o?e.promise():this,a=s?[n]:arguments;e[i[0]+"With"](r,a)}})}),n=null}).promise()},promise:function(e){return null!=e?t.extend(e,o):o}},a={};return t.each(r,function(t,e){var n=e[2],s=e[3];o[e[1]]=n.add,s&&n.add(function(){i=s},r[1^t][2].disable,r[2][2].lock),a[e[0]]=function(){return a[e[0]+"With"](this===a?o:this,arguments),this},a[e[0]+"With"]=n.fireWith}),o.promise(a),n&&n.call(a,a),a}var n=Array.prototype.slice;t.when=function(r){var i,o,a,s=n.call(arguments),u=s.length,c=0,l=1!==u||r&&t.isFunction(r.promise)?u:0,h=1===l?r:e(),f=function(t,e,r){return function(o){e[t]=this,r[t]=arguments.length>1?n.call(arguments):o,r===i?h.notifyWith(e,r):--l||h.resolveWith(e,r)}};if(u>1)for(i=new Array(u),o=new Array(u),a=new Array(u);u>c;++c)s[c]&&t.isFunction(s[c].promise)?s[c].promise().done(f(c,a,s)).fail(h.reject).progress(f(c,o,i)):--l;return l||h.resolveWith(a,s),h.promise()},t.Deferred=e}(Zepto),function(t){t.Callbacks=function(e){e=t.extend({},e);var n,r,i,o,a,s,u=[],c=!e.once&&[],l=function(t){for(n=e.memory&&t,r=!0,s=o||0,o=0,a=u.length,i=!0;u&&a>s;++s)if(u[s].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,u&&(c?c.length&&l(c.shift()):n?u.length=0:h.disable())},h={add:function(){if(u){var r=u.length,s=function(n){t.each(n,function(t,n){"function"==typeof n?(!e.unique||!h.has(n))&&u.push(n):n&&n.length&&"string"!=typeof n&&s(n)})};s(arguments),i?a=u.length:n&&(o=r,l(n))}return this},remove:function(){return u&&t.each(arguments,function(e,n){for(var r;(r=t.inArray(n,u,r))>-1;)u.splice(r,1),i&&(a>=r&&--a,s>=r&&--s)}),this},has:function(e){return!!u&&!!(e?t.inArray(e,u)>-1:u.length)},empty:function(){return a=u.length=0,this},disable:function(){return u=c=n=void 0,this},disabled:function(){return!u},lock:function(){return c=void 0,n||h.disable(),this},locked:function(){return!c},fireWith:function(t,e){return u&&(!r||c)&&(e=e||[],e=[t,e.slice?e.slice():e],i?c.push(e):l(e)),this},fire:function(){return h.fireWith(this,arguments)},fired:function(){return!!r}};return h}}(Zepto),function(t){function e(e){return e=t(e),!(!e.width()&&!e.height()||"none"===e.css("display"))}function n(t,e){t=t.replace(/=#\]/g,'="#"]');var n,r,i=s.exec(t);if(i&&i[2]in a&&(n=a[i[2]],r=i[3],t=i[1],r)){var o=Number(r);r=isNaN(o)?r.replace(/^["']|["']$/g,""):o}return e(t,n,r)}var r=t.zepto,i=r.qsa,o=r.matches,a=t.expr[":"]={visible:function(){return e(this)?this:void 0},hidden:function(){return e(this)?void 0:this},selected:function(){return this.selected?this:void 0},checked:function(){return this.checked?this:void 0},parent:function(){return this.parentNode},first:function(t){return 0===t?this:void 0},last:function(t,e){return t===e.length-1?this:void 0},eq:function(t,e,n){return t===n?this:void 0},contains:function(e,n,r){return t(this).text().indexOf(r)>-1?this:void 0},has:function(t,e,n){return r.qsa(this,n).length?this:void 0}},s=new RegExp("(.*):(\\w+)(?:\\(([^)]+)\\))?$\\s*"),u=/^\s*>/,c="Zepto"+ +new Date;r.qsa=function(e,o){return n(o,function(n,a,s){try{var l;!n&&a?n="*":u.test(n)&&(l=t(e).addClass(c),n="."+c+" "+n);var h=i(e,n)}catch(f){throw console.error("error performing selector: %o",o),f}finally{l&&l.removeClass(c)}return a?r.uniq(t.map(h,function(t,e){return a.call(t,e,h,s)})):h})},r.matches=function(t,e){return n(e,function(e,n,r){return!(e&&!o(t,e)||n&&n.call(t,null,r)!==t)})}}(Zepto),function(t){function e(t,e,n,r){return Math.abs(t-e)>=Math.abs(n-r)?t-e>0?"Left":"Right":n-r>0?"Up":"Down"}function n(){l=null,f.last&&(f.el.trigger("longTap"),f={})}function r(){l&&clearTimeout(l),l=null}function i(){s&&clearTimeout(s),u&&clearTimeout(u),c&&clearTimeout(c),l&&clearTimeout(l),s=u=c=l=null,f={}}function o(t){return("touch"==t.pointerType||t.pointerType==t.MSPOINTER_TYPE_TOUCH)&&t.isPrimary}function a(t,e){return t.type=="pointer"+e||t.type.toLowerCase()=="mspointer"+e}var s,u,c,l,h,f={},p=750;t(document).ready(function(){var d,g,v,m,y=0,w=0;"MSGesture"in window&&(h=new MSGesture,h.target=document.body),t(document).bind("MSGestureEnd",function(t){var e=t.velocityX>1?"Right":t.velocityX<-1?"Left":t.velocityY>1?"Down":t.velocityY<-1?"Up":null;e&&(f.el.trigger("swipe"),f.el.trigger("swipe"+e))}).on("touchstart MSPointerDown pointerdown",function(e){(!(m=a(e,"down"))||o(e))&&(v=m?e:e.touches[0],e.touches&&1===e.touches.length&&f.x2&&(f.x2=void 0,f.y2=void 0),d=Date.now(),g=d-(f.last||d),f.el=t("tagName"in v.target?v.target:v.target.parentNode),s&&clearTimeout(s),f.x1=v.pageX,f.y1=v.pageY,g>0&&250>=g&&(f.isDoubleTap=!0),f.last=d,l=setTimeout(n,p),h&&m&&h.addPointer(e.pointerId))}).on("touchmove MSPointerMove pointermove",function(t){(!(m=a(t,"move"))||o(t))&&(v=m?t:t.touches[0],r(),f.x2=v.pageX,f.y2=v.pageY,y+=Math.abs(f.x1-f.x2),w+=Math.abs(f.y1-f.y2))}).on("touchend MSPointerUp pointerup",function(n){(!(m=a(n,"up"))||o(n))&&(r(),f.x2&&Math.abs(f.x1-f.x2)>30||f.y2&&Math.abs(f.y1-f.y2)>30?c=setTimeout(function(){f.el.trigger("swipe"),f.el.trigger("swipe"+e(f.x1,f.x2,f.y1,f.y2)),f={}
    },0):"last"in f&&(30>y&&30>w?u=setTimeout(function(){var e=t.Event("tap");e.cancelTouch=i,f.el.trigger(e),f.isDoubleTap?(f.el&&f.el.trigger("doubleTap"),f={}):s=setTimeout(function(){s=null,f.el&&f.el.trigger("singleTap"),f={}},250)},0):f={}),y=w=0)}).on("touchcancel MSPointerCancel pointercancel",i),t(window).on("scroll",i)}),["swipe","swipeLeft","swipeRight","swipeUp","swipeDown","doubleTap","tap","singleTap","longTap"].forEach(function(e){t.fn[e]=function(t){return this.on(e,t)}})}(Zepto),function(){function t(t,e,n){n=(n||0)-1;for(var r=t?t.length:0;++n<r;)if(t[n]===e)return n;return-1}function e(t,e){for(var n=t.m,r=e.m,i=-1,o=n.length;++i<o;){var a=n[i],s=r[i];if(a!==s){if(a>s||"undefined"==typeof a)return 1;if(s>a||"undefined"==typeof s)return-1}}return t.n-e.n}function n(t){return"\\"+ve[t]}function r(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);var r=-1;n=n-e||0;for(var i=Array(0>n?0:n);++r<n;)i[r]=t[e+r];return i}function i(t){return t instanceof i?t:new o(t)}function o(t,e){this.__chain__=!!e,this.__wrapped__=t}function a(t){function e(){if(i){var t=r(i);Pe.apply(t,arguments)}if(this instanceof e){var a=s(n.prototype),t=n.apply(a,t||arguments);return C(t)?t:a}return n.apply(o,t||arguments)}var n=t[0],i=t[2],o=t[4];return e}function s(t){return C(t)?Oe(t):{}}function u(t,e,n){if("function"!=typeof t)return Q;if("undefined"==typeof e||!("prototype"in t))return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,o){return t.call(e,n,r,i,o)}}return X(t,e)}function c(t){function e(){var t=h?u:this;if(o){var v=r(o);Pe.apply(v,arguments)}return(a||p)&&(v||(v=r(arguments)),a&&Pe.apply(v,a),p&&v.length<l)?(i|=16,c([n,d?i:-4&i,v,null,u,l])):(v||(v=arguments),f&&(n=t[g]),this instanceof e?(t=s(n.prototype),v=n.apply(t,v),C(v)?v:t):n.apply(t,v))}var n=t[0],i=t[1],o=t[2],a=t[3],u=t[4],l=t[5],h=1&i,f=2&i,p=4&i,d=8&i,g=n;return e}function l(t,e){for(var n=-1,r=m(),i=t?t.length:0,o=[];++n<i;){var a=t[n];0>r(e,a)&&o.push(a)}return o}function h(t,e,n,r){r=(r||0)-1;for(var i=t?t.length:0,o=[];++r<i;){var a=t[r];if(a&&"object"==typeof a&&"number"==typeof a.length&&(Je(a)||b(a))){e||(a=h(a,e,n));var s=-1,u=a.length,c=o.length;for(o.length+=u;++s<u;)o[c++]=a[s]}else n||o.push(a)}return o}function f(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;if(t===t&&!(t&&ge[typeof t]||e&&ge[typeof e]))return!1;if(null==t||null==e)return t===e;var o=ke.call(t),a=ke.call(e);if(o!=a)return!1;switch(o){case ce:case le:return+t==+e;case he:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case pe:case de:return t==e+""}if(a=o==ue,!a){var s=t instanceof i,u=e instanceof i;if(s||u)return f(s?t.__wrapped__:t,u?e.__wrapped__:e,n,r);if(o!=fe)return!1;if(o=t.constructor,s=e.constructor,o!=s&&!(_(o)&&o instanceof o&&_(s)&&s instanceof s)&&"constructor"in t&&"constructor"in e)return!1}for(n||(n=[]),r||(r=[]),o=n.length;o--;)if(n[o]==t)return r[o]==e;var c=!0,l=0;if(n.push(t),r.push(e),a){if(l=e.length,c=l==t.length)for(;l--&&(c=f(t[l],e[l],n,r)););}else We(e,function(e,i,o){return Ae.call(o,i)?(l++,!(c=Ae.call(t,i)&&f(t[i],e,n,r))&&re):void 0}),c&&We(t,function(t,e,n){return Ae.call(n,e)?!(c=-1<--l)&&re:void 0});return n.pop(),r.pop(),c}function p(t,e,n){for(var r=-1,i=m(),o=t?t.length:0,a=[],s=n?[]:a;++r<o;){var u=t[r],c=n?n(u,r,t):u;(e?!r||s[s.length-1]!==c:0>i(s,c))&&(n&&s.push(c),a.push(u))}return a}function d(t){return function(e,n,r){var i={};n=G(n,r,3),r=-1;var o=e?e.length:0;if("number"==typeof o)for(;++r<o;){var a=e[r];t(i,a,n(a,r,e),e)}else Xe(e,function(e,r,o){t(i,e,n(e,r,o),o)});return i}}function g(t,e,n,r,i,o){var s=16&e,u=32&e;if(!(2&e||_(t)))throw new TypeError;return s&&!n.length&&(e&=-17,n=!1),u&&!r.length&&(e&=-33,r=!1),(1==e||17===e?a:c)([t,e,n,r,i,o])}function v(t){return ze[t]}function m(){var e=(e=i.indexOf)===U?t:e;return e}function y(t){return"function"==typeof t&&_e.test(t)}function w(t){return Ue[t]}function b(t){return t&&"object"==typeof t&&"number"==typeof t.length&&ke.call(t)==se||!1}function x(t){if(!t)return t;for(var e=1,n=arguments.length;n>e;e++){var r=arguments[e];if(r)for(var i in r)t[i]=r[i]}return t}function E(t){if(!t)return t;for(var e=1,n=arguments.length;n>e;e++){var r=arguments[e];if(r)for(var i in r)"undefined"==typeof t[i]&&(t[i]=r[i])}return t}function S(t){var e=[];return We(t,function(t,n){_(t)&&e.push(n)}),e.sort()}function T(t){for(var e=-1,n=qe(t),r=n.length,i={};++e<r;){var o=n[e];i[t[o]]=o}return i}function k(t){if(!t)return!0;if(Je(t)||A(t))return!t.length;for(var e in t)if(Ae.call(t,e))return!1;return!0}function _(t){return"function"==typeof t}function C(t){return!(!t||!ge[typeof t])}function j(t){return"number"==typeof t||t&&"object"==typeof t&&ke.call(t)==he||!1}function A(t){return"string"==typeof t||t&&"object"==typeof t&&ke.call(t)==de||!1}function P(t){for(var e=-1,n=qe(t),r=n.length,i=Array(r);++e<r;)i[e]=t[n[e]];return i}function N(t,e){var n=m(),r=t?t.length:0,i=!1;return r&&"number"==typeof r?i=-1<n(t,e):Xe(t,function(t){return(i=t===e)&&re}),i}function O(t,e,n){var r=!0;e=G(e,n,3),n=-1;var i=t?t.length:0;if("number"==typeof i)for(;++n<i&&(r=!!e(t[n],n,t)););else Xe(t,function(t,n,i){return!(r=!!e(t,n,i))&&re});return r}function I(t,e,n){var r=[];e=G(e,n,3),n=-1;var i=t?t.length:0;if("number"==typeof i)for(;++n<i;){var o=t[n];e(o,n,t)&&r.push(o)}else Xe(t,function(t,n,i){e(t,n,i)&&r.push(t)});return r}function $(t,e,n){e=G(e,n,3),n=-1;var r=t?t.length:0;if("number"!=typeof r){var i;return Xe(t,function(t,n,r){return e(t,n,r)?(i=t,re):void 0}),i}for(;++n<r;){var o=t[n];if(e(o,n,t))return o}}function M(t,e,n){var r=-1,i=t?t.length:0;if(e=e&&"undefined"==typeof n?e:u(e,n,3),"number"==typeof i)for(;++r<i&&e(t[r],r,t)!==re;);else Xe(t,e)}function F(t,e){var n=t?t.length:0;if("number"==typeof n)for(;n--&&!1!==e(t[n],n,t););else{var r=qe(t),n=r.length;Xe(t,function(t,i,o){return i=r?r[--n]:--n,!1===e(o[i],i,o)&&re})}}function H(t,e,n){var r=-1,i=t?t.length:0;if(e=G(e,n,3),"number"==typeof i)for(var o=Array(i);++r<i;)o[r]=e(t[r],r,t);else o=[],Xe(t,function(t,n,i){o[++r]=e(t,n,i)});return o}function L(t,e,n){var r=-1/0,i=r;"function"!=typeof e&&n&&n[e]===t&&(e=null);var o=-1,a=t?t.length:0;if(null==e&&"number"==typeof a)for(;++o<a;)n=t[o],n>i&&(i=n);else e=G(e,n,3),M(t,function(t,n,o){n=e(t,n,o),n>r&&(r=n,i=t)});return i}function R(t,e,n,r){if(!t)return n;var i=3>arguments.length;e=G(e,r,4);var o=-1,a=t.length;if("number"==typeof a)for(i&&(n=t[++o]);++o<a;)n=e(n,t[o],o,t);else Xe(t,function(t,r,o){n=i?(i=!1,t):e(n,t,r,o)});return n}function D(t,e,n,r){var i=3>arguments.length;return e=G(e,r,4),F(t,function(t,r,o){n=i?(i=!1,t):e(n,t,r,o)}),n}function J(t){var e=-1,n=t?t.length:0,r=Array("number"==typeof n?n:0);return M(t,function(t){var n;n=++e,n=0+je(Re()*(n-0+1)),r[e]=r[n],r[n]=t}),r}function B(t,e,n){var r;e=G(e,n,3),n=-1;var i=t?t.length:0;if("number"==typeof i)for(;++n<i&&!(r=e(t[n],n,t)););else Xe(t,function(t,n,i){return(r=e(t,n,i))&&re});return!!r}function q(t,e,n){return n&&k(e)?ee:(n?$:I)(t,e)}function z(t,e,n){var i=0,o=t?t.length:0;if("number"!=typeof e&&null!=e){var a=-1;for(e=G(e,n,3);++a<o&&e(t[a],a,t);)i++}else if(i=e,null==i||n)return t?t[0]:ee;return r(t,0,Le(He(0,i),o))}function U(e,n,r){if("number"==typeof r){var i=e?e.length:0;r=0>r?He(0,i+r):r||0}else if(r)return r=V(e,n),e[r]===n?r:-1;return t(e,n,r)}function Z(t,e,n){if("number"!=typeof e&&null!=e){var i=0,o=-1,a=t?t.length:0;for(e=G(e,n,3);++o<a&&e(t[o],o,t);)i++}else i=null==e||n?1:He(0,e);return r(t,i)}function V(t,e,n,r){var i=0,o=t?t.length:i;for(n=n?G(n,r,1):Q,e=n(e);o>i;)r=i+o>>>1,n(t[r])<e?i=r+1:o=r;return i}function W(t,e,n,r){return"boolean"!=typeof e&&null!=e&&(r=n,n="function"!=typeof e&&r&&r[e]===t?null:e,e=!1),null!=n&&(n=G(n,r,3)),p(t,e,n)}function X(t,e){return 2<arguments.length?g(t,17,r(arguments,2),null,e):g(t,1,null,null,e)}function Y(t,e,n){var r,i,o,a,s,u,c,l=0,h=!1,f=!0;if(!_(t))throw new TypeError;if(e=He(0,e)||0,!0===n)var p=!0,f=!1;else C(n)&&(p=n.leading,h="maxWait"in n&&(He(e,n.maxWait)||0),f="trailing"in n?n.trailing:f);var d=function(){var n=e-(tn()-a);n>0?u=setTimeout(d,n):(i&&clearTimeout(i),n=c,i=u=c=ee,n&&(l=tn(),o=t.apply(s,r),u||i||(r=s=null)))},g=function(){u&&clearTimeout(u),i=u=c=ee,(f||h!==e)&&(l=tn(),o=t.apply(s,r),u||i||(r=s=null))};return function(){if(r=arguments,a=tn(),s=this,c=f&&(u||!p),!1===h)var n=p&&!u;else{i||p||(l=a);var v=h-(a-l),m=0>=v;m?(i&&(i=clearTimeout(i)),l=a,o=t.apply(s,r)):i||(i=setTimeout(g,v))}return m&&u?u=clearTimeout(u):u||e===h||(u=setTimeout(d,e)),n&&(m=!0,o=t.apply(s,r)),!m||u||i||(r=s=null),o}}function G(t,e,n){var r=typeof t;if(null==t||"function"==r)return u(t,e,n);if("object"!=r)return te(t);var i=qe(t);return function(e){for(var n=i.length,r=!1;n--&&(r=e[i[n]]===t[i[n]]););return r}}function Q(t){return t}function K(t){M(S(t),function(e){var n=i[e]=t[e];i.prototype[e]=function(){var t=[this.__wrapped__];return Pe.apply(t,arguments),t=n.apply(i,t),this.__chain__?new o(t,!0):t}})}function te(t){return function(e){return e[t]}}var ee,ne=0,re={},ie=+new Date+"",oe=/($^)/,ae=/['\n\r\t\u2028\u2029\\]/g,se="[object Arguments]",ue="[object Array]",ce="[object Boolean]",le="[object Date]",he="[object Number]",fe="[object Object]",pe="[object RegExp]",de="[object String]",ge={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},ve={"\\":"\\","'":"'","\n":"n","\r":"r","    ":"t","\u2028":"u2028","\u2029":"u2029"},me=ge[typeof window]&&window||this,ye=ge[typeof exports]&&exports&&!exports.nodeType&&exports,we=ge[typeof module]&&module&&!module.nodeType&&module,be=we&&we.exports===ye&&ye,xe=ge[typeof global]&&global;!xe||xe.global!==xe&&xe.window!==xe||(me=xe);var Ee=[],Se=Object.prototype,Te=me._,ke=Se.toString,_e=RegExp("^"+(ke+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),Ce=Math.ceil,je=Math.floor,Ae=Se.hasOwnProperty,Pe=Ee.push,Ne=Se.propertyIsEnumerable,Oe=y(Oe=Object.create)&&Oe,Ie=y(Ie=Array.isArray)&&Ie,$e=me.isFinite,Me=me.isNaN,Fe=y(Fe=Object.keys)&&Fe,He=Math.max,Le=Math.min,Re=Math.random;o.prototype=i.prototype;var De={};!function(){var t={0:1,length:1};De.spliceObjects=(Ee.splice.call(t,0,1),!t[0])}(1),i.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Oe||(s=function(){function t(){}return function(e){if(C(e)){t.prototype=e;var n=new t;t.prototype=null}return n||me.Object()}}()),b(arguments)||(b=function(t){return t&&"object"==typeof t&&"number"==typeof t.length&&Ae.call(t,"callee")&&!Ne.call(t,"callee")||!1});var Je=Ie||function(t){return t&&"object"==typeof t&&"number"==typeof t.length&&ke.call(t)==ue||!1},Be=function(t){var e,n=[];if(!t||!ge[typeof t])return n;for(e in t)Ae.call(t,e)&&n.push(e);return n},qe=Fe?function(t){return C(t)?Fe(t):[]}:Be,ze={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"},Ue=T(ze),Ze=RegExp("("+qe(Ue).join("|")+")","g"),Ve=RegExp("["+qe(ze).join("")+"]","g"),We=function(t,e){var n;if(!t||!ge[typeof t])return t;for(n in t)if(e(t[n],n,t)===re)break;return t},Xe=function(t,e){var n;if(!t||!ge[typeof t])return t;for(n in t)if(Ae.call(t,n)&&e(t[n],n,t)===re)break;return t};_(/x/)&&(_=function(t){return"function"==typeof t&&"[object Function]"==ke.call(t)});var Ye=d(function(t,e,n){Ae.call(t,n)?t[n]++:t[n]=1}),Ge=d(function(t,e,n){(Ae.call(t,n)?t[n]:t[n]=[]).push(e)}),Qe=d(function(t,e,n){t[n]=e}),Ke=H,tn=y(tn=Date.now)&&tn||function(){return(new Date).getTime()};i.after=function(t,e){if(!_(e))throw new TypeError;return function(){return 1>--t?e.apply(this,arguments):void 0}},i.bind=X,i.bindAll=function(t){for(var e=1<arguments.length?h(arguments,!0,!1,1):S(t),n=-1,r=e.length;++n<r;){var i=e[n];t[i]=g(t[i],1,null,null,t)}return t},i.chain=function(t){return t=new o(t),t.__chain__=!0,t},i.compact=function(t){for(var e=-1,n=t?t.length:0,r=[];++e<n;){var i=t[e];i&&r.push(i)}return r},i.compose=function(){for(var t=arguments,e=t.length;e--;)if(!_(t[e]))throw new TypeError;return function(){for(var e=arguments,n=t.length;n--;)e=[t[n].apply(this,e)];return e[0]}},i.countBy=Ye,i.debounce=Y,i.defaults=E,i.defer=function(t){if(!_(t))throw new TypeError;var e=r(arguments,1);return setTimeout(function(){t.apply(ee,e)},1)},i.delay=function(t,e){if(!_(t))throw new TypeError;var n=r(arguments,2);return setTimeout(function(){t.apply(ee,n)},e)},i.difference=function(t){return l(t,h(arguments,!0,!0,1))},i.filter=I,i.flatten=function(t,e){return h(t,e)},i.forEach=M,i.functions=S,i.groupBy=Ge,i.indexBy=Qe,i.initial=function(t,e,n){var i=0,o=t?t.length:0;if("number"!=typeof e&&null!=e){var a=o;for(e=G(e,n,3);a--&&e(t[a],a,t);)i++}else i=null==e||n?1:e||i;return r(t,0,Le(He(0,o-i),o))},i.intersection=function(){for(var t=[],e=-1,n=arguments.length;++e<n;){var r=arguments[e];(Je(r)||b(r))&&t.push(r)}var i=t[0],o=-1,a=m(),s=i?i.length:0,u=[];t:for(;++o<s;)if(r=i[o],0>a(u,r)){for(e=n;--e;)if(0>a(t[e],r))continue t;u.push(r)}return u},i.invert=T,i.invoke=function(t,e){var n=r(arguments,2),i=-1,o="function"==typeof e,a=t?t.length:0,s=Array("number"==typeof a?a:0);return M(t,function(t){s[++i]=(o?e:t[e]).apply(t,n)}),s},i.keys=qe,i.map=H,i.max=L,i.memoize=function(t,e){var n={};return function(){var r=e?e.apply(this,arguments):ie+arguments[0];return Ae.call(n,r)?n[r]:n[r]=t.apply(this,arguments)}},i.min=function(t,e,n){var r=1/0,i=r;"function"!=typeof e&&n&&n[e]===t&&(e=null);var o=-1,a=t?t.length:0;if(null==e&&"number"==typeof a)for(;++o<a;)n=t[o],i>n&&(i=n);else e=G(e,n,3),M(t,function(t,n,o){n=e(t,n,o),r>n&&(r=n,i=t)});return i},i.omit=function(t){var e=[];We(t,function(t,n){e.push(n)});for(var e=l(e,h(arguments,!0,!1,1)),n=-1,r=e.length,i={};++n<r;){var o=e[n];i[o]=t[o]}return i},i.once=function(t){var e,n;if(!_(t))throw new TypeError;return function(){return e?n:(e=!0,n=t.apply(this,arguments),t=null,n)}},i.pairs=function(t){for(var e=-1,n=qe(t),r=n.length,i=Array(r);++e<r;){var o=n[e];i[e]=[o,t[o]]}return i},i.partial=function(t){return g(t,16,r(arguments,1))},i.pick=function(t){for(var e=-1,n=h(arguments,!0,!1,1),r=n.length,i={};++e<r;){var o=n[e];o in t&&(i[o]=t[o])}return i},i.pluck=Ke,i.range=function(t,e,n){t=+t||0,n=+n||1,null==e&&(e=t,t=0);var r=-1;e=He(0,Ce((e-t)/n));for(var i=Array(e);++r<e;)i[r]=t,t+=n;return i},i.reject=function(t,e,n){return e=G(e,n,3),I(t,function(t,n,r){return!e(t,n,r)})},i.rest=Z,i.shuffle=J,i.sortBy=function(t,n,r){var i=-1,o=t?t.length:0,a=Array("number"==typeof o?o:0);for(n=G(n,r,3),M(t,function(t,e,r){a[++i]={m:[n(t,e,r)],n:i,o:t}}),o=a.length,a.sort(e);o--;)a[o]=a[o].o;return a},i.tap=function(t,e){return e(t),t},i.throttle=function(t,e,n){var r=!0,i=!0;if(!_(t))throw new TypeError;return!1===n?r=!1:C(n)&&(r="leading"in n?n.leading:r,i="trailing"in n?n.trailing:i),n={},n.leading=r,n.maxWait=e,n.trailing=i,Y(t,e,n)},i.times=function(t,e,n){t=-1<(t=+t)?t:0;var r=-1,i=Array(t);for(e=u(e,n,1);++r<t;)i[r]=e(r);return i},i.toArray=function(t){return Je(t)?r(t):t&&"number"==typeof t.length?H(t):P(t)},i.union=function(){return p(h(arguments,!0,!0))},i.uniq=W,i.values=P,i.where=q,i.without=function(t){return l(t,r(arguments,1))},i.wrap=function(t,e){return g(e,16,[t])},i.zip=function(){for(var t=-1,e=L(Ke(arguments,"length")),n=Array(0>e?0:e);++t<e;)n[t]=Ke(arguments,t);return n},i.collect=H,i.drop=Z,i.each=M,i.extend=x,i.methods=S,i.object=function(t,e){var n=-1,r=t?t.length:0,i={};for(e||!r||Je(t[0])||(e=[]);++n<r;){var o=t[n];e?i[o]=e[n]:o&&(i[o[0]]=o[1])}return i},i.select=I,i.tail=Z,i.unique=W,i.clone=function(t){return C(t)?Je(t)?r(t):x({},t):t},i.contains=N,i.escape=function(t){return null==t?"":(t+"").replace(Ve,v)},i.every=O,i.find=$,i.has=function(t,e){return t?Ae.call(t,e):!1},i.identity=Q,i.indexOf=U,i.isArguments=b,i.isArray=Je,i.isBoolean=function(t){return!0===t||!1===t||t&&"object"==typeof t&&ke.call(t)==ce||!1},i.isDate=function(t){return t&&"object"==typeof t&&ke.call(t)==le||!1},i.isElement=function(t){return t&&1===t.nodeType||!1},i.isEmpty=k,i.isEqual=function(t,e){return f(t,e)},i.isFinite=function(t){return $e(t)&&!Me(parseFloat(t))},i.isFunction=_,i.isNaN=function(t){return j(t)&&t!=+t},i.isNull=function(t){return null===t},i.isNumber=j,i.isObject=C,i.isRegExp=function(t){return t&&ge[typeof t]&&ke.call(t)==pe||!1},i.isString=A,i.isUndefined=function(t){return"undefined"==typeof t},i.lastIndexOf=function(t,e,n){var r=t?t.length:0;for("number"==typeof n&&(r=(0>n?He(0,r+n):Le(n,r-1))+1);r--;)if(t[r]===e)return r;return-1},i.mixin=K,i.noConflict=function(){return me._=Te,this},i.random=function(t,e){return null==t&&null==e&&(e=1),t=+t||0,null==e?(e=t,t=0):e=+e||0,t+je(Re()*(e-t+1))},i.reduce=R,i.reduceRight=D,i.result=function(t,e){if(t){var n=t[e];return _(n)?t[e]():n}},i.size=function(t){var e=t?t.length:0;return"number"==typeof e?e:qe(t).length},i.some=B,i.sortedIndex=V,i.template=function(t,e,r){var o=i,a=o.templateSettings;t=(t||"")+"",r=E({},r,a);var s=0,u="__p+='",a=r.variable;t.replace(RegExp((r.escape||oe).source+"|"+(r.interpolate||oe).source+"|"+(r.evaluate||oe).source+"|$","g"),function(e,r,i,o,a){return u+=t.slice(s,a).replace(ae,n),r&&(u+="'+_.escape("+r+")+'"),o&&(u+="';"+o+";\n__p+='"),i&&(u+="'+((__t=("+i+"))==null?'':__t)+'"),s=a+e.length,e}),u+="';",a||(a="obj",u="with("+a+"||{}){"+u+"}"),u="function("+a+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+u+"return __p}";try{var c=Function("_","return "+u)(o)}catch(l){throw l.source=u,l}return e?c(e):(c.source=u,c)},i.unescape=function(t){return null==t?"":(t+"").replace(Ze,w)},i.uniqueId=function(t){var e=++ne+"";return t?t+e:e},i.all=O,i.any=B,i.detect=$,i.findWhere=function(t,e){return q(t,e,!0)},i.foldl=R,i.foldr=D,i.include=N,i.inject=R,i.first=z,i.last=function(t,e,n){var i=0,o=t?t.length:0;if("number"!=typeof e&&null!=e){var a=o;for(e=G(e,n,3);a--&&e(t[a],a,t);)i++}else if(i=e,null==i||n)return t?t[o-1]:ee;return r(t,He(0,o-i))},i.sample=function(t,e,n){return t&&"number"!=typeof t.length&&(t=P(t)),null==e||n?t?t[0+je(Re()*(t.length-1-0+1))]:ee:(t=J(t),t.length=Le(He(0,e),t.length),t)},i.take=z,i.head=z,K(i),i.VERSION="2.4.1",i.prototype.chain=function(){return this.__chain__=!0,this},i.prototype.value=function(){return this.__wrapped__},M("pop push reverse shift sort splice unshift".split(" "),function(t){var e=Ee[t];i.prototype[t]=function(){var t=this.__wrapped__;return e.apply(t,arguments),De.spliceObjects||0!==t.length||delete t[0],this}}),M(["concat","join","slice"],function(t){var e=Ee[t];i.prototype[t]=function(){var t=e.apply(this.__wrapped__,arguments);return this.__chain__&&(t=new o(t),t.__chain__=!0),t}}),"function"==typeof define&&"object"==typeof define.amd&&define.amd?(me._=i,define(function(){return i})):ye&&we?be?(we.exports=i)._=i:ye._=i:me._=i}.call(this),function(){{var t,e=this,n=e.Backbone,r=[],i=(r.push,r.slice);r.splice}t="undefined"!=typeof exports?exports:e.Backbone={},t.VERSION="1.1.0";var o=e._;o||"undefined"==typeof require||(o=require("underscore")),t.$=e.jQuery||e.Zepto||e.ender||e.$,t.noConflict=function(){return e.Backbone=n,this},t.emulateHTTP=!1,t.emulateJSON=!1;var a=t.Events={on:function(t,e,n){if(!u(this,"on",t,[e,n])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);return r.push({callback:e,context:n,ctx:n||this}),this},once:function(t,e,n){if(!u(this,"once",t,[e,n])||!e)return this;var r=this,i=o.once(function(){r.off(t,i),e.apply(this,arguments)});return i._callback=e,this.on(t,i,n)},off:function(t,e,n){var r,i,a,s,c,l,h,f;if(!this._events||!u(this,"off",t,[e,n]))return this;if(!t&&!e&&!n)return this._events={},this;for(s=t?[t]:o.keys(this._events),c=0,l=s.length;l>c;c++)if(t=s[c],a=this._events[t]){if(this._events[t]=r=[],e||n)for(h=0,f=a.length;f>h;h++)i=a[h],(e&&e!==i.callback&&e!==i.callback._callback||n&&n!==i.context)&&r.push(i);r.length||delete this._events[t]}return this},trigger:function(t){if(!this._events)return this;var e=i.call(arguments,1);if(!u(this,"trigger",t,e))return this;var n=this._events[t],r=this._events.all;return n&&c(n,e),r&&c(r,arguments),this},stopListening:function(t,e,n){var r=this._listeningTo;if(!r)return this;var i=!e&&!n;n||"object"!=typeof e||(n=this),t&&((r={})[t._listenId]=t);for(var a in r)t=r[a],t.off(e,n,this),(i||o.isEmpty(t._events))&&delete this._listeningTo[a];return this}},s=/\s+/,u=function(t,e,n,r){if(!n)return!0;if("object"==typeof n){for(var i in n)t[e].apply(t,[i,n[i]].concat(r));return!1}if(s.test(n)){for(var o=n.split(s),a=0,u=o.length;u>a;a++)t[e].apply(t,[o[a]].concat(r));return!1}return!0},c=function(t,e){var n,r=-1,i=t.length,o=e[0],a=e[1],s=e[2];switch(e.length){case 0:for(;++r<i;)(n=t[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=t[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=t[r]).callback.call(n.ctx,o,a);return;case 3:for(;++r<i;)(n=t[r]).callback.call(n.ctx,o,a,s);return;default:for(;++r<i;)(n=t[r]).callback.apply(n.ctx,e)}},l={listenTo:"on",listenToOnce:"once"};o.each(l,function(t,e){a[e]=function(e,n,r){var i=this._listeningTo||(this._listeningTo={}),a=e._listenId||(e._listenId=o.uniqueId("l"));return i[a]=e,r||"object"!=typeof n||(r=this),e[t](n,r,this),this}}),a.bind=a.on,a.unbind=a.off,o.extend(t,a);var h=t.Model=function(t,e){var n=t||{};e||(e={}),this.cid=o.uniqueId("c"),this.attributes={},e.collection&&(this.collection=e.collection),e.parse&&(n=this.parse(n,e)||{}),n=o.defaults({},n,o.result(this,"defaults")),this.set(n,e),this.changed={},this.initialize.apply(this,arguments)};o.extend(h.prototype,a,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(){return o.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return o.escape(this.get(t))},has:function(t){return null!=this.get(t)},set:function(t,e,n){var r,i,a,s,u,c,l,h;if(null==t)return this;if("object"==typeof t?(i=t,n=e):(i={})[t]=e,n||(n={}),!this._validate(i,n))return!1;a=n.unset,u=n.silent,s=[],c=this._changing,this._changing=!0,c||(this._previousAttributes=o.clone(this.attributes),this.changed={}),h=this.attributes,l=this._previousAttributes,this.idAttribute in i&&(this.id=i[this.idAttribute]);for(r in i)e=i[r],o.isEqual(h[r],e)||s.push(r),o.isEqual(l[r],e)?delete this.changed[r]:this.changed[r]=e,a?delete h[r]:h[r]=e;if(!u){s.length&&(this._pending=!0);for(var f=0,p=s.length;p>f;f++)this.trigger("change:"+s[f],this,h[s[f]],n)}if(c)return this;if(!u)for(;this._pending;)this._pending=!1,this.trigger("change",this,n);return this._pending=!1,this._changing=!1,this},unset:function(t,e){return this.set(t,void 0,o.extend({},e,{unset:!0}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,o.extend({},t,{unset:!0}))},hasChanged:function(t){return null==t?!o.isEmpty(this.changed):o.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?o.clone(this.changed):!1;var e,n=!1,r=this._changing?this._previousAttributes:this.attributes;for(var i in t)o.isEqual(r[i],e=t[i])||((n||(n={}))[i]=e);return n},previous:function(t){return null!=t&&this._previousAttributes?this._previousAttributes[t]:null},previousAttributes:function(){return o.clone(this._previousAttributes)},fetch:function(t){t=t?o.clone(t):{},void 0===t.parse&&(t.parse=!0);var e=this,n=t.success;return t.success=function(r){return e.set(e.parse(r,t),t)?(n&&n(e,r,t),void e.trigger("sync",e,r,t)):!1},F(this,t),this.sync("read",this,t)},save:function(t,e,n){var r,i,a,s=this.attributes;if(null==t||"object"==typeof t?(r=t,n=e):(r={})[t]=e,n=o.extend({validate:!0},n),r&&!n.wait){if(!this.set(r,n))return!1}else if(!this._validate(r,n))return!1;r&&n.wait&&(this.attributes=o.extend({},s,r)),void 0===n.parse&&(n.parse=!0);var u=this,c=n.success;return n.success=function(t){u.attributes=s;var e=u.parse(t,n);return n.wait&&(e=o.extend(r||{},e)),o.isObject(e)&&!u.set(e,n)?!1:(c&&c(u,t,n),void u.trigger("sync",u,t,n))},F(this,n),i=this.isNew()?"create":n.patch?"patch":"update","patch"===i&&(n.attrs=r),a=this.sync(i,this,n),r&&n.wait&&(this.attributes=s),a},destroy:function(t){t=t?o.clone(t):{};var e=this,n=t.success,r=function(){e.trigger("destroy",e,e.collection,t)};if(t.success=function(i){(t.wait||e.isNew())&&r(),n&&n(e,i,t),e.isNew()||e.trigger("sync",e,i,t)},this.isNew())return t.success(),!1;F(this,t);var i=this.sync("delete",this,t);return t.wait||r(),i},url:function(){var t=o.result(this,"urlRoot")||o.result(this.collection,"url")||M();return this.isNew()?t:t+("/"===t.charAt(t.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(t){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},isValid:function(t){return this._validate({},o.extend(t||{},{validate:!0}))},_validate:function(t,e){if(!e.validate||!this.validate)return!0;t=o.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;return n?(this.trigger("invalid",this,n,o.extend(e,{validationError:n})),!1):!0}});var f=["keys","values","pairs","invert","pick","omit"];o.each(f,function(t){h.prototype[t]=function(){var e=i.call(arguments);return e.unshift(this.attributes),o[t].apply(o,e)}});var p=t.Collection=function(t,e){e||(e={}),e.model&&(this.model=e.model),void 0!==e.comparator&&(this.comparator=e.comparator),this._reset(),this.initialize.apply(this,arguments),t&&this.reset(t,o.extend({silent:!0},e))},d={add:!0,remove:!0,merge:!0},g={add:!0,remove:!1};o.extend(p.prototype,a,{model:h,initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return t.sync.apply(this,arguments)},add:function(t,e){return this.set(t,o.extend({merge:!1},e,g))},remove:function(t,e){var n=!o.isArray(t);t=n?[t]:o.clone(t),e||(e={});var r,i,a,s;for(r=0,i=t.length;i>r;r++)s=t[r]=this.get(t[r]),s&&(delete this._byId[s.id],delete this._byId[s.cid],a=this.indexOf(s),this.models.splice(a,1),this.length--,e.silent||(e.index=a,s.trigger("remove",s,this,e)),this._removeReference(s));return n?t[0]:t},set:function(t,e){e=o.defaults({},e,d),e.parse&&(t=this.parse(t,e));var n=!o.isArray(t);t=n?t?[t]:[]:o.clone(t);var r,i,a,s,u,c,l,f=e.at,p=this.model,g=this.comparator&&null==f&&e.sort!==!1,v=o.isString(this.comparator)?this.comparator:null,m=[],y=[],w={},b=e.add,x=e.merge,E=e.remove,S=!g&&b&&E?[]:!1;for(r=0,i=t.length;i>r;r++){if(u=t[r],a=u instanceof h?s=u:u[p.prototype.idAttribute],c=this.get(a))E&&(w[c.cid]=!0),x&&(u=u===s?s.attributes:u,e.parse&&(u=c.parse(u,e)),c.set(u,e),g&&!l&&c.hasChanged(v)&&(l=!0)),t[r]=c;else if(b){if(s=t[r]=this._prepareModel(u,e),!s)continue;m.push(s),s.on("all",this._onModelEvent,this),this._byId[s.cid]=s,null!=s.id&&(this._byId[s.id]=s)}S&&S.push(c||s)}if(E){for(r=0,i=this.length;i>r;++r)w[(s=this.models[r]).cid]||y.push(s);y.length&&this.remove(y,e)}if(m.length||S&&S.length)if(g&&(l=!0),this.length+=m.length,null!=f)for(r=0,i=m.length;i>r;r++)this.models.splice(f+r,0,m[r]);else{S&&(this.models.length=0);var T=S||m;for(r=0,i=T.length;i>r;r++)this.models.push(T[r])}if(l&&this.sort({silent:!0}),!e.silent){for(r=0,i=m.length;i>r;r++)(s=m[r]).trigger("add",s,this,e);(l||S&&S.length)&&this.trigger("sort",this,e)}return n?t[0]:t},reset:function(t,e){e||(e={});for(var n=0,r=this.models.length;r>n;n++)this._removeReference(this.models[n]);return e.previousModels=this.models,this._reset(),t=this.add(t,o.extend({silent:!0},e)),e.silent||this.trigger("reset",this,e),t},push:function(t,e){return this.add(t,o.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t),e},unshift:function(t,e){return this.add(t,o.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t),e},slice:function(){return i.apply(this.models,arguments)},get:function(t){return null==t?void 0:this._byId[t.id]||this._byId[t.cid]||this._byId[t]},at:function(t){return this.models[t]},where:function(t,e){return o.isEmpty(t)?e?void 0:[]:this[e?"find":"filter"](function(e){for(var n in t)if(t[n]!==e.get(n))return!1;return!0})},findWhere:function(t){return this.where(t,!0)},sort:function(t){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return t||(t={}),o.isString(this.comparator)||1===this.comparator.length?this.models=this.sortBy(this.comparator,this):this.models.sort(o.bind(this.comparator,this)),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return o.invoke(this.models,"get",t)},fetch:function(t){t=t?o.clone(t):{},void 0===t.parse&&(t.parse=!0);var e=t.success,n=this;return t.success=function(r){var i=t.reset?"reset":"set";n[i](r,t),e&&e(n,r,t),n.trigger("sync",n,r,t)},F(this,t),this.sync("read",this,t)},create:function(t,e){if(e=e?o.clone(e):{},!(t=this._prepareModel(t,e)))return!1;e.wait||this.add(t,e);var n=this,r=e.success;return e.success=function(t,e,i){i.wait&&n.add(t,i),r&&r(t,e,i)},t.save(null,e),t},parse:function(t){return t},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,e){if(t instanceof h)return t.collection||(t.collection=this),t;e=e?o.clone(e):{},e.collection=this;var n=new this.model(t,e);return n.validationError?(this.trigger("invalid",this,n.validationError,e),!1):n},_removeReference:function(t){this===t.collection&&delete t.collection,t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,n,r){("add"!==t&&"remove"!==t||n===this)&&("destroy"===t&&this.remove(e,r),e&&t==="change:"+e.idAttribute&&(delete this._byId[e.previous(e.idAttribute)],null!=e.id&&(this._byId[e.id]=e)),this.trigger.apply(this,arguments))}});var v=["forEach","each","map","collect","reduce","foldl","inject","reduceRight","foldr","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","toArray","size","first","head","take","initial","rest","tail","drop","last","without","difference","indexOf","shuffle","lastIndexOf","isEmpty","chain"];o.each(v,function(t){p.prototype[t]=function(){var e=i.call(arguments);return e.unshift(this.models),o[t].apply(o,e)}});var m=["groupBy","countBy","sortBy"];o.each(m,function(t){p.prototype[t]=function(e,n){var r=o.isFunction(e)?e:function(t){return t.get(e)};return o[t](this.models,r,n)}});var y=t.View=function(t){this.cid=o.uniqueId("view"),t||(t={}),o.extend(this,o.pick(t,b)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},w=/^(\S+)\s*(.*)$/,b=["model","collection","el","id","attributes","className","tagName","events"];o.extend(y.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(e,n){return this.$el&&this.undelegateEvents(),this.$el=e instanceof t.$?e:t.$(e),this.el=this.$el[0],n!==!1&&this.delegateEvents(),this},delegateEvents:function(t){if(!t&&!(t=o.result(this,"events")))return this;this.undelegateEvents();for(var e in t){var n=t[e];if(o.isFunction(n)||(n=this[t[e]]),n){var r=e.match(w),i=r[1],a=r[2];n=o.bind(n,this),i+=".delegateEvents"+this.cid,""===a?this.$el.on(i,n):this.$el.on(i,a,n)}}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_ensureElement:function(){if(this.el)this.setElement(o.result(this,"el"),!1);else{var e=o.extend({},o.result(this,"attributes"));this.id&&(e.id=o.result(this,"id")),this.className&&(e["class"]=o.result(this,"className"));var n=t.$("<"+o.result(this,"tagName")+">").attr(e);this.setElement(n,!1)}}}),t.sync=function(e,n,r){var i=E[e];o.defaults(r||(r={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON});var a={type:i,dataType:"json"};if(r.url||(a.url=o.result(n,"url")||M()),null!=r.data||!n||"create"!==e&&"update"!==e&&"patch"!==e||(a.contentType="application/json",a.data=JSON.stringify(r.attrs||n.toJSON(r))),r.emulateJSON&&(a.contentType="application/x-www-form-urlencoded",a.data=a.data?{model:a.data}:{}),r.emulateHTTP&&("PUT"===i||"DELETE"===i||"PATCH"===i)){a.type="POST",r.emulateJSON&&(a.data._method=i);var s=r.beforeSend;r.beforeSend=function(t){return t.setRequestHeader("X-HTTP-Method-Override",i),s?s.apply(this,arguments):void 0}}"GET"===a.type||r.emulateJSON||(a.processData=!1),"PATCH"===a.type&&x&&(a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var u=r.xhr=t.ajax(o.extend(a,r));return n.trigger("request",n,u,r),u};var x=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),E={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};t.ajax=function(){return t.$.ajax.apply(t.$,arguments)
    };var S=t.Router=function(t){t||(t={}),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},T=/\((.*?)\)/g,k=/(\(\?)?:\w+/g,_=/\*\w+/g,C=/[\-{}\[\]+?.,\\\^$|#\s]/g;o.extend(S.prototype,a,{initialize:function(){},route:function(e,n,r){o.isRegExp(e)||(e=this._routeToRegExp(e)),o.isFunction(n)&&(r=n,n=""),r||(r=this[n]);var i=this;return t.history.route(e,function(o){var a=i._extractParameters(e,o);r&&r.apply(i,a),i.trigger.apply(i,["route:"+n].concat(a)),i.trigger("route",n,a),t.history.trigger("route",i,n,a)}),this},navigate:function(e,n){return t.history.navigate(e,n),this},_bindRoutes:function(){if(this.routes){this.routes=o.result(this,"routes");for(var t,e=o.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(C,"\\$&").replace(T,"(?:$1)?").replace(k,function(t,e){return e?t:"([^/]+)"}).replace(_,"(.*?)"),new RegExp("^"+t+"$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return o.map(n,function(t){return t?decodeURIComponent(t):null})}});var j=t.History=function(){this.handlers=[],o.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},A=/^[#\/]|\s+$/g,P=/^\/+|\/+$/g,N=/msie [\w.]+/,O=/\/$/,I=/[?#].*$/;j.started=!1,o.extend(j.prototype,a,{interval:50,getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(null==t)if(this._hasPushState||!this._wantsHashChange||e){t=this.location.pathname;var n=this.root.replace(O,"");t.indexOf(n)||(t=t.slice(n.length))}else t=this.getHash();return t.replace(A,"")},start:function(e){if(j.started)throw new Error("Backbone.history has already been started");j.started=!0,this.options=o.extend({root:"/"},this.options,e),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var n=this.getFragment(),r=document.documentMode,i=N.exec(navigator.userAgent.toLowerCase())&&(!r||7>=r);this.root=("/"+this.root+"/").replace(P,"/"),i&&this._wantsHashChange&&(this.iframe=t.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(n)),this._hasPushState?t.$(window).on("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!i?t.$(window).on("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.fragment=n;var a=this.location,s=a.pathname.replace(/[^\/]$/,"$&/")===this.root;if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!s)return this.fragment=this.getFragment(null,!0),this.location.replace(this.root+this.location.search+"#"+this.fragment),!0;this._hasPushState&&s&&a.hash&&(this.fragment=this.getHash().replace(A,""),this.history.replaceState({},document.title,this.root+this.fragment+a.search))}return this.options.silent?void 0:this.loadUrl()},stop:function(){t.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),j.started=!1},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(){var t=this.getFragment();return t===this.fragment&&this.iframe&&(t=this.getFragment(this.getHash(this.iframe))),t===this.fragment?!1:(this.iframe&&this.navigate(t),void this.loadUrl())},loadUrl:function(t){return t=this.fragment=this.getFragment(t),o.any(this.handlers,function(e){return e.route.test(t)?(e.callback(t),!0):void 0})},navigate:function(t,e){if(!j.started)return!1;e&&e!==!0||(e={trigger:!!e});var n=this.root+(t=this.getFragment(t||""));if(t=t.replace(I,""),this.fragment!==t){if(this.fragment=t,""===t&&"/"!==n&&(n=n.slice(0,-1)),this._hasPushState)this.history[e.replace?"replaceState":"pushState"]({},document.title,n);else{if(!this._wantsHashChange)return this.location.assign(n);this._updateHash(this.location,t,e.replace),this.iframe&&t!==this.getFragment(this.getHash(this.iframe))&&(e.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,t,e.replace))}return e.trigger?this.loadUrl(t):void 0}},_updateHash:function(t,e,n){if(n){var r=t.href.replace(/(javascript:|#).*$/,"");t.replace(r+"#"+e)}else t.hash="#"+e}}),t.history=new j;var $=function(t,e){var n,r=this;n=t&&o.has(t,"constructor")?t.constructor:function(){return r.apply(this,arguments)},o.extend(n,r,e);var i=function(){this.constructor=n};return i.prototype=r.prototype,n.prototype=new i,t&&o.extend(n.prototype,t),n.__super__=r.prototype,n};h.extend=p.extend=S.extend=y.extend=j.extend=$;var M=function(){throw new Error('A "url" property or function must be specified')},F=function(t,e){var n=e.error;e.error=function(r){n&&n(t,r,e),t.trigger("error",t,r,e)}}}.call(this),function(t,e){"object"==typeof exports&&"function"==typeof require?module.exports=e(require("underscore"),require("backbone")):"function"==typeof define&&define.amd?define(["underscore","backbone"],function(n,r){return e(n||t._,r||t.Backbone)}):e(_,Backbone)}(this,function(t,e){function n(){return(65536*(1+Math.random())|0).toString(16).substring(1)}function r(){return n()+n()+"-"+n()+"-"+n()+"-"+n()+"-"+n()+n()+n()}return e.LocalStorage=window.Store=function(t){if(!this.localStorage)throw"Backbone.localStorage: Environment does not support localStorage.";this.name=t;var e=this.localStorage().getItem(this.name);this.records=e&&e.split(",")||[]},t.extend(e.LocalStorage.prototype,{save:function(){this.localStorage().setItem(this.name,this.records.join(","))},create:function(t){return t.id||(t.id=r(),t.set(t.idAttribute,t.id)),this.localStorage().setItem(this.name+"-"+t.id,JSON.stringify(t)),this.records.push(t.id.toString()),this.save(),this.find(t)},update:function(e){return this.localStorage().setItem(this.name+"-"+e.id,JSON.stringify(e)),t.include(this.records,e.id.toString())||this.records.push(e.id.toString()),this.save(),this.find(e)},find:function(t){return this.jsonData(this.localStorage().getItem(this.name+"-"+t.id))},findAll:function(){return(t.chain||t)(this.records).map(function(t){return this.jsonData(this.localStorage().getItem(this.name+"-"+t))},this).compact().value()},destroy:function(e){return e.isNew()?!1:(this.localStorage().removeItem(this.name+"-"+e.id),this.records=t.reject(this.records,function(t){return t===e.id.toString()}),this.save(),e)},localStorage:function(){return localStorage},jsonData:function(t){return t&&JSON.parse(t)},_clear:function(){var e=this.localStorage(),n=new RegExp("^"+this.name+"-");e.removeItem(this.name),(t.chain||t)(e).keys().filter(function(t){return n.test(t)}).each(function(t){e.removeItem(t)}),this.records.length=0},_storageSize:function(){return this.localStorage().length}}),e.LocalStorage.sync=window.Store.sync=e.localSync=function(t,n,r){var i,o,a=n.localStorage||n.collection.localStorage,s=e.$.Deferred&&e.$.Deferred();try{switch(t){case"read":i=void 0!=n.id?a.find(n):a.findAll();break;case"create":i=a.create(n);break;case"update":i=a.update(n);break;case"delete":i=a.destroy(n)}}catch(u){o=22===u.code&&0===a._storageSize()?"Private browsing is unsupported":u.message}return i?(r&&r.success&&("0.9.10"===e.VERSION?r.success(n,i,r):r.success(i)),s&&s.resolve(i)):(o=o?o:"Record Not Found",r&&r.error&&("0.9.10"===e.VERSION?r.error(n,o,r):r.error(o)),s&&s.reject(o)),r&&r.complete&&r.complete(i),s&&s.promise()},e.ajaxSync=e.sync,e.getSyncMethod=function(t){return t.localStorage||t.collection&&t.collection.localStorage?e.localSync:e.ajaxSync},e.sync=function(t,n,r){return e.getSyncMethod(n).apply(this,[t,n,r])},e.LocalStorage});var Handlebars=function(){var t=function(){"use strict";function t(t){this.string=t}var e;return t.prototype.toString=function(){return""+this.string},e=t}(),e=function(t){"use strict";function e(t){return s[t]||"&amp;"}function n(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])}function r(t){return t instanceof a?t.toString():t||0===t?(t=""+t,c.test(t)?t.replace(u,e):t):""}function i(t){return t||0===t?f(t)&&0===t.length?!0:!1:!0}var o={},a=t,s={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},u=/[&<>"'`]/g,c=/[&<>"'`]/;o.extend=n;var l=Object.prototype.toString;o.toString=l;var h=function(t){return"function"==typeof t};h(/x/)&&(h=function(t){return"function"==typeof t&&"[object Function]"===l.call(t)});var h;o.isFunction=h;var f=Array.isArray||function(t){return t&&"object"==typeof t?"[object Array]"===l.call(t):!1};return o.isArray=f,o.escapeExpression=r,o.isEmpty=i,o}(t),n=function(){"use strict";function t(){for(var t=Error.prototype.constructor.apply(this,arguments),e=0;e<n.length;e++)this[n[e]]=t[n[e]]}var e,n=["description","fileName","lineNumber","message","name","number","stack"];return t.prototype=new Error,e=t}(),r=function(t,e){"use strict";function n(t,e){this.helpers=t||{},this.partials=e||{},r(this)}function r(t){t.registerHelper("helperMissing",function(t){if(2===arguments.length)return void 0;throw new Error("Missing helper: '"+t+"'")}),t.registerHelper("blockHelperMissing",function(e,n){var r=n.inverse||function(){},i=n.fn;return f(e)&&(e=e.call(this)),e===!0?i(this):e===!1||null==e?r(this):h(e)?e.length>0?t.helpers.each(e,n):r(this):i(e)}),t.registerHelper("each",function(t,e){var n,r=e.fn,i=e.inverse,o=0,a="";if(f(t)&&(t=t.call(this)),e.data&&(n=v(e.data)),t&&"object"==typeof t)if(h(t))for(var s=t.length;s>o;o++)n&&(n.index=o,n.first=0===o,n.last=o===t.length-1),a+=r(t[o],{data:n});else for(var u in t)t.hasOwnProperty(u)&&(n&&(n.key=u,n.index=o,n.first=0===o),a+=r(t[u],{data:n}),o++);return 0===o&&(a=i(this)),a}),t.registerHelper("if",function(t,e){return f(t)&&(t=t.call(this)),!e.hash.includeZero&&!t||a.isEmpty(t)?e.inverse(this):e.fn(this)}),t.registerHelper("unless",function(e,n){return t.helpers["if"].call(this,e,{fn:n.inverse,inverse:n.fn,hash:n.hash})}),t.registerHelper("with",function(t,e){return f(t)&&(t=t.call(this)),a.isEmpty(t)?void 0:e.fn(t)}),t.registerHelper("log",function(e,n){var r=n.data&&null!=n.data.level?parseInt(n.data.level,10):1;t.log(r,e)})}function i(t,e){g.log(t,e)}var o={},a=t,s=e,u="1.2.0";o.VERSION=u;var c=4;o.COMPILER_REVISION=c;var l={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:">= 1.0.0"};o.REVISION_CHANGES=l;var h=a.isArray,f=a.isFunction,p=a.toString,d="[object Object]";o.HandlebarsEnvironment=n,n.prototype={constructor:n,logger:g,log:i,registerHelper:function(t,e,n){if(p.call(t)===d){if(n||e)throw new s("Arg not supported with multiple helpers");a.extend(this.helpers,t)}else n&&(e.not=n),this.helpers[t]=e},registerPartial:function(t,e){p.call(t)===d?a.extend(this.partials,t):this.partials[t]=e}};var g={methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(t,e){if(g.level<=t){var n=g.methodMap[t];"undefined"!=typeof console&&console[n]&&console[n].call(console,e)}}};o.logger=g,o.log=i;var v=function(t){var e={};return a.extend(e,t),e};return o.createFrame=v,o}(e,n),i=function(t,e,n){"use strict";function r(t){var e=t&&t[0]||1,n=f;if(e!==n){if(n>e){var r=p[n],i=p[e];throw new Error("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+r+") or downgrade your runtime to an older version ("+i+").")}throw new Error("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+t[1]+").")}}function i(t,e){if(!e)throw new Error("No environment passed to template");var n=function(t,n,r,i,o,a){var s=e.VM.invokePartial.apply(this,arguments);if(null!=s)return s;if(e.compile){var u={helpers:i,partials:o,data:a};return o[n]=e.compile(t,{data:void 0!==a},e),o[n](r,u)}throw new h("The partial "+n+" could not be compiled when running in runtime-only mode")},r={escapeExpression:l.escapeExpression,invokePartial:n,programs:[],program:function(t,e,n){var r=this.programs[t];return n?r=a(t,e,n):r||(r=this.programs[t]=a(t,e)),r},merge:function(t,e){var n=t||e;return t&&e&&t!==e&&(n={},l.extend(n,e),l.extend(n,t)),n},programWithDepth:e.VM.programWithDepth,noop:e.VM.noop,compilerInfo:null};return function(n,i){i=i||{};var o,a,s=i.partial?i:e;i.partial||(o=i.helpers,a=i.partials);var u=t.call(r,s,n,o,a,i.data);return i.partial||e.VM.checkRevision(r.compilerInfo),u}}function o(t,e,n){var r=Array.prototype.slice.call(arguments,3),i=function(t,i){return i=i||{},e.apply(this,[t,i.data||n].concat(r))};return i.program=t,i.depth=r.length,i}function a(t,e,n){var r=function(t,r){return r=r||{},e(t,r.data||n)};return r.program=t,r.depth=0,r}function s(t,e,n,r,i,o){var a={partial:!0,helpers:r,partials:i,data:o};if(void 0===t)throw new h("The partial "+e+" could not be found");return t instanceof Function?t(n,a):void 0}function u(){return""}var c={},l=t,h=e,f=n.COMPILER_REVISION,p=n.REVISION_CHANGES;return c.checkRevision=r,c.template=i,c.programWithDepth=o,c.program=a,c.invokePartial=s,c.noop=u,c}(e,n,r),o=function(t,e,n,r,i){"use strict";var o,a=t,s=e,u=n,c=r,l=i,h=function(){var t=new a.HandlebarsEnvironment;return c.extend(t,a),t.SafeString=s,t.Exception=u,t.Utils=c,t.VM=l,t.template=function(e){return l.template(e,t)},t},f=h();return f.create=h,o=f}(r,t,n,e,i);return o}();FastClick.prototype.deviceIsAndroid=0<navigator.userAgent.indexOf("Android"),FastClick.prototype.deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent),FastClick.prototype.deviceIsIOS4=FastClick.prototype.deviceIsIOS&&/OS 4_\d(_\d)?/.test(navigator.userAgent),FastClick.prototype.deviceIsIOSWithBadTarget=FastClick.prototype.deviceIsIOS&&/OS ([6-9]|\d{2})_\d/.test(navigator.userAgent),FastClick.prototype.needsClick=function(t){switch(t.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(t.disabled)return!0;break;case"input":if(this.deviceIsIOS&&"file"===t.type||t.disabled)return!0;break;case"label":case"video":return!0}return/\bneedsclick\b/.test(t.className)},FastClick.prototype.needsFocus=function(t){switch(t.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!this.deviceIsAndroid;case"input":switch(t.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!t.disabled&&!t.readOnly;default:return/\bneedsfocus\b/.test(t.className)}},FastClick.prototype.sendClick=function(t,e){var n,r;document.activeElement&&document.activeElement!==t&&document.activeElement.blur(),r=e.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(t),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,t.dispatchEvent(n)},FastClick.prototype.determineEventType=function(t){return this.deviceIsAndroid&&"select"===t.tagName.toLowerCase()?"mousedown":"click"},FastClick.prototype.focus=function(t){var e;this.deviceIsIOS&&t.setSelectionRange&&0!==t.type.indexOf("date")&&"time"!==t.type?(e=t.value.length,t.setSelectionRange(e,e)):t.focus()},FastClick.prototype.updateScrollParent=function(t){var e,n;if(e=t.fastClickScrollParent,!e||!e.contains(t)){n=t;do{if(n.scrollHeight>n.offsetHeight){e=n,t.fastClickScrollParent=n;break}n=n.parentElement}while(n)}e&&(e.fastClickLastScrollTop=e.scrollTop)},FastClick.prototype.getTargetElementFromEventTarget=function(t){return t.nodeType===Node.TEXT_NODE?t.parentNode:t},FastClick.prototype.onTouchStart=function(t){var e,n,r;if(1<t.targetTouches.length)return!0;if(e=this.getTargetElementFromEventTarget(t.target),n=t.targetTouches[0],this.deviceIsIOS){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!this.deviceIsIOS4){if(n.identifier===this.lastTouchIdentifier)return t.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(e)}}return this.trackingClick=!0,this.trackingClickStart=t.timeStamp,this.targetElement=e,this.touchStartX=n.pageX,this.touchStartY=n.pageY,200>t.timeStamp-this.lastClickTime&&t.preventDefault(),!0},FastClick.prototype.touchHasMoved=function(t){t=t.changedTouches[0];var e=this.touchBoundary;return Math.abs(t.pageX-this.touchStartX)>e||Math.abs(t.pageY-this.touchStartY)>e?!0:!1},FastClick.prototype.onTouchMove=function(t){return this.trackingClick?((this.targetElement!==this.getTargetElementFromEventTarget(t.target)||this.touchHasMoved(t))&&(this.trackingClick=!1,this.targetElement=null),!0):!0},FastClick.prototype.findControl=function(t){return void 0!==t.control?t.control:t.htmlFor?document.getElementById(t.htmlFor):t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},FastClick.prototype.onTouchEnd=function(t){var e,n,r=this.targetElement;if(!this.trackingClick)return!0;if(200>t.timeStamp-this.lastClickTime)return this.cancelNextClick=!0;if(this.cancelNextClick=!1,this.lastClickTime=t.timeStamp,e=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,this.deviceIsIOSWithBadTarget&&(n=t.changedTouches[0],r=document.elementFromPoint(n.pageX-window.pageXOffset,n.pageY-window.pageYOffset)||r,r.fastClickScrollParent=this.targetElement.fastClickScrollParent),n=r.tagName.toLowerCase(),"label"===n){if(e=this.findControl(r)){if(this.focus(r),this.deviceIsAndroid)return!1;r=e}}else if(this.needsFocus(r))return 100<t.timeStamp-e||this.deviceIsIOS&&window.top!==window&&"input"===n?(this.targetElement=null,!1):(this.focus(r),this.deviceIsIOS4&&"select"===n||(this.targetElement=null,t.preventDefault()),!1);return this.deviceIsIOS&&!this.deviceIsIOS4&&(e=r.fastClickScrollParent)&&e.fastClickLastScrollTop!==e.scrollTop?!0:(this.needsClick(r)||(t.preventDefault(),this.sendClick(r,t)),!1)},FastClick.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},FastClick.prototype.onMouse=function(t){return this.targetElement&&!t.forwardedTouchEvent&&t.cancelable&&(!this.needsClick(this.targetElement)||this.cancelNextClick)?(t.stopImmediatePropagation?t.stopImmediatePropagation():t.propagationStopped=!0,t.stopPropagation(),t.preventDefault(),!1):!0},FastClick.prototype.onClick=function(t){return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===t.target.type&&0===t.detail?!0:(t=this.onMouse(t),t||(this.targetElement=null),t)},FastClick.prototype.destroy=function(){var t=this.layer;this.deviceIsAndroid&&(t.removeEventListener("mouseover",this.onMouse,!0),t.removeEventListener("mousedown",this.onMouse,!0),t.removeEventListener("mouseup",this.onMouse,!0)),t.removeEventListener("click",this.onClick,!0),t.removeEventListener("touchstart",this.onTouchStart,!1),t.removeEventListener("touchmove",this.onTouchMove,!1),t.removeEventListener("touchend",this.onTouchEnd,!1),t.removeEventListener("touchcancel",this.onTouchCancel,!1)},FastClick.notNeeded=function(t){var e,n;if("undefined"==typeof window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!FastClick.prototype.deviceIsAndroid)return!0;if((e=document.querySelector("meta[name=viewport]"))&&(-1!==e.content.indexOf("user-scalable=no")||n>31&&window.innerWidth<=window.screen.width))return!0}return"none"===t.style.msTouchAction?!0:!1},FastClick.attach=function(t){return new FastClick(t)},"undefined"!=typeof define&&define.amd?define(function(){return FastClick}):"undefined"!=typeof module&&module.exports?(module.exports=FastClick.attach,module.exports.FastClick=FastClick):window.FastClick=FastClick,function(){var t=[].slice;window.HAML=function(){function e(){}return e.escape=function(t){return(""+t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/\//g,"&#47;")},e.cleanValue=function(t){switch(t){case null:case void 0:return"";case!0:case!1:return"\x93"+t;default:return t}},e.extend=function(){var e,n,r,i,o,a,s;for(n=arguments[0],i=2<=arguments.length?t.call(arguments,1):[],a=0,s=i.length;s>a;a++){r=i[a];for(e in r)o=r[e],n[e]=o}return n},e.globals=function(){return{}},e.context=function(t){return this.extend({},e.globals(),t)},e.preserve=function(t){return t.replace(/\n/g,"&#x000A;")},e.findAndPreserve=function(t){var e;return e="textarea,pre".split(",").join("|"),t=t.replace(/\r/g,"").replace(RegExp("<("+e+")>([\\s\\S]*?)</\\1>","g"),function(t,e,n){return"<"+e+">"+window.HAML.preserve(n)+"</"+e+">"})},e.surround=function(t,e,n){var r;return t+(null!=(r=n.call(this))?r.replace(/^\s+|\s+$/g,""):void 0)+e},e.succeed=function(t,e){var n;return(null!=(n=e.call(this))?n.replace(/\s+$/g,""):void 0)+t},e.precede=function(t,e){var n;return t+(null!=(n=e.call(this))?n.replace(/^\s+/g,""):void 0)},e.reference=function(t,e){var n,r,i,o;return r=e?e+"_":"",r+="function"==typeof t.hamlObjectRef?t.hamlObjectRef():((null!=(o=t.constructor)?o.name:void 0)||"object").replace(/\W+/g,"_").replace(/([a-z\d])([A-Z])/g,"$1_$2").toLowerCase(),n="function"==typeof t.to_key?t.to_key():"function"==typeof t.id?t.id():t.id?t.id:t,i="class='"+r+"'",n?i+=" id='"+r+"_"+n+"'":void 0},e}()}.call(this),function(){(this.app||(this.app={})).Account=Backbone.Model.extend()}.call(this),function(){(this.app||(this.app={})).Page=Backbone.View.extend({template:function(){return JST[""+this.tpl](arguments[0])},attributes:{"class":"page"},render:function(){return this.$el.html(this.template()),this},goBack:function(){return app.router.navigateBack(this.$("a[data-rel=back]").attr("href"))}})}.call(this),function(){$(function(){return FastClick.attach(document.body),app.accounts=new app.Accounts,_.extend(app.Router.prototype,app.PageTransitions),app.router=new app.Router,app.router.bindEvents(),Backbone.history.start({root:"index.html"}),$(document).on("click","a[data-disable-target]",function(t){return t.preventDefault(),t.stopImmediatePropagation()})})}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/accounts/index"]=JST["accounts/index"]=Handlebars.template(function(t,e,n,r,i){return this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{},'<div class="header"><a href="/" class="btn left" data-rel="back">Terug</a>Accounts<a href="/accounts/new" class="btn right">Toevoegen</a></div><div class="body"><ul class="listview"></ul></div>'})}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/accounts/list"]=JST["accounts/list"]=Handlebars.template(function(t,e,n,r,i){function o(t,e){var r,i,o="";return o+='<li><a href="/accounts/show/',(i=n.id)?r=i.call(t,{hash:{},data:e}):(i=t&&t.id,r=typeof i===u?i.call(t,{hash:{},data:e}):i),o+=c(r)+'">',(i=n.username)?r=i.call(t,{hash:{},data:e}):(i=t&&t.username,r=typeof i===u?i.call(t,{hash:{},data:e}):i),o+=c(r)+"</a></li>"}function a(){var t="";return t}this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{};var s,u="function",c=this.escapeExpression,l=this;return s=n.each.call(e,e&&e.accounts,{hash:{},inverse:l.program(3,a,i),fn:l.program(1,o,i),data:i}),s||0===s?s:""})}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/accounts/new"]=JST["accounts/new"]=Handlebars.template(function(t,e,n,r,i){return this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{},'<div class="header"><a href="/accounts" class="btn left" data-rel="back">Terug</a>Nieuw account</div><div class="body"><form><input id="username" type="number" placeholder="Uw account nummer" /><input id="password" type="password" placeholder="Uw wachtwoord" /><input type="submit" value="Opslaan" /></form></div>'})}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/accounts/show"]=JST["accounts/show"]=Handlebars.template(function(t,e,n,r,i){this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{};var o,a="",s="function",u=this.escapeExpression;return a+='<div class="header"><a href="/accounts" class="btn left" data-rel="back">Terug</a>'+u((o=e&&e.account,o=null==o||o===!1?o:o.username,typeof o===s?o.apply(e):o))+'<a id="delete-account" href="#" class="btn right" data-bypass="">Verwijderen</a></div><div class="body"><form><input id="username" type="number" placeholder="Uw account nummer" readonly="" value="'+u((o=e&&e.account,o=null==o||o===!1?o:o.username,typeof o===s?o.apply(e):o))+'" /><input id="password" type="password" placeholder="Uw wachtwoord" readonly="" value="'+u((o=e&&e.account,o=null==o||o===!1?o:o.password,typeof o===s?o.apply(e):o))+'" /></form></div>'})}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/detail"]=JST.detail=Handlebars.template(function(t,e,n,r,i){return this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{},'<div class="header"><a href="/" class="btn left" data-rel="back">Terug</a>Detail</div><div class="body">Detail</div>'})}.call(this),function(){null==window.JST&&(window.JST={}),window.JST.foo=function(t){return function(){var t,e,n;return e=window.HAML.escape,t=window.HAML.cleanValue,n=[],n.push("<dl>\n  <dt>Name</dt>\n  <dd>"+e(t(this.name))+"</dd>\n  <dt>Author</dt>\n  <dd>"+e(t(this.author))+"</dd>\n</dl>"),n.join("\n").replace(/\s([\w-]+)='\x93true'/gm," $1").replace(/\s([\w-]+)='\x93false'/gm,"")}.call(window.HAML.context(t))}}.call(this),function(){this.JST||(this.JST={}),this.JST["templates/home"]=JST.home=Handlebars.template(function(t,e,n,r,i){return this.compilerInfo=[4,">= 1.0.0"],n=this.merge(n,t.helpers),i=i||{},'<div class="header"><a href="/" class="btn left" data-bypass="" data-disable-target="">Menu</a>Home<a href="/accounts" class="btn right" data-transition="slideup">Accounts</a></div><div class="body">Welcome<ul class="listview"><li><a href="/detail" data-transition="flip">Detail</a></li></ul></div><div class="slideout-menu"><ul class="listview"><li>ohai</li><li>obai</li></ul></div>'})}.call(this),function(){(this.app||(this.app={})).Accounts=Backbone.Collection.extend({model:app.Account,localStorage:new Backbone.LocalStorage("accounts")})}.call(this),function(){this.initCordova=function(){return $(function(){return $("body").addClass("platform-"+cordova.platformId)})},window.cordova&&initCordova()}.call(this),function(){var t;t={_navigationHistory:this.navigationHistory||(this.navigationHistory=[]),_isNavigatingBack:function(t){var e;return this.back?!0:(e=this._navigationHistory[this._navigationHistory.length-2],e?e.fragment===t:!1)},bindEvents:function(){return $(document).on("click","a[data-rel=back]",function(){return app.router.back=!0}),$(document).on("click","a:not([data-bypass])",function(t){return function(e){var n,r,i;return n=$(e.currentTarget),r=n.attr("href"),i=n.protocol+"//",r.slice(i.length)!==i?(e.preventDefault(),t.navigateAnimated(r,n.attr("data-transition"))):void 0}}(this))},navigateBack:function(t){return this.back=!0,this.navigate(t,!0)},navigateAnimated:function(t,e){return this.transition=e,this.navigate(t,!0),this.transition=null},transitionToPage:function(t,e){var n,r;return null==e&&(e=app.defaultTransition||"slide"),e=this.transition||e,n=Backbone.history.getFragment(),this._isNavigatingBack(n)?(this.back=!0,e=(this._navigationHistory.pop()||{}).transition||e):this._navigationHistory.push({fragment:n,transition:e}),r=t.render(),r.$el.addClass("page-pre-in"),r.$el.css("z-index",-10),$("body").append(r.$el),this.currentPage?($("body").addClass("viewport-transitioning viewport-"+e),setTimeout(function(t){return function(){return t.currentPage&&(window.scrollTo(0,0),t.currentPage.$el.addClass("animated "+e+" out"+(t.back?" reverse":""))),r.$el.removeClass("page-pre-in"),r.$el.addClass("animated "+e+" in"+(t.back?" reverse":"")),r.$el.one("webkitAnimationEnd mozAnimationEnd msAnimationEnd oAnimationEnd animationend",function(){return r.$el.removeClass("animated "+e+" in reverse"),r.$el.css("z-index",""),t.currentPage&&t.currentPage.remove(),t.currentPage=r,t.back=!1,$("body").removeClass("viewport-transitioning"),$("body").removeClass("viewport-"+e)})}}(this),1)):(this.currentPage=r,this.currentPage.$el.removeClass("page-pre-in"))}},(this.app||(this.app={})).PageTransitions=t}.call(this),function(){(this.app||(this.app={})).Router=Backbone.Router.extend({routes:{"":"home",detail:"detail",accounts:"accounts","accounts/new":"newAccount","accounts/show/:id":"showAccount"},home:function(){return this.transitionToPage(new app.HomePage)},detail:function(){return this.transitionToPage(new app.DetailPage)},accounts:function(){return this.transitionToPage(new app.AccountsPage)},newAccount:function(){return this.transitionToPage(new app.NewAccountPage)},showAccount:function(t){return app.accounts.fetch(),this.transitionToPage(new app.ShowAccountPage({model:app.accounts.get(t)}))}})}.call(this),function(){(this.app||(this.app={})).AccountsList=Backbone.View.extend({template:JST["accounts/list"],initialize:function(){return this.listenTo(app.accounts,"reset",this.render),app.accounts.fetch({reset:!0})},render:function(){return this.$el.html(this.template({accounts:app.accounts.toJSON()})),this}})}.call(this),function(){(this.app||(this.app={})).AccountsPage=app.Page.extend({tpl:"accounts/index",initialize:function(){return this.accountsList=new app.AccountsList},render:function(){return app.Page.prototype.render.apply(this),this.accountsList.setElement(this.$(".listview")).render(),this}})}.call(this),function(){(this.app||(this.app={})).NewAccountPage=app.Page.extend({tpl:"accounts/new",events:{"submit form":"createAccount"},createAccount:function(t){return t.preventDefault(),app.accounts.create(this.newAttributes()),document.activeElement.blur(),setTimeout(function(t){return function(){return t.goBack()}}(this),500)},newAttributes:function(){return{username:this.$("#username").val(),password:this.$("#password").val()}}})}.call(this),function(){(this.app||(this.app={})).ShowAccountPage=app.Page.extend({tpl:"accounts/show",events:{"click #delete-account":"deleteAccount"},render:function(){return this.$el.html(this.template({account:this.model.toJSON()})),this},deleteAccount:function(t){return t.preventDefault(),confirm("Weet u zeker dat u dit account wilt verwijderen?")?(this.model.destroy(),this.goBack()):void 0}})}.call(this),function(){(this.app||(this.app={})).DetailPage=app.Page.extend({tpl:"detail"})}.call(this),function(){(this.app||(this.app={})).HomePage=app.Page.extend({tpl:"home",events:{"click .btn.left":"showMenu"},showMenu:function(){return this.$el.hasClass("slideout")?(this.$el.removeClass("slideout").addClass("slideout-hidden"),setTimeout(function(t){return function(){return t.$el.removeClass("slideout-hidden"),t.$(".slideout-menu").hide()}}(this),500)):(this.$(".slideout-menu").show(),this.$el.addClass("slideout"))}})}.call(this);
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Haml
//window.JST['foo']({name: 'Pascal'})
//console.log(window.JST)
pending…
Emblem
//window.JST['home']()
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 comments

Add a comment