(function(){var r=this,it=r.Backbone,c=[],pt=c.push,o=c.slice,wt=c.splice,t,n,f,y,p,w,k,d,tt,l,e;t=typeof exports!="undefined"?exports:r.Backbone={},t.VERSION="1.1.0",n=r._,n||typeof require=="undefined"||(n=require("underscore")),t.$=r.jQuery||r.Zepto||r.ender||r.$,t.noConflict=function(){return r.Backbone=it,this},t.emulateHTTP=!1,t.emulateJSON=!1;var i=t.Events={on:function(n,t,i){if(!s(this,"on",n,[t,i])||!t)return this;this._events||(this._events={});var r=this._events[n]||(this._events[n]=[]);return r.push({callback:t,context:i,ctx:i||this}),this},once:function(t,i,r){if(!s(this,"once",t,[i,r])||!i)return this;var f=this,u=n.once(function(){f.off(t,u),i.apply(this,arguments)});u._callback=i;return this.on(t,u,r)},off:function(t,i,r){var o,u,h,c,f,l,e,a;if(!this._events||!s(this,"off",t,[i,r]))return this;if(!t&&!i&&!r)return this._events={},this;for(c=t?[t]:n.keys(this._events),f=0,l=c.length;f<l;f++)if(t=c[f],h=this._events[t]){if(this._events[t]=o=[],i||r)for(e=0,a=h.length;e<a;e++)u=h[e],(i&&i!==u.callback&&i!==u.callback._callback||r&&r!==u.context)&&o.push(u);o.length||delete this._events[t]}return this},trigger:function(n){var t,i,r;return this._events?(t=o.call(arguments,1),!s(this,"trigger",n,t))?this:(i=this._events[n],r=this._events.all,i&&v(i,t),r&&v(r,arguments),this):this},stopListening:function(t,i,r){var u=this._listeningTo,e,f;if(!u)return this;e=!i&&!r,r||typeof i!="object"||(r=this),t&&((u={})[t._listenId]=t);for(f in u)t=u[f],t.off(i,r,this),(e||n.isEmpty(t._events))&&delete this._listeningTo[f];return this}},a=/\s+/,s=function(n,t,i,r){var f,e,u,o;if(!i)return!0;if(typeof i=="object"){for(f in i)n[t].apply(n,[f,i[f]].concat(r));return!1}if(a.test(i)){for(e=i.split(a),u=0,o=e.length;u<o;u++)n[t].apply(n,[e[u]].concat(r));return!1}return!0},v=function(n,t){var i,r=-1,u=n.length,f=t[0],e=t[1],o=t[2];switch(t.length){case 0:while(++r<u)(i=n[r]).callback.call(i.ctx);return;case 1:while(++r<u)(i=n[r]).callback.call(i.ctx,f);return;case 2:while(++r<u)(i=n[r]).callback.call(i.ctx,f,e);return;case 3:while(++r<u)(i=n[r]).callback.call(i.ctx,f,e,o);return;default:while(++r<u)(i=n[r]).callback.apply(i.ctx,t)}};n.each({listenTo:"on",listenToOnce:"once"},function(t,r){i[r]=function(i,r,u){var f=this._listeningTo||(this._listeningTo={}),e=i._listenId||(i._listenId=n.uniqueId("l"));return f[e]=i,u||typeof r!="object"||(u=this),i[t](r,u,this),this}}),i.bind=i.on,i.unbind=i.off,n.extend(t,i),f=t.Model=function(t,i){var r=t||{};i||(i={}),this.cid=n.uniqueId("c"),this.attributes={},i.collection&&(this.collection=i.collection),i.parse&&(r=this.parse(r,i)||{}),r=n.defaults({},r,n.result(this,"defaults")),this.set(r,i),this.changed={},this.initialize.apply(this,arguments)},n.extend(f.prototype,i,{changed:null,validationError:null,idAttribute:"id",initialize:function(){},toJSON:function(){return n.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(n){return this.attributes[n]},escape:function(t){return n.escape(this.get(t))},has:function(n){return this.get(n)!=null},set:function(t,i,r){var u,f,l,e,h,c,a,o,s,v;if(t==null)return this;if(typeof t=="object"?(f=t,r=i):(f={})[t]=i,r||(r={}),!this._validate(f,r))return!1;l=r.unset,h=r.silent,e=[],c=this._changing,this._changing=!0,c||(this._previousAttributes=n.clone(this.attributes),this.changed={}),o=this.attributes,a=this._previousAttributes,this.idAttribute in f&&(this.id=f[this.idAttribute]);for(u in f)i=f[u],n.isEqual(o[u],i)||e.push(u),n.isEqual(a[u],i)?delete this.changed[u]:this.changed[u]=i,l?delete o[u]:o[u]=i;if(!h)for(e.length&&(this._pending=!0),s=0,v=e.length;s<v;s++)this.trigger("change:"+e[s],this,o[e[s]],r);if(c)return this;if(!h)while(this._pending)this._pending=!1,this.trigger("change",this,r);return this._pending=!1,this._changing=!1,this},unset:function(t,i){return this.set(t,void 0,n.extend({},i,{unset:!0}))},clear:function(t){var i={},r;for(r in this.attributes)i[r]=void 0;return this.set(i,n.extend({},t,{unset:!0}))},hasChanged:function(t){return t==null?!n.isEmpty(this.changed):n.has(this.changed,t)},changedAttributes:function(t){var u,i,f,r;if(!t)return this.hasChanged()?n.clone(this.changed):!1;i=!1,f=this._changing?this._previousAttributes:this.attributes;for(r in t)n.isEqual(f[r],u=t[r])||((i||(i={}))[r]=u);return i},previous:function(n){return n==null||!this._previousAttributes?null:this._previousAttributes[n]},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(t){t=t?n.clone(t):{},t.parse===void 0&&(t.parse=!0);var i=this,r=t.success;return t.success=function(n){if(!i.set(i.parse(n,t),t))return!1;r&&r(i,n,t),i.trigger("sync",i,n,t)},e(this,t),this.sync("read",this,t)},save:function(t,i,r){var u,o,c,s=this.attributes,f,h;if(t==null||typeof t=="object"?(u=t,r=i):(u={})[t]=i,r=n.extend({validate:!0},r),u&&!r.wait){if(!this.set(u,r))return!1}else if(!this._validate(u,r))return!1;return u&&r.wait&&(this.attributes=n.extend({},s,u)),r.parse===void 0&&(r.parse=!0),f=this,h=r.success,r.success=function(t){f.attributes=s;var i=f.parse(t,r);if(r.wait&&(i=n.extend(u||{},i)),n.isObject(i)&&!f.set(i,r))return!1;h&&h(f,t,r),f.trigger("sync",f,t,r)},e(this,r),o=this.isNew()?"create":r.patch?"patch":"update",o==="patch"&&(r.attrs=u),c=this.sync(o,this,r),u&&r.wait&&(this.attributes=s),c},destroy:function(t){var f;t=t?n.clone(t):{};var i=this,r=t.success,u=function(){i.trigger("destroy",i,i.collection,t)};return(t.success=function(n){(t.wait||i.isNew())&&u(),r&&r(i,n,t),i.isNew()||i.trigger("sync",i,n,t)},this.isNew())?(t.success(),!1):(e(this,t),f=this.sync("delete",this,t),t.wait||u(),f)},url:function(){var t=n.result(this,"urlRoot")||n.result(this.collection,"url")||l();return this.isNew()?t:t+(t.charAt(t.length-1)==="/"?"":"/")+encodeURIComponent(this.id)},parse:function(n){return n},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},isValid:function(t){return this._validate({},n.extend(t||{},{validate:!0}))},_validate:function(t,i){if(!i.validate||!this.validate)return!0;t=n.extend({},this.attributes,t);var r=this.validationError=this.validate(t,i)||null;return r?(this.trigger("invalid",this,r,n.extend(i,{validationError:r})),!1):!0}}),y=["keys","values","pairs","invert","pick","omit"],n.each(y,function(t){f.prototype[t]=function(){var i=o.call(arguments);return i.unshift(this.attributes),n[t].apply(n,i)}});var h=t.Collection=function(t,i){i||(i={}),i.model&&(this.model=i.model),i.comparator!==void 0&&(this.comparator=i.comparator),this._reset(),this.initialize.apply(this,arguments),t&&this.reset(t,n.extend({silent:!0},i))},rt={add:!0,remove:!0,merge:!0},ut={add:!0,remove:!1};n.extend(h.prototype,i,{model:f,initialize:function(){},toJSON:function(n){return this.map(function(t){return t.toJSON(n)})},sync:function(){return t.sync.apply(this,arguments)},add:function(t,i){return this.set(t,n.extend({merge:!1},i,ut))},remove:function(t,i){var e=!n.isArray(t),u,o,f,r;for(t=e?[t]:n.clone(t),i||(i={}),u=0,o=t.length;u<o;u++)(r=t[u]=this.get(t[u]),r)&&(delete this._byId[r.id],delete this._byId[r.cid],f=this.indexOf(r),this.models.splice(f,1),this.length--,i.silent||(i.index=f,r.trigger("remove",r,this,i)),this._removeReference(r));return e?t[0]:t},set:function(t,i){var a,b;i=n.defaults({},i,rt),i.parse&&(t=this.parse(t,i)),a=!n.isArray(t),t=a?t?[t]:[]:n.clone(t);for(var k,u,e,c,l,v=i.at,nt=this.model,y=this.comparator&&v==null&&i.sort!==!1,tt=n.isString(this.comparator)?this.comparator:null,s=[],p=[],d={},g=i.add,it=i.merge,w=i.remove,h=!y&&g&&w?[]:!1,r=0,o=t.length;r<o;r++){if(e=t[r],k=e instanceof f?u=e:e[nt.prototype.idAttribute],c=this.get(k))w&&(d[c.cid]=!0),it&&(e=e===u?u.attributes:e,i.parse&&(e=c.parse(e,i)),c.set(e,i),y&&!l&&c.hasChanged(tt)&&(l=!0)),t[r]=c;else if(g){if(u=t[r]=this._prepareModel(e,i),!u)continue;s.push(u);u.on("all",this._onModelEvent,this);this._byId[u.cid]=u,u.id!=null&&(this._byId[u.id]=u)}h&&h.push(c||u)}if(w){for(r=0,o=this.length;r<o;++r)d[(u=this.models[r]).cid]||p.push(u);p.length&&this.remove(p,i)}if(s.length||h&&h.length)if(y&&(l=!0),this.length+=s.length,v!=null)for(r=0,o=s.length;r<o;r++)this.models.splice(v+r,0,s[r]);else for(h&&(this.models.length=0),b=h||s,r=0,o=b.length;r<o;r++)this.models.push(b[r]);if(l&&this.sort({silent:!0}),!i.silent){for(r=0,o=s.length;r<o;r++)(u=s[r]).trigger("add",u,this,i);(l||h&&h.length)&&this.trigger("sort",this,i)}return a?t[0]:t},reset:function(t,i){i||(i={});for(var r=0,u=this.models.length;r<u;r++)this._removeReference(this.models[r]);return i.previousModels=this.models,this._reset(),t=this.add(t,n.extend({silent:!0},i)),i.silent||this.trigger("reset",this,i),t},push:function(t,i){return this.add(t,n.extend({at:this.length},i))},pop:function(n){var t=this.at(this.length-1);return this.remove(t,n),t},unshift:function(t,i){return this.add(t,n.extend({at:0},i))},shift:function(n){var t=this.at(0);return this.remove(t,n),t},slice:function(){return o.apply(this.models,arguments)},get:function(n){if(n!=null)return this._byId[n.id]||this._byId[n.cid]||this._byId[n]},at:function(n){return this.models[n]},where:function(t,i){return n.isEmpty(t)?i?void 0:[]:this[i?"find":"filter"](function(n){for(var i in t)if(t[i]!==n.get(i))return!1;return!0})},findWhere:function(n){return this.where(n,!0)},sort:function(t){if(!this.comparator)throw new Error("Cannot sort a set without a comparator");return t||(t={}),n.isString(this.comparator)||this.comparator.length===1?this.models=this.sortBy(this.comparator,this):this.models.sort(n.bind(this.comparator,this)),t.silent||this.trigger("sort",this,t),this},pluck:function(t){return n.invoke(this.models,"get",t)},fetch:function(t){t=t?n.clone(t):{},t.parse===void 0&&(t.parse=!0);var r=t.success,i=this;return t.success=function(n){var u=t.reset?"reset":"set";i[u](n,t),r&&r(i,n,t),i.trigger("sync",i,n,t)},e(this,t),this.sync("read",this,t)},create:function(t,i){if(i=i?n.clone(i):{},!(t=this._prepareModel(t,i)))return!1;i.wait||this.add(t,i);var u=this,r=i.success;return i.success=function(n,t,i){i.wait&&u.add(n,i),r&&r(n,t,i)},t.save(null,i),t},parse:function(n){return n},clone:function(){return new this.constructor(this.models)},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(t,i){if(t instanceof f)return t.collection||(t.collection=this),t;i=i?n.clone(i):{},i.collection=this;var r=new this.model(t,i);return r.validationError?(this.trigger("invalid",this,r.validationError,i),!1):r},_removeReference:function(n){this===n.collection&&delete n.collection,n.off("all",this._onModelEvent,this)},_onModelEvent:function(n,t,i,r){(n!=="add"&&n!=="remove"||i===this)&&(n==="destroy"&&this.remove(t,r),t&&n==="change:"+t.idAttribute&&(delete this._byId[t.previous(t.idAttribute)],t.id!=null&&(this._byId[t.id]=t)),this.trigger.apply(this,arguments))}}),p=["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"],n.each(p,function(t){h.prototype[t]=function(){var i=o.call(arguments);return i.unshift(this.models),n[t].apply(n,i)}}),w=["groupBy","countBy","sortBy"],n.each(w,function(t){h.prototype[t]=function(i,r){var u=n.isFunction(i)?i:function(n){return n.get(i)};return n[t](this.models,u,r)}});var b=t.View=function(t){this.cid=n.uniqueId("view"),t||(t={}),n.extend(this,n.pick(t,et)),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},ft=/^(\S+)\s*(.*)$/,et=["model","collection","el","id","attributes","className","tagName","events"];n.extend(b.prototype,i,{tagName:"div",$:function(n){return this.$el.find(n)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this.stopListening(),this},setElement:function(n,i){return this.$el&&this.undelegateEvents(),this.$el=n instanceof t.$?n:t.$(n),this.el=this.$el[0],i!==!1&&this.delegateEvents(),this},delegateEvents:function(t){var r,i;if(!(t||(t=n.result(this,"events"))))return this;this.undelegateEvents();for(r in t)if(i=t[r],n.isFunction(i)||(i=this[t[r]]),i){var f=r.match(ft),u=f[1],e=f[2];if(i=n.bind(i,this),u+=".delegateEvents"+this.cid,e==="")this.$el.on(u,i);else this.$el.on(u,e,i)}return this},undelegateEvents:function(){return this.$el.off(".delegateEvents"+this.cid),this},_ensureElement:function(){var i,r;this.el?this.setElement(n.result(this,"el"),!1):(i=n.extend({},n.result(this,"attributes")),this.id&&(i.id=n.result(this,"id")),this.className&&(i["class"]=n.result(this,"className")),r=t.$("<"+n.result(this,"tagName")+">").attr(i),this.setElement(r,!1))}}),t.sync=function(i,r,u){var e=d[i],f,o,s;return n.defaults(u||(u={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON}),f={type:e,dataType:"json"},u.url||(f.url=n.result(r,"url")||l()),u.data==null&&r&&(i==="create"||i==="update"||i==="patch")&&(f.contentType="application/json",f.data=JSON.stringify(u.attrs||r.toJSON(u))),u.emulateJSON&&(f.contentType="application/x-www-form-urlencoded",f.data=f.data?{model:f.data}:{}),u.emulateHTTP&&(e==="PUT"||e==="DELETE"||e==="PATCH")&&(f.type="POST",u.emulateJSON&&(f.data._method=e),o=u.beforeSend,u.beforeSend=function(n){return n.setRequestHeader("X-HTTP-Method-Override",e),o?o.apply(this,arguments):void 0}),f.type==="GET"||u.emulateJSON||(f.processData=!1),f.type==="PATCH"&&k&&(f.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}),s=u.xhr=t.ajax(n.extend(f,u)),r.trigger("request",r,s,u),s},k=typeof window!="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),d={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"},t.ajax=function(){return t.$.ajax.apply(t.$,arguments)};var g=t.Router=function(n){n||(n={}),n.routes&&(this.routes=n.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},ot=/\((.*?)\)/g,st=/(\(\?)?:\w+/g,ht=/\*\w+/g,ct=/[\-{}\[\]+?.,\\\^$|#\s]/g;n.extend(g.prototype,i,{initialize:function(){},route:function(i,r,u){n.isRegExp(i)||(i=this._routeToRegExp(i)),n.isFunction(r)&&(u=r,r=""),u||(u=this[r]);var f=this;return t.history.route(i,function(n){var e=f._extractParameters(i,n);u&&u.apply(f,e),f.trigger.apply(f,["route:"+r].concat(e)),f.trigger("route",r,e),t.history.trigger("route",f,r,e)}),this},navigate:function(n,i){return t.history.navigate(n,i),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,"routes");for(var t,i=n.keys(this.routes);(t=i.pop())!=null;)this.route(t,this.routes[t])}},_routeToRegExp:function(n){return n=n.replace(ct,"\\$&").replace(ot,"(?:$1)?").replace(st,function(n,t){return t?n:"([^/]+)"}).replace(ht,"(.*?)"),new RegExp("^"+n+"$")},_extractParameters:function(t,i){var r=t.exec(i).slice(1);return n.map(r,function(n){return n?decodeURIComponent(n):null})}});var u=t.History=function(){this.handlers=[],n.bindAll(this,"checkUrl"),typeof window!="undefined"&&(this.location=window.location,this.history=window.history)},nt=/^[#\/]|\s+$/g,lt=/^\/+|\/+$/g,at=/msie [\w.]+/,vt=/\/$/,yt=/[?#].*$/;u.started=!1,n.extend(u.prototype,i,{interval:50,getHash:function(n){var t=(n||this).location.href.match(/#(.*)$/);return t?t[1]:""},getFragment:function(n,t){if(n==null)if(this._hasPushState||!this._wantsHashChange||t){n=this.location.pathname;var i=this.root.replace(vt,"");n.indexOf(i)||(n=n.slice(i.length))}else n=this.getHash();return n.replace(nt,"")},start:function(i){var r,f;if(u.started)throw new Error("Backbone.history has already been started");u.started=!0,this.options=n.extend({root:"/"},this.options,i),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 e=this.getFragment(),o=document.documentMode,s=at.exec(navigator.userAgent.toLowerCase())&&(!o||o<=7);if(this.root=("/"+this.root+"/").replace(lt,"/"),s&&this._wantsHashChange&&(this.iframe=t.$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(e)),this._hasPushState)t.$(window).on("popstate",this.checkUrl);else if(this._wantsHashChange&&"onhashchange"in window&&!s)t.$(window).on("hashchange",this.checkUrl);else this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval));if(this.fragment=e,r=this.location,f=r.pathname.replace(/[^\/]$/,"$&/")===this.root,this._wantsHashChange&&this._wantsPushState)if(this._hasPushState||f)this._hasPushState&&f&&r.hash&&(this.fragment=this.getHash().replace(nt,""),this.history.replaceState({},document.title,this.root+this.fragment+r.search));else return this.fragment=this.getFragment(null,!0),this.location.replace(this.root+this.location.search+"#"+this.fragment),!0;if(!this.options.silent)return this.loadUrl()},stop:function(){t.$(window).off("popstate",this.checkUrl).off("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),u.started=!1},route:function(n,t){this.handlers.unshift({route:n,callback:t})},checkUrl:function(){var n=this.getFragment();if(n===this.fragment&&this.iframe&&(n=this.getFragment(this.getHash(this.iframe))),n===this.fragment)return!1;this.iframe&&this.navigate(n),this.loadUrl()},loadUrl:function(t){return t=this.fragment=this.getFragment(t),n.any(this.handlers,function(n){if(n.route.test(t))return n.callback(t),!0})},navigate:function(n,t){if(!u.started)return!1;t&&t!==!0||(t={trigger:!!t});var i=this.root+(n=this.getFragment(n||""));if(n=n.replace(yt,""),this.fragment!==n){if(this.fragment=n,n===""&&i!=="/"&&(i=i.slice(0,-1)),this._hasPushState)this.history[t.replace?"replaceState":"pushState"]({},document.title,i);else if(this._wantsHashChange)this._updateHash(this.location,n,t.replace),this.iframe&&n!==this.getFragment(this.getHash(this.iframe))&&(t.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,n,t.replace));else return this.location.assign(i);if(t.trigger)return this.loadUrl(n)}},_updateHash:function(n,t,i){if(i){var r=n.href.replace(/(javascript:|#).*$/,"");n.replace(r+"#"+t)}else n.hash="#"+t}}),t.history=new u,tt=function(t,i){var u=this,r,f;return r=t&&n.has(t,"constructor")?t.constructor:function(){return u.apply(this,arguments)},n.extend(r,u,i),f=function(){this.constructor=r},f.prototype=u.prototype,r.prototype=new f,t&&n.extend(r.prototype,t),r.__super__=u.prototype,r},f.extend=h.extend=g.extend=b.extend=u.extend=tt,l=function(){throw new Error('A "url" property or function must be specified');},e=function(n,t){var i=t.error;t.error=function(r){i&&i(n,r,t),n.trigger("error",n,r,t)}}}).call(this),function(){Backbone.StateManager=function(n,t){var i,r;return i=function(n,t){return this.options=t!=null?t:{},this.states=new i.States(n),this},i.extend=n.View.extend,t.extend(i.prototype,n.Events,{getCurrentState:function(){return this.currentState},addState:function(n,t){return this.states.add(n,t),this.trigger("add:state",n)},removeState:function(n){return this.states.remove(n),this.trigger("remove:state",n)},initialize:function(n){var t;return n==null&&(n={}),(t=this.states.findInitial())?this.triggerState(t,n):void 0},triggerState:function(n,i){return i==null&&(i={}),n===this.currentState&&!i.reEnter?!1:(t.extend(i,{toState:n,fromState:this.currentState}),this.currentState&&this.exitState(i),this.enterState(n,i))},enterState:function(n,i){var r,u,f;return(i==null&&(i={}),!((r=this.states.find(n))&&t.isFunction(r.enter)))?!1:(this.trigger("before:enter:state",n,r,i),typeof(u=r.findTransition("onBeforeEnterFrom",i.fromState))=="function"&&u(i),r.enter(i),typeof(f=r.findTransition("onEnterFrom",i.fromState))=="function"&&f(i),this.trigger("enter:state",n,r,i),this.currentState=n,this)},exitState:function(n){var i,r,u;return(n==null&&(n={}),!((i=this.states.find(this.currentState))&&t.isFunction(i.exit)))?!1:(this.trigger("before:exit:state",this.currentState,i,n),typeof(r=i.findTransition("onBeforeExitTo",n.toState))=="function"&&r(n),i.exit(n),typeof(u=i.findTransition("onExitTo",n.toState))=="function"&&u(n),this.trigger("exit:state",this.currentState,i,n),delete this.currentState,this)}}),i.States=function(n){var i=this;return this.states={},n&&t.isObject(n)&&t.each(n,function(n,t){return i.add(t,n)}),this},t.extend(i.States.prototype,{add:function(n,r){return(t.isString(n)&&t.isObject(r))?this.states[n]=new i.State(n,r):!1},remove:function(n){return t.isString(n)?delete this.states[n]:!1},find:function(n){return t.isString(n)?t.chain(this.states).find(function(t){return t.matchName(n)}).value():!1},findInitial:function(){var n,i=this;if((n=t.find(this.states,function(n){return n.initial}))!=null)return n.name}}),i.State=function(n,r){return this.name=n,t.extend(this,r),this.regExpName=i.State._regExpStateConversion(this.name),this},t.extend(i.State.prototype,{matchName:function(n){return this.regExpName.test(n)},findTransition:function(n,r){var u=this;return(this.transitions&&t.isString(r)&&t.isString(n))?t.find(this.transitions,function(t,u){var f;if(u.indexOf(""+n+":")===0)return u=(f=u.indexOf(":not:")===n.length)?u.slice(n.length+5):u.slice(n.length+1),i.State._regExpStateConversion(u).test(r)!==f}):!1}}),i.State._regExpStateConversion=function(n){return n=n.replace(/[-[\]{}()+?.,\\^$|#\s]/g,"\\$&").replace(/:\w+/g,"([^/]+)").replace(/\*\w+/g,"(.*?)"),new RegExp("^"+n+"$")},i.addStateManager=function(i,u){var f,e;return u==null&&(u={}),i||new Error("Target must be defined"),e=t.isFunction(i.states)?i.states():i.states,r(e,i),i.stateManager=f=new n.StateManager(e,u),i.triggerState=function(){return f.triggerState.apply(f,arguments)},i.getCurrentState=function(){return f.getCurrentState()},(u.initialize||t.isUndefined(u.initialize))&&f.initialize(u),delete i.states},r=function(n){var i;return i=t.last(arguments),t.each(n,function(u,f){return t.isFunction(u)?n[f]=t.bind(u,i):t.isObject(u)?n[f]=r(u,i):void 0}),n},i}(Backbone,_)}.call(this)