lodash-rails 2.2.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,54 +1,55 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 2.2.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
3
+ * Lo-Dash 2.3.0 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
4
4
  * Build: `lodash modern -o ./dist/lodash.js`
5
5
  */
6
- ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:_+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:_+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0
7
- }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[0|r/2],a=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&a&&typeof a=="object")return!1;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+G[n]}function i(){return g.pop()||[]}function f(){return y.pop()||{k:null,l:null,m:null,"false":!1,n:0,"null":!1,number:null,object:null,push:null,string:null,"true":!1,undefined:!1,o:null}
8
- }function l(){}function c(n){n.length=0,g.length<d&&g.push(n)}function p(n){var t=n.l;t&&p(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,y.length<d&&y.push(n)}function s(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function v(e){function g(n){if(!n||je.call(n)!=z)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=ge(t))&&ge(e);return e?n==e||ge(n)==e:st(n)}function y(n,t,e){if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);
9
- for(var r=-1,u=V[typeof n]&&Ke(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function d(n,t,e){var r;if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function G(n,t,e){var r,u=n,o=u;if(!u)return o;for(var a=arguments,i=0,f=typeof e=="number"?2:a.length;++i<f;)if((u=a[i])&&V[typeof u])for(var l=-1,c=V[typeof u]&&Ke(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function J(n,t,e){var r,u=n,o=u;
10
- if(!u)return o;var a=arguments,i=0,f=typeof e=="number"?2:a.length;if(3<f&&"function"==typeof a[f-2])var l=et(a[--f-1],a[f--],2);else 2<f&&"function"==typeof a[f-1]&&(l=a[--f]);for(;++i<f;)if((u=a[i])&&V[typeof u])for(var c=-1,p=V[typeof u]&&Ke(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function Q(n){var t,e=[];if(!n||!V[typeof n])return e;for(t in n)ye.call(n,t)&&e.push(t);return e}function Y(n){return n&&typeof n=="object"&&!Pe(n)&&ye.call(n,"__wrapped__")?n:new nt(n)}function nt(n,t){this.__chain__=!!t,this.__wrapped__=n
11
- }function tt(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!bt(n))return n;var a=je.call(n);if(!L[a])return n;var f=We[a];switch(a){case F:case T:return new f(+n);case q:case K:return new f(n);case P:return o=f(n.source,O.exec(n)),o.lastIndex=n.lastIndex,o}if(a=Pe(n),t){var l=!r;r||(r=i()),u||(u=i());for(var p=r.length;p--;)if(r[p]==n)return u[p];o=a?f(n.length):{}}else o=a?s(n):J({},n);return a&&(ye.call(n,"index")&&(o.index=n.index),ye.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(a?It:y)(n,function(n,a){o[a]=tt(n,t,e,r,u)
12
- }),l&&(c(r),c(u)),o):o}function et(n,t,e){if(typeof n!="function")return Gt;if(typeof t=="undefined")return n;var r=n.__bindData__||qe.funcNames&&!n.name;if(typeof r=="undefined"){var u=R&&he.call(n);qe.funcNames||!u||I.test(u)||(r=!0),(qe.funcNames||!r)&&(r=!qe.funcDecomp||R.test(u),ze(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)
13
- }}return Mt(n,t)}function rt(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];if(a&&typeof a=="object"&&typeof a.length=="number"&&(Pe(a)||ht(a))){t||(a=rt(a,t,e));var i=-1,f=a.length,l=o.length;for(o.length+=f;++i<f;)o[l++]=a[i]}else e||o.push(a)}return o}function ut(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&V[typeof n]||t&&V[typeof t]))return!1;if(null==n||null==t)return n===t;var f=je.call(n),l=je.call(t);
14
- if(f==B&&(f=z),l==B&&(l=z),f!=l)return!1;switch(f){case F:case T:return+n==+t;case q:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case P:case K:return n==oe(t)}if(l=f==$,!l){if(ye.call(n,"__wrapped__")||ye.call(t,"__wrapped__"))return ut(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(f!=z)return!1;var f=n.constructor,p=t.constructor;if(f!=p&&!(_t(f)&&f instanceof f&&_t(p)&&p instanceof p))return!1}for(p=!u,u||(u=i()),o||(o=i()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var s=0,a=!0;if(u.push(n),o.push(t),l){if(f=n.length,s=t.length,a=s==n.length,!a&&!r)return a;
15
- for(;s--;)if(l=f,p=t[s],r)for(;l--&&!(a=ut(n[l],p,e,r,u,o)););else if(!(a=ut(n[s],p,e,r,u,o)))break;return a}return d(t,function(t,i,f){return ye.call(f,i)?(s++,a=ye.call(n,i)&&ut(n[i],t,e,r,u,o)):void 0}),a&&!r&&d(n,function(n,t,e){return ye.call(e,t)?a=-1<--s:void 0}),p&&(c(u),c(o)),a}function ot(n,t,e,r,u){(Pe(t)?It:y)(t,function(t,o){var a,i,f=t,l=n[o];if(t&&((i=Pe(t))||g(t))){for(f=r.length;f--;)if(a=r[f]==t){l=u[f];break}if(!a){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=i?Pe(l)?l:[]:g(l)?l:{}),r.push(t),u.push(l),c||ot(l,t,e,r,u)
16
- }}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function at(e,r,u){var a=-1,f=pt(),l=e?e.length:0,s=[],v=!r&&l>=b&&f===n,h=u||v?i():s;if(v){var g=o(h);g?(f=t,h=g):(v=!1,h=u?h:(c(h),s))}for(;++a<l;){var g=e[a],y=u?u(g,a,e):g;(r?!a||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(c(h.k),p(h)):u&&c(h),s}function it(n){return function(t,e,r){var u={};e=Y.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var a=t[r];
17
- n(u,a,e(a,r,t),t)}else y(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ft(n,t,e,r,u,o){var a=1&t,i=2&t,f=4&t,l=8&t,c=16&t,p=32&t,s=n;if(!i&&!_t(n))throw new ae;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var v=n&&n.__bindData__;if(v)return!a||1&v[1]||(v[4]=u),!a&&1&v[1]&&(t|=8),!f||4&v[1]||(v[5]=o),c&&_e.apply(v[2]||(v[2]=[]),e),p&&_e.apply(v[3]||(v[3]=[]),r),v[1]|=t,ft.apply(null,v);if(!a||i||f||p||!(qe.fastBind||Ce&&c))g=function(){var v=arguments,h=a?u:this;return(f||c||p)&&(v=$e.call(v),c&&ke.apply(v,e),p&&_e.apply(v,r),f&&v.length<o)?(t|=16,ft(n,l?t:-4&t,v,null,u,o)):(i&&(n=h[s]),this instanceof g?(h=lt(n.prototype),v=n.apply(h,v),bt(v)?v:h):n.apply(h,v))
18
- };else{if(c){var h=[u];_e.apply(h,e)}var g=c?Ce.apply(n,h):Ce.call(n,u)}return ze(g,$e.call(arguments)),g}function lt(n){return bt(n)?Oe(n):{}}function ct(n){return Le[n]}function pt(){var t=(t=Y.indexOf)===Wt?n:t;return t}function st(n){var t,e;return n&&je.call(n)==z&&(t=n.constructor,!_t(t)||t instanceof t)?(d(n,function(n,t){e=t}),typeof e=="undefined"||ye.call(n,e)):!1}function vt(n){return Me[n]}function ht(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==B||!1}function gt(n,t,e){var r=Ke(n),u=r.length;
19
- for(t=et(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function yt(n){var t=[];return d(n,function(n,e){_t(n)&&t.push(e)}),t.sort()}function mt(n){for(var t=-1,e=Ke(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function _t(n){return typeof n=="function"}function bt(n){return!(!n||!V[typeof n])}function dt(n){return typeof n=="number"||je.call(n)==q}function wt(n){return typeof n=="string"||je.call(n)==K}function jt(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;)u[t]=n[e[t]];return u
20
- }function kt(n,t,e){var r=-1,u=pt(),o=n?n.length:0,a=!1;return e=(0>e?Re(0,o+e):e)||0,Pe(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(wt(n)?n.indexOf(t,e):u(n,t,e)):y(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function xt(n,t,e){var r=!0;t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else y(n,function(n,e,u){return r=!!t(n,e,u)});return r}function Ct(n,t,e){var r=[];t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];
21
- t(o,e,n)&&r.push(o)}else y(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Ot(n,t,e){t=Y.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return y(n,function(n,e,r){return t(n,e,r)?(u=n,!1):void 0}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function It(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else y(n,t);return n}function Nt(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=Ke(n),r=u.length;
22
- y(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Et(n,t,e){var r=-1,u=n?n.length:0;if(t=Y.createCallback(t,e,3),typeof u=="number")for(var o=Xt(u);++r<u;)o[r]=t(n[r],r,n);else o=[],y(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function St(n,t,e){var u=-1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Rt(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Xt(r);++e<r;)u[e]=n[e][t];
23
- return u||Et(n,t)}function At(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=et(t,r,4);var o=-1,a=n.length;if(typeof a=="number")for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n);else y(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function Dt(n,t,e,r){var u=3>arguments.length;return t=et(t,r,4),Nt(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function Bt(n){var t=-1,e=n?n.length:0,r=Xt(typeof e=="number"?e:0);return It(n,function(n){var e=Jt(++t);r[t]=r[e],r[e]=n}),r}function $t(n,t,e){var r;t=Y.createCallback(t,e,3),e=-1;
24
- var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else y(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Ft(e){var r=-1,u=pt(),a=e?e.length:0,i=rt(arguments,!0,!0,1),f=[],l=a>=b&&u===n;if(l){var c=o(i);c?(u=t,i=c):l=!1}for(;++r<a;)c=e[r],0>u(i,c)&&f.push(c);return l&&p(i),f}function Tt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=Y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:h;return s(n,0,Ae(Re(0,r),u))
25
- }function Wt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Re(0,u+r):r||0}else if(r)return r=zt(t,e),t[r]===e?r:-1;return n(t,e,r)}function qt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=Y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Re(0,t);return s(n,r)}function zt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?Y.createCallback(e,r,1):Gt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function Pt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=Y.createCallback(e,r,3)),at(n,t,e)
26
- }function Kt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?St(Rt(n,"length")):0,r=Xt(0>e?0:e);++t<e;)r[t]=Rt(n,t);return r}function Lt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Mt(n,t){return 2<arguments.length?ft(n,17,$e.call(arguments,2),null,t):ft(n,1,null,null,t)}function Ut(n,t,e){function r(){c&&se(c),a=c=p=h,(g||v!==t)&&(s=me(),i=n.apply(l,o))}function u(){var e=t-(me()-f);0<e?c=de(u,e):(a&&se(a),e=p,a=c=p=h,e&&(s=me(),i=n.apply(l,o)))
27
- }var o,a,i,f,l,c,p,s=0,v=!1,g=!0;if(!_t(n))throw new ae;if(t=Re(0,t)||0,true===e)var y=!0,g=!1;else bt(e)&&(y=e.leading,v="maxWait"in e&&(Re(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=me(),l=this,p=g&&(c||!y),false===v)var e=y&&!c;else{a||y||(s=f);var h=v-(f-s);0<h?a||(a=de(r,h)):(a&&(a=se(a)),s=f,i=n.apply(l,o))}return c||t===v||(c=de(u,t)),e&&(i=n.apply(l,o)),i}}function Vt(n){if(!_t(n))throw new ae;var t=$e.call(arguments,1);return de(function(){n.apply(h,t)},1)
28
- }function Gt(n){return n}function Ht(n,t){var e=n,r=!t||_t(e);t||(e=nt,t=n,n=Y),It(yt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return _e.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)})})}function Jt(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=!0)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,r=Be(),e||n%1||t%1?Ae(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+ve(r*(t-n+1))
29
- }function Qt(){return this.__wrapped__}e=e?Z.defaults(H.Object(),e,Z.pick(H,D)):H;var Xt=e.Array,Yt=e.Boolean,Zt=e.Date,ne=e.Function,te=e.Math,ee=e.Number,re=e.Object,ue=e.RegExp,oe=e.String,ae=e.TypeError,ie=[],fe=re.prototype,le=e._,ce=ue("^"+oe(fe.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),pe=te.ceil,se=e.clearTimeout,ve=te.floor,he=ne.prototype.toString,ge=ce.test(ge=re.getPrototypeOf)&&ge,ye=fe.hasOwnProperty,me=ce.test(me=Zt.now)&&me||function(){return+new Zt
30
- },_e=ie.push,be=e.setImmediate,de=e.setTimeout,we=ie.splice,je=fe.toString,ke=ie.unshift,xe=function(){try{var n={},t=ce.test(t=re.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Ce=ce.test(Ce=je.bind)&&Ce,Oe=ce.test(Oe=re.create)&&Oe,Ie=ce.test(Ie=Xt.isArray)&&Ie,Ne=e.isFinite,Ee=e.isNaN,Se=ce.test(Se=re.keys)&&Se,Re=te.max,Ae=te.min,De=e.parseInt,Be=te.random,$e=ie.slice,Fe=ce.test(e.attachEvent),Te=Ce&&!/\n|true/.test(Ce+Fe),We={};We[$]=Xt,We[F]=Yt,We[T]=Zt,We[W]=ne,We[z]=re,We[q]=ee,We[P]=ue,We[K]=oe,nt.prototype=Y.prototype;
31
- var qe=Y.support={};qe.fastBind=Ce&&!Te,qe.funcDecomp=!ce.test(e.a)&&R.test(v),qe.funcNames=typeof ne.name=="string",Y.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:Y}},Oe||(lt=function(n){if(bt(n)){l.prototype=n;var t=new l;l.prototype=null}return t||{}});var ze=xe?function(n,t){U.value=t,xe(n,"__bindData__",U)}:l,Pe=Ie||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==$||!1},Ke=Se?function(n){return bt(n)?Se(n):[]
32
- }:Q,Le={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Me=mt(Le),Ue=ue("("+Ke(Me).join("|")+")","g"),Ve=ue("["+Ke(Le).join("")+"]","g"),Ge=it(function(n,t,e){ye.call(n,e)?n[e]++:n[e]=1}),He=it(function(n,t,e){(ye.call(n,e)?n[e]:n[e]=[]).push(t)}),Je=it(function(n,t,e){n[e]=t});Te&&X&&typeof be=="function"&&(Vt=function(n){if(!_t(n))throw new ae;return be.apply(e,arguments)});var Qe=8==De(w+"08")?De:function(n,t){return De(wt(n)?n.replace(E,""):n,t||0)};return Y.after=function(n,t){if(!_t(t))throw new ae;
33
- return function(){return 1>--n?t.apply(this,arguments):void 0}},Y.assign=J,Y.at=function(n){for(var t=arguments,e=-1,r=rt(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Xt(t);++e<t;)u[e]=n[r[e]];return u},Y.bind=Mt,Y.bindAll=function(n){for(var t=1<arguments.length?rt(arguments,!0,!1,1):yt(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=ft(n[u],1,null,null,n)}return n},Y.bindKey=function(n,t){return 2<arguments.length?ft(t,19,$e.call(arguments,2),null,n):ft(t,3,null,null,n)},Y.chain=function(n){return n=new nt(n),n.__chain__=!0,n
34
- },Y.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},Y.compose=function(){for(var n=arguments,t=n.length;t--;)if(!_t(n[t]))throw new ae;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Y.countBy=Ge,Y.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return et(n,t,e);if("object"!=r)return function(t){return t[n]};var u=Ke(n),o=u[0],a=n[o];return 1!=u.length||a!==a||bt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=ut(t[u[e]],n[u[e]],null,!0)););return r
35
- }:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},Y.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,ft(n,4,null,null,null,t)},Y.debounce=Ut,Y.defaults=G,Y.defer=Vt,Y.delay=function(n,t){if(!_t(n))throw new ae;var e=$e.call(arguments,2);return de(function(){n.apply(h,e)},t)},Y.difference=Ft,Y.filter=Ct,Y.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=Et(n,e,r)),rt(n,t)},Y.forEach=It,Y.forEachRight=Nt,Y.forIn=d,Y.forInRight=function(n,t,e){var r=[];
36
- d(n,function(n,t){r.push(t,n)});var u=r.length;for(t=et(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},Y.forOwn=y,Y.forOwnRight=gt,Y.functions=yt,Y.groupBy=He,Y.indexBy=Je,Y.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return s(n,0,Ae(Re(0,u-r),u))},Y.intersection=function(e){for(var r=arguments,u=r.length,a=-1,f=i(),l=-1,s=pt(),v=e?e.length:0,h=[],g=i();++a<u;){var y=r[a];f[a]=s===n&&(y?y.length:0)>=b&&o(a?r[a]:g)
37
- }n:for(;++l<v;){var m=f[0],y=e[l];if(0>(m?t(m,y):s(g,y))){for(a=u,(m||g).push(y);--a;)if(m=f[a],0>(m?t(m,y):s(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&p(m);return c(f),c(g),h},Y.invert=mt,Y.invoke=function(n,t){var e=$e.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Xt(typeof o=="number"?o:0);return It(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},Y.keys=Ke,Y.map=Et,Y.max=St,Y.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):_+arguments[0];return ye.call(r,u)?r[u]:r[u]=n.apply(this,arguments)
38
- }if(!_t(n))throw new ae;return e.cache={},e},Y.merge=function(n){var t=arguments,e=2;if(!bt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=et(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=$e.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)ot(n,t[u],r,o,a);return c(o),c(a),n},Y.min=function(n,t,e){var u=1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)
39
- });return o},Y.omit=function(n,t,e){var r=pt(),u=typeof t=="function",o={};if(u)t=Y.createCallback(t,e,3);else var a=rt(arguments,!0,!1,1);return d(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},Y.once=function(n){var t,e;if(!_t(n))throw new ae;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},Y.pairs=function(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},Y.partial=function(n){return ft(n,16,$e.call(arguments,1))},Y.partialRight=function(n){return ft(n,32,null,$e.call(arguments,1))
40
- },Y.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=rt(arguments,!0,!1,1),a=bt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=Y.createCallback(t,e,3),d(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},Y.pluck=Rt,Y.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(we.call(n,o--,1),u--);return n},Y.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Re(0,pe((t-n)/(e||1)));
41
- for(var u=Xt(t);++r<t;)u[r]=n,n+=e;return u},Y.reject=function(n,t,e){return t=Y.createCallback(t,e,3),Ct(n,function(n,e,r){return!t(n,e,r)})},Y.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=Y.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),we.call(n,r--,1),u--);return o},Y.rest=qt,Y.shuffle=Bt,Y.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Xt(typeof o=="number"?o:0);for(t=Y.createCallback(t,e,3),It(n,function(n,e,u){var o=a[++r]=f();o.m=t(n,e,u),o.n=r,o.o=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.o,p(n);
42
- return a},Y.tap=function(n,t){return t(n),n},Y.throttle=function(n,t,e){var r=!0,u=!0;if(!_t(n))throw new ae;return false===e?r=!1:bt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),M.leading=r,M.maxWait=t,M.trailing=u,Ut(n,t,M)},Y.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Xt(n);for(t=et(t,e,1);++r<n;)u[r]=t(r);return u},Y.toArray=function(n){return n&&typeof n.length=="number"?s(n):jt(n)},Y.transform=function(n,t,e,r){var u=Pe(n);return t=et(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=lt(r&&r.prototype))),(u?It:y)(n,function(n,r,u){return t(e,n,r,u)
43
- }),e},Y.union=function(){return at(rt(arguments,!0,!0))},Y.uniq=Pt,Y.values=jt,Y.where=Ct,Y.without=function(n){return Ft(n,$e.call(arguments,1))},Y.wrap=function(n,t){if(!_t(t))throw new ae;return function(){var e=[n];return _e.apply(e,arguments),t.apply(this,e)}},Y.zip=Kt,Y.zipObject=Lt,Y.collect=Et,Y.drop=qt,Y.each=It,Y.b=Nt,Y.extend=J,Y.methods=yt,Y.object=Lt,Y.select=Ct,Y.tail=qt,Y.unique=Pt,Y.unzip=Kt,Ht(Y),Y.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),tt(n,t,typeof e=="function"&&et(e,r,1))
44
- },Y.cloneDeep=function(n,t,e){return tt(n,!0,typeof t=="function"&&et(t,e,1))},Y.contains=kt,Y.escape=function(n){return null==n?"":oe(n).replace(Ve,ct)},Y.every=xt,Y.find=Ot,Y.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=Y.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},Y.findKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),y(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.findLast=function(n,t,e){var r;return t=Y.createCallback(t,e,3),Nt(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0
45
- }),r},Y.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=Y.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},Y.findLastKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),gt(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.has=function(n,t){return n?ye.call(n,t):!1},Y.identity=Gt,Y.indexOf=Wt,Y.isArguments=ht,Y.isArray=Pe,Y.isBoolean=function(n){return true===n||false===n||je.call(n)==F},Y.isDate=function(n){return n?typeof n=="object"&&je.call(n)==T:!1},Y.isElement=function(n){return n?1===n.nodeType:!1
46
- },Y.isEmpty=function(n){var t=!0;if(!n)return t;var e=je.call(n),r=n.length;return e==$||e==K||e==B||e==z&&typeof r=="number"&&_t(n.splice)?!r:(y(n,function(){return t=!1}),t)},Y.isEqual=function(n,t,e,r){return ut(n,t,typeof e=="function"&&et(e,r,2))},Y.isFinite=function(n){return Ne(n)&&!Ee(parseFloat(n))},Y.isFunction=_t,Y.isNaN=function(n){return dt(n)&&n!=+n},Y.isNull=function(n){return null===n},Y.isNumber=dt,Y.isObject=bt,Y.isPlainObject=g,Y.isRegExp=function(n){return n?typeof n=="object"&&je.call(n)==P:!1
47
- },Y.isString=wt,Y.isUndefined=function(n){return typeof n=="undefined"},Y.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Re(0,r+e):Ae(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Y.mixin=Ht,Y.noConflict=function(){return e._=le,this},Y.parseInt=Qe,Y.random=Jt,Y.reduce=At,Y.reduceRight=Dt,Y.result=function(n,t){if(n){var e=n[t];return _t(e)?n[t]():e}},Y.runInContext=v,Y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Ke(n).length},Y.some=$t,Y.sortedIndex=zt,Y.template=function(n,t,e){var r=Y.templateSettings;
48
- n||(n=""),e=G({},e,r);var u,o=G({},e.imports,r.imports),r=Ke(o),o=jt(o),i=0,f=e.interpolate||S,l="__p+='",f=ue((e.escape||S).source+"|"+f.source+"|"+(f===N?C:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(i,c).replace(A,a),e&&(l+="'+__e("+e+")+'"),f&&(u=!0,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),l+="';\n",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(j,""):l).replace(k,"$1").replace(x,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";
49
- try{var c=ne(r,"return "+l).apply(h,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Y.unescape=function(n){return null==n?"":oe(n).replace(Ue,vt)},Y.uniqueId=function(n){var t=++m;return oe(null==n?"":n)+t},Y.all=xt,Y.any=$t,Y.detect=Ot,Y.findWhere=Ot,Y.foldl=At,Y.foldr=Dt,Y.include=kt,Y.inject=At,y(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return _e.apply(t,arguments),t=n.apply(Y,t),e?new nt(t,e):t})}),Y.first=Tt,Y.last=function(n,t,e){var r=0,u=n?n.length:0;
50
- if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:h;return s(n,Re(0,u-r))},Y.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"&&(n=jt(n)),null==t||e?n?n[Jt(r-1)]:h:(n=Bt(n),n.length=Ae(Re(0,t),n.length),n)},Y.take=Tt,Y.head=Tt,y(Y,function(n,t){var e="sample"!==t;Y.prototype[t]||(Y.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new nt(o,u):o
51
- })}),Y.VERSION="2.2.1",Y.prototype.chain=function(){return this.__chain__=!0,this},Y.prototype.toString=function(){return oe(this.__wrapped__)},Y.prototype.value=Qt,Y.prototype.valueOf=Qt,It(["join","pop","shift"],function(n){var t=ie[n];Y.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new nt(e,n):e}}),It(["push","reverse","sort","unshift"],function(n){var t=ie[n];Y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),It(["concat","slice","splice"],function(n){var t=ie[n];
52
- Y.prototype[n]=function(){return new nt(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Y}var h,g=[],y=[],m=0,_=+new Date+"",b=75,d=40,w=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",j=/\b__p\+='';/g,k=/\b(__p\+=)''\+/g,x=/(__e\(.*?\)|\b__t\))\+'';/g,C=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,O=/\w*$/,I=/^function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,E=RegExp("^["+w+"]*0+(?=.$)"),S=/($^)/,R=/\bthis\b/,A=/['\n\r\t\u2028\u2029\\]/g,D="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),B="[object Arguments]",$="[object Array]",F="[object Boolean]",T="[object Date]",W="[object Function]",q="[object Number]",z="[object Object]",P="[object RegExp]",K="[object String]",L={};
53
- L[W]=!1,L[B]=L[$]=L[F]=L[T]=L[q]=L[z]=L[P]=L[K]=!0;var M={leading:!1,maxWait:0,trailing:!1},U={configurable:!1,enumerable:!1,value:null,writable:!1},V={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},G={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},H=V[typeof window]&&window||this,J=V[typeof exports]&&exports&&!exports.nodeType&&exports,Q=V[typeof module]&&module&&!module.nodeType&&module,X=Q&&Q.exports===J&&J,Y=V[typeof global]&&global;!Y||Y.global!==Y&&Y.window!==Y||(H=Y);
54
- var Z=v();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(H._=Z, define(function(){return Z})):J&&Q?X?(Q.exports=Z)._=Z:J._=Z:H._=Z}).call(this);
6
+ ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:m+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=true;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:m+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=true
7
+ }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[r/2|0],i=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&i&&typeof i=="object")return false;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=false,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function i(n){return"\\"+V[n]}function a(){return h.pop()||[]}function f(){return g.pop()||{k:null,l:null,m:null,"false":false,n:0,"null":false,number:null,object:null,push:null,string:null,"true":false,undefined:false,o:null}
8
+ }function l(n){n.length=0,h.length<b&&h.push(n)}function c(n){var t=n.l;t&&c(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,g.length<b&&g.push(n)}function p(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function s(e){function h(n){if(!n||ve.call(n)!=q)return false;var t=n.valueOf,e=typeof t=="function"&&(e=be(t))&&be(e);return e?n==e||be(n)==e:yt(n)}function g(n,t,e){if(!n||!U[typeof n])return n;t=t&&typeof e=="undefined"?t:ut(t,e,3);
9
+ for(var r=-1,u=U[typeof n]&&ze(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function b(n,t,e){var r;if(!n||!U[typeof n])return n;t=t&&typeof e=="undefined"?t:ut(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function V(n,t,e){var r,u=n,o=u;if(!u)return o;for(var i=arguments,a=0,f=typeof e=="number"?2:i.length;++a<f;)if((u=i[a])&&U[typeof u])for(var l=-1,c=U[typeof u]&&ze(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function H(n,t,e){var r,u=n,o=u;
10
+ if(!u)return o;var i=arguments,a=0,f=typeof e=="number"?2:i.length;if(3<f&&"function"==typeof i[f-2])var l=ut(i[--f-1],i[f--],2);else 2<f&&"function"==typeof i[f-1]&&(l=i[--f]);for(;++a<f;)if((u=i[a])&&U[typeof u])for(var c=-1,p=U[typeof u]&&ze(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function J(n){var t,e=[];if(!n||!U[typeof n])return e;for(t in n)de.call(n,t)&&e.push(t);return e}function Z(n){return n&&typeof n=="object"&&!qe(n)&&de.call(n,"__wrapped__")?n:new nt(n)}function nt(n,t){this.__chain__=!!t,this.__wrapped__=n
11
+ }function tt(n){function t(){if(r){var n=r.slice();je.apply(n,arguments)}if(this instanceof t){var o=rt(e.prototype),n=e.apply(o,n||arguments);return kt(n)?n:o}return e.apply(u,n||arguments)}var e=n[0],r=n[2],u=n[4];return We(t,n),t}function et(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!kt(n))return n;var i=ve.call(n);if(!K[i])return n;var f=Te[i];switch(i){case F:case T:return new f(+n);case W:case P:return new f(n);case z:return o=f(n.source,C.exec(n)),o.lastIndex=n.lastIndex,o
12
+ }if(i=qe(n),t){var c=!r;r||(r=a()),u||(u=a());for(var s=r.length;s--;)if(r[s]==n)return u[s];o=i?f(n.length):{}}else o=i?p(n):H({},n);return i&&(de.call(n,"index")&&(o.index=n.index),de.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(i?Rt:g)(n,function(n,i){o[i]=et(n,t,e,r,u)}),c&&(l(r),l(u)),o):o}function rt(n){return kt(n)?Ie(n):{}}function ut(n,t,e){if(typeof n!="function")return Qt;if(typeof t=="undefined"||!("prototype"in n))return n;var r=n.__bindData__;if(typeof r=="undefined"&&(Be.funcNames&&(r=!n.name),r=r||!Be.funcDecomp,!r)){var u=_e.call(n);
13
+ Be.funcNames||(r=!O.test(u)),r||(r=E.test(u),We(n,r))}if(false===r||true!==r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)}}return Gt(n,t)}function ot(n){function t(){var n=f?i:this;if(u){var h=u.slice();je.apply(h,arguments)}return(o||c)&&(h||(h=p(arguments)),o&&je.apply(h,o),c&&h.length<a)?(r|=16,ot([e,s?r:-4&r,h,null,i,a])):(h||(h=arguments),l&&(e=n[v]),this instanceof t?(n=rt(e.prototype),h=e.apply(n,h),kt(h)?h:n):e.apply(n,h))
14
+ }var e=n[0],r=n[1],u=n[2],o=n[3],i=n[4],a=n[5],f=1&r,l=2&r,c=4&r,s=8&r,v=e;return We(t,n),t}function it(e,r){var u=-1,i=gt(),a=e?e.length:0,f=a>=_&&i===n,l=[];if(f){var p=o(r);p?(i=t,r=p):f=false}for(;++u<a;)p=e[u],0>i(r,p)&&l.push(p);return f&&c(r),l}function at(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var i=n[r];if(i&&typeof i=="object"&&typeof i.length=="number"&&(qe(i)||_t(i))){t||(i=at(i,t,e));var a=-1,f=i.length,l=o.length;for(o.length+=f;++a<f;)o[l++]=i[a]}else e||o.push(i)}return o
15
+ }function ft(n,t,e,r,u,o){if(e){var i=e(n,t);if(typeof i!="undefined")return!!i}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&U[typeof n]||t&&U[typeof t]))return false;if(null==n||null==t)return n===t;var f=ve.call(n),c=ve.call(t);if(f==D&&(f=q),c==D&&(c=q),f!=c)return false;switch(f){case F:case T:return+n==+t;case W:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case z:case P:return n==fe(t)}if(c=f==$,!c){var p=de.call(n,"__wrapped__"),s=de.call(t,"__wrapped__");if(p||s)return ft(p?n.__wrapped__:n,s?t.__wrapped__:t,e,r,u,o);
16
+ if(f!=q)return false;if(f=n.constructor,p=t.constructor,f!=p&&!(jt(f)&&f instanceof f&&jt(p)&&p instanceof p)&&"constructor"in n&&"constructor"in t)return false}for(p=!u,u||(u=a()),o||(o=a()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var v=0,i=true;if(u.push(n),o.push(t),c){if(f=n.length,v=t.length,i=v==n.length,!i&&!r)return i;for(;v--;)if(c=f,p=t[v],r)for(;c--&&!(i=ft(n[c],p,e,r,u,o)););else if(!(i=ft(n[v],p,e,r,u,o)))break;return i}return b(t,function(t,a,f){return de.call(f,a)?(v++,i=de.call(n,a)&&ft(n[a],t,e,r,u,o)):void 0
17
+ }),i&&!r&&b(n,function(n,t,e){return de.call(e,t)?i=-1<--v:void 0}),p&&(l(u),l(o)),i}function lt(n,t,e,r,u){(qe(t)?Rt:g)(t,function(t,o){var i,a,f=t,l=n[o];if(t&&((a=qe(t))||h(t))){for(f=r.length;f--;)if(i=r[f]==t){l=u[f];break}if(!i){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=a?qe(l)?l:[]:h(l)?l:{}),r.push(t),u.push(l),c||lt(l,t,e,r,u)}}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function ct(n,t){return n+me(Fe()*(t-n+1))}function pt(e,r,u){var i=-1,f=gt(),p=e?e.length:0,s=[],v=!r&&p>=_&&f===n,h=u||v?a():s;
18
+ if(v){var g=o(h);g?(f=t,h=g):(v=false,h=u?h:(l(h),s))}for(;++i<p;){var g=e[i],y=u?u(g,i,e):g;(r?!i||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(l(h.k),c(h)):u&&l(h),s}function st(n){return function(t,e,r){var u={};e=Z.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var i=t[r];n(u,i,e(i,r,t),t)}else g(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function vt(n,t,e,r,u,o){var i=1&t,a=4&t,f=16&t,l=32&t;if(!(2&t||jt(n)))throw new le;f&&!e.length&&(t&=-17,f=e=false),l&&!r.length&&(t&=-33,l=r=false);
19
+ var c=n&&n.__bindData__;return c&&true!==c?(c=c.slice(),!i||1&c[1]||(c[4]=u),!i&&1&c[1]&&(t|=8),!a||4&c[1]||(c[5]=o),f&&je.apply(c[2]||(c[2]=[]),e),l&&je.apply(c[3]||(c[3]=[]),r),c[1]|=t,vt.apply(null,c)):(1==t||17===t?tt:ot)([n,t,e,r,u,o])}function ht(n){return Pe[n]}function gt(){var t=(t=Z.indexOf)===Pt?n:t;return t}function yt(n){var t,e;return n&&ve.call(n)==q&&(t=n.constructor,!jt(t)||t instanceof t)?(b(n,function(n,t){e=t}),typeof e=="undefined"||de.call(n,e)):false}function mt(n){return Ke[n]}function _t(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ve.call(n)==D||false
20
+ }function bt(n,t,e){var r=ze(n),u=r.length;for(t=ut(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function dt(n){var t=[];return b(n,function(n,e){jt(n)&&t.push(e)}),t.sort()}function wt(n){for(var t=-1,e=ze(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function jt(n){return typeof n=="function"}function kt(n){return!(!n||!U[typeof n])}function xt(n){return typeof n=="number"||n&&typeof n=="object"&&ve.call(n)==W||false}function Ct(n){return typeof n=="string"||n&&typeof n=="object"&&ve.call(n)==P||false
21
+ }function Ot(n){for(var t=-1,e=ze(n),r=e.length,u=ne(r);++t<r;)u[t]=n[e[t]];return u}function It(n,t,e){var r=-1,u=gt(),o=n?n.length:0,i=false;return e=(0>e?Ae(0,o+e):e)||0,qe(n)?i=-1<u(n,t,e):typeof o=="number"?i=-1<(Ct(n)?n.indexOf(t,e):u(n,t,e)):g(n,function(n){return++r<e?void 0:!(i=n===t)}),i}function Nt(n,t,e){var r=true;t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else g(n,function(n,e,u){return r=!!t(n,e,u)});return r}function St(n,t,e){var r=[];
22
+ t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}else g(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Et(n,t,e){t=Z.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return g(n,function(n,e,r){return t(n,e,r)?(u=n,false):void 0}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function Rt(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:ut(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else g(n,t);
23
+ return n}function At(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:ut(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=ze(n),r=u.length;g(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Dt(n,t,e){var r=-1,u=n?n.length:0;if(t=Z.createCallback(t,e,3),typeof u=="number")for(var o=ne(u);++r<u;)o[r]=t(n[r],r,n);else o=[],g(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function $t(n,t,e){var u=-1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;
24
+ for(var i=n.length;++e<i;){var a=n[e];a>o&&(o=a)}}else t=null==t&&Ct(n)?r:Z.createCallback(t,e,3),Rt(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Ft(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=ne(r);++e<r;)u[e]=n[e][t];return u||Dt(n,t)}function Tt(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=Z.createCallback(t,r,4);var o=-1,i=n.length;if(typeof i=="number")for(u&&(e=n[++o]);++o<i;)e=t(e,n[o],o,n);else g(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)});return e
25
+ }function Bt(n,t,e,r){var u=3>arguments.length;return t=Z.createCallback(t,r,4),At(n,function(n,r,o){e=u?(u=false,n):t(e,n,r,o)}),e}function Wt(n){var t=-1,e=n?n.length:0,r=ne(typeof e=="number"?e:0);return Rt(n,function(n){var e=ct(0,++t);r[t]=r[e],r[e]=n}),r}function qt(n,t,e){var r;t=Z.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else g(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function zt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;
26
+ for(t=Z.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:v;return p(n,0,De(Ae(0,r),u))}function Pt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ae(0,u+r):r||0}else if(r)return r=Lt(t,e),t[r]===e?r:-1;return n(t,e,r)}function Kt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=Z.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ae(0,t);return p(n,r)}function Lt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?Z.createCallback(e,r,1):Qt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;
27
+ return u}function Mt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(e=Z.createCallback(e,r,3)),pt(n,t,e)}function Ut(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?$t(Ft(n,"length")):0,r=ne(0>e?0:e);++t<e;)r[t]=Ft(n,t);return r}function Vt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Gt(n,t){return 2<arguments.length?vt(n,17,p(arguments,2),null,t):vt(n,1,null,null,t)
28
+ }function Ht(n,t,e){function r(){c&&ye(c),i=c=p=v,(g||h!==t)&&(s=we(),a=n.apply(l,o),c||i||(o=l=null))}function u(){var e=t-(we()-f);0<e?c=ke(u,e):(i&&ye(i),e=p,i=c=p=v,e&&(s=we(),a=n.apply(l,o),c||i||(o=l=null)))}var o,i,a,f,l,c,p,s=0,h=false,g=true;if(!jt(n))throw new le;if(t=Ae(0,t)||0,true===e)var y=true,g=false;else kt(e)&&(y=e.leading,h="maxWait"in e&&(Ae(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=we(),l=this,p=g&&(c||!y),false===h)var e=y&&!c;else{i||y||(s=f);var v=h-(f-s),m=0>=v;
29
+ m?(i&&(i=ye(i)),s=f,a=n.apply(l,o)):i||(i=ke(r,v))}return m&&c?c=ye(c):c||t===h||(c=ke(u,t)),e&&(m=true,a=n.apply(l,o)),!m||c||i||(o=l=null),a}}function Jt(n){if(!jt(n))throw new le;var t=p(arguments,1);return ke(function(){n.apply(v,t)},1)}function Qt(n){return n}function Xt(n,t){var e=n,r=!t||jt(e);t||(e=nt,t=n,n=Z),Rt(dt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return je.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)
30
+ })})}function Yt(){}function Zt(){return this.__wrapped__}e=e?Y.defaults(G.Object(),e,Y.pick(G,A)):G;var ne=e.Array,te=e.Boolean,ee=e.Date,re=e.Function,ue=e.Math,oe=e.Number,ie=e.Object,ae=e.RegExp,fe=e.String,le=e.TypeError,ce=[],pe=ie.prototype,se=e._,ve=pe.toString,he=ae("^"+fe(ve).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),ge=ue.ceil,ye=e.clearTimeout,me=ue.floor,_e=re.prototype.toString,be=he.test(be=ie.getPrototypeOf)&&be,de=pe.hasOwnProperty,we=he.test(we=ee.now)&&we||function(){return+new ee
31
+ },je=ce.push,ke=e.setTimeout,xe=ce.splice,Ce=typeof(Ce=X&&Q&&X.setImmediate)=="function"&&!he.test(Ce)&&Ce,Oe=function(){try{var n={},t=he.test(t=ie.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Ie=he.test(Ie=ie.create)&&Ie,Ne=he.test(Ne=ne.isArray)&&Ne,Se=e.isFinite,Ee=e.isNaN,Re=he.test(Re=ie.keys)&&Re,Ae=ue.max,De=ue.min,$e=e.parseInt,Fe=ue.random,Te={};Te[$]=ne,Te[F]=te,Te[T]=ee,Te[B]=re,Te[q]=ie,Te[W]=oe,Te[z]=ae,Te[P]=fe,nt.prototype=Z.prototype;var Be=Z.support={};Be.funcDecomp=!he.test(e.a)&&E.test(s),Be.funcNames=typeof re.name=="string",Z.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:I,variable:"",imports:{_:Z}},Ie||(rt=function(){function n(){}return function(t){if(kt(t)){n.prototype=t;
32
+ var r=new n;n.prototype=null}return r||e.Object()}}());var We=Oe?function(n,t){M.value=t,Oe(n,"__bindData__",M)}:Yt,qe=Ne||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ve.call(n)==$||false},ze=Re?function(n){return kt(n)?Re(n):[]}:J,Pe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Ke=wt(Pe),Le=ae("("+ze(Ke).join("|")+")","g"),Me=ae("["+ze(Pe).join("")+"]","g"),Ue=st(function(n,t,e){de.call(n,e)?n[e]++:n[e]=1}),Ve=st(function(n,t,e){(de.call(n,e)?n[e]:n[e]=[]).push(t)
33
+ }),Ge=st(function(n,t,e){n[e]=t});Ce&&(Jt=function(n){if(!jt(n))throw new le;return Ce.apply(e,arguments)});var He=8==$e(d+"08")?$e:function(n,t){return $e(Ct(n)?n.replace(N,""):n,t||0)};return Z.after=function(n,t){if(!jt(t))throw new le;return function(){return 1>--n?t.apply(this,arguments):void 0}},Z.assign=H,Z.at=function(n){for(var t=arguments,e=-1,r=at(t,true,false,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=ne(t);++e<t;)u[e]=n[r[e]];return u},Z.bind=Gt,Z.bindAll=function(n){for(var t=1<arguments.length?at(arguments,true,false,1):dt(n),e=-1,r=t.length;++e<r;){var u=t[e];
34
+ n[u]=vt(n[u],1,null,null,n)}return n},Z.bindKey=function(n,t){return 2<arguments.length?vt(t,19,p(arguments,2),null,n):vt(t,3,null,null,n)},Z.chain=function(n){return n=new nt(n),n.__chain__=true,n},Z.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},Z.compose=function(){for(var n=arguments,t=n.length;t--;)if(!jt(n[t]))throw new le;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Z.countBy=Ue,Z.create=function(n,t){var e=rt(n);
35
+ return t?H(e,t):e},Z.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return ut(n,t,e);if("object"!=r)return function(t){return t[n]};var u=ze(n),o=u[0],i=n[o];return 1!=u.length||i!==i||kt(i)?function(t){for(var e=u.length,r=false;e--&&(r=ft(t[u[e]],n[u[e]],null,true)););return r}:function(n){return n=n[o],i===n&&(0!==i||1/i==1/n)}},Z.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,vt(n,4,null,null,null,t)},Z.debounce=Ht,Z.defaults=V,Z.defer=Jt,Z.delay=function(n,t){if(!jt(n))throw new le;
36
+ var e=p(arguments,2);return ke(function(){n.apply(v,e)},t)},Z.difference=function(n){return it(n,at(arguments,true,true,1))},Z.filter=St,Z.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=typeof t!="function"&&r&&r[t]===n?null:t,t=false),null!=e&&(n=Dt(n,e,r)),at(n,t)},Z.forEach=Rt,Z.forEachRight=At,Z.forIn=b,Z.forInRight=function(n,t,e){var r=[];b(n,function(n,t){r.push(t,n)});var u=r.length;for(t=ut(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},Z.forOwn=g,Z.forOwnRight=bt,Z.functions=dt,Z.groupBy=Ve,Z.indexBy=Ge,Z.initial=function(n,t,e){var r=0,u=n?n.length:0;
37
+ if(typeof t!="number"&&null!=t){var o=u;for(t=Z.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return p(n,0,De(Ae(0,u-r),u))},Z.intersection=function(e){for(var r=arguments,u=r.length,i=-1,f=a(),p=-1,s=gt(),v=e?e.length:0,h=[],g=a();++i<u;){var y=r[i];f[i]=s===n&&(y?y.length:0)>=_&&o(i?r[i]:g)}n:for(;++p<v;){var m=f[0],y=e[p];if(0>(m?t(m,y):s(g,y))){for(i=u,(m||g).push(y);--i;)if(m=f[i],0>(m?t(m,y):s(r[i],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&c(m);return l(f),l(g),h},Z.invert=wt,Z.invoke=function(n,t){var e=p(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,i=ne(typeof o=="number"?o:0);
38
+ return Rt(n,function(n){i[++r]=(u?t:n[t]).apply(n,e)}),i},Z.keys=ze,Z.map=Dt,Z.max=$t,Z.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):m+arguments[0];return de.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!jt(n))throw new le;return e.cache={},e},Z.merge=function(n){var t=arguments,e=2;if(!kt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=ut(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=p(arguments,1,e),u=-1,o=a(),i=a();++u<e;)lt(n,t[u],r,o,i);
39
+ return l(o),l(i),n},Z.min=function(n,t,e){var u=1/0,o=u;if(typeof t!="function"&&e&&e[t]===n&&(t=null),null==t&&qe(n)){e=-1;for(var i=n.length;++e<i;){var a=n[e];a<o&&(o=a)}}else t=null==t&&Ct(n)?r:Z.createCallback(t,e,3),Rt(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)});return o},Z.omit=function(n,t,e){var r={};if(typeof t!="function"){var u=[];b(n,function(n,t){u.push(t)});for(var u=it(u,at(arguments,true,false,1)),o=-1,i=u.length;++o<i;){var a=u[o];r[a]=n[a]}}else t=Z.createCallback(t,e,3),b(n,function(n,e,u){t(n,e,u)||(r[e]=n)
40
+ });return r},Z.once=function(n){var t,e;if(!jt(n))throw new le;return function(){return t?e:(t=true,e=n.apply(this,arguments),n=null,e)}},Z.pairs=function(n){for(var t=-1,e=ze(n),r=e.length,u=ne(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},Z.partial=function(n){return vt(n,16,p(arguments,1))},Z.partialRight=function(n){return vt(n,32,null,p(arguments,1))},Z.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=at(arguments,true,false,1),i=kt(n)?o.length:0;++u<i;){var a=o[u];a in n&&(r[a]=n[a])
41
+ }else t=Z.createCallback(t,e,3),b(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},Z.pluck=Ft,Z.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,i=t[e];++o<u;)n[o]===i&&(xe.call(n,o--,1),u--);return n},Z.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Ae(0,ge((t-n)/(e||1)));for(var u=ne(t);++r<t;)u[r]=n,n+=e;return u},Z.reject=function(n,t,e){return t=Z.createCallback(t,e,3),St(n,function(n,e,r){return!t(n,e,r)})},Z.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];
42
+ for(t=Z.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),xe.call(n,r--,1),u--);return o},Z.rest=Kt,Z.shuffle=Wt,Z.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,i=ne(typeof o=="number"?o:0);for(t=Z.createCallback(t,e,3),Rt(n,function(n,e,u){var o=i[++r]=f();o.m=t(n,e,u),o.n=r,o.o=n}),o=i.length,i.sort(u);o--;)n=i[o],i[o]=n.o,c(n);return i},Z.tap=function(n,t){return t(n),n},Z.throttle=function(n,t,e){var r=true,u=true;if(!jt(n))throw new le;return false===e?r=false:kt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),L.leading=r,L.maxWait=t,L.trailing=u,Ht(n,t,L)
43
+ },Z.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=ne(n);for(t=ut(t,e,1);++r<n;)u[r]=t(r);return u},Z.toArray=function(n){return n&&typeof n.length=="number"?p(n):Ot(n)},Z.transform=function(n,t,e,r){var u=qe(n);if(null==e)if(u)e=[];else{var o=n&&n.constructor;e=rt(o&&o.prototype)}return t&&(t=Z.createCallback(t,r,4),(u?Rt:g)(n,function(n,r,u){return t(e,n,r,u)})),e},Z.union=function(){return pt(at(arguments,true,true))},Z.uniq=Mt,Z.values=Ot,Z.where=St,Z.without=function(n){return it(n,p(arguments,1))
44
+ },Z.wrap=function(n,t){return vt(t,16,[n])},Z.zip=Ut,Z.zipObject=Vt,Z.collect=Dt,Z.drop=Kt,Z.each=Rt,Z.eachRight=At,Z.extend=H,Z.methods=dt,Z.object=Vt,Z.select=St,Z.tail=Kt,Z.unique=Mt,Z.unzip=Ut,Xt(Z),Z.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=false),et(n,t,typeof e=="function"&&ut(e,r,1))},Z.cloneDeep=function(n,t,e){return et(n,true,typeof t=="function"&&ut(t,e,1))},Z.contains=It,Z.escape=function(n){return null==n?"":fe(n).replace(Me,ht)},Z.every=Nt,Z.find=Et,Z.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;
45
+ for(t=Z.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},Z.findKey=function(n,t,e){var r;return t=Z.createCallback(t,e,3),g(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0}),r},Z.findLast=function(n,t,e){var r;return t=Z.createCallback(t,e,3),At(n,function(n,e,u){return t(n,e,u)?(r=n,false):void 0}),r},Z.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=Z.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},Z.findLastKey=function(n,t,e){var r;return t=Z.createCallback(t,e,3),bt(n,function(n,e,u){return t(n,e,u)?(r=e,false):void 0
46
+ }),r},Z.has=function(n,t){return n?de.call(n,t):false},Z.identity=Qt,Z.indexOf=Pt,Z.isArguments=_t,Z.isArray=qe,Z.isBoolean=function(n){return true===n||false===n||n&&typeof n=="object"&&ve.call(n)==F||false},Z.isDate=function(n){return n&&typeof n=="object"&&ve.call(n)==T||false},Z.isElement=function(n){return n&&1===n.nodeType||false},Z.isEmpty=function(n){var t=true;if(!n)return t;var e=ve.call(n),r=n.length;return e==$||e==P||e==D||e==q&&typeof r=="number"&&jt(n.splice)?!r:(g(n,function(){return t=false}),t)},Z.isEqual=function(n,t,e,r){return ft(n,t,typeof e=="function"&&ut(e,r,2))
47
+ },Z.isFinite=function(n){return Se(n)&&!Ee(parseFloat(n))},Z.isFunction=jt,Z.isNaN=function(n){return xt(n)&&n!=+n},Z.isNull=function(n){return null===n},Z.isNumber=xt,Z.isObject=kt,Z.isPlainObject=h,Z.isRegExp=function(n){return n&&typeof n=="object"&&ve.call(n)==z||false},Z.isString=Ct,Z.isUndefined=function(n){return typeof n=="undefined"},Z.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Ae(0,r+e):De(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Z.mixin=Xt,Z.noConflict=function(){return e._=se,this
48
+ },Z.noop=Yt,Z.parseInt=He,Z.random=function(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=true)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,e||n%1||t%1?(e=Fe(),De(n+e*(t-n+parseFloat("1e-"+((e+"").length-1))),t)):ct(n,t)},Z.reduce=Tt,Z.reduceRight=Bt,Z.result=function(n,t){if(n){var e=n[t];return jt(e)?n[t]():e}},Z.runInContext=s,Z.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ze(n).length},Z.some=qt,Z.sortedIndex=Lt,Z.template=function(n,t,e){var r=Z.templateSettings;
49
+ n=fe(n||""),e=V({},e,r);var u,o=V({},e.imports,r.imports),r=ze(o),o=Ot(o),a=0,f=e.interpolate||S,l="__p+='",f=ae((e.escape||S).source+"|"+f.source+"|"+(f===I?x:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(a,c).replace(R,i),e&&(l+="'+__e("+e+")+'"),f&&(u=true,l+="';"+f+";\n__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),a=c+t.length,t}),l+="';",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(w,""):l).replace(j,"$1").replace(k,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";
50
+ try{var c=re(r,"return "+l).apply(v,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Z.unescape=function(n){return null==n?"":fe(n).replace(Le,mt)},Z.uniqueId=function(n){var t=++y;return fe(null==n?"":n)+t},Z.all=Nt,Z.any=qt,Z.detect=Et,Z.findWhere=Et,Z.foldl=Tt,Z.foldr=Bt,Z.include=It,Z.inject=Tt,g(Z,function(n,t){Z.prototype[t]||(Z.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return je.apply(t,arguments),t=n.apply(Z,t),e?new nt(t,e):t})}),Z.first=zt,Z.last=function(n,t,e){var r=0,u=n?n.length:0;
51
+ if(typeof t!="number"&&null!=t){var o=u;for(t=Z.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return p(n,Ae(0,u-r))},Z.sample=function(n,t,e){return n&&typeof n.length!="number"&&(n=Ot(n)),null==t||e?n?n[ct(0,n.length-1)]:v:(n=Wt(n),n.length=De(Ae(0,t),n.length),n)},Z.take=zt,Z.head=zt,g(Z,function(n,t){var e="sample"!==t;Z.prototype[t]||(Z.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new nt(o,u):o
52
+ })}),Z.VERSION="2.3.0",Z.prototype.chain=function(){return this.__chain__=true,this},Z.prototype.toString=function(){return fe(this.__wrapped__)},Z.prototype.value=Zt,Z.prototype.valueOf=Zt,Rt(["join","pop","shift"],function(n){var t=ce[n];Z.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new nt(e,n):e}}),Rt(["push","reverse","sort","unshift"],function(n){var t=ce[n];Z.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Rt(["concat","slice","splice"],function(n){var t=ce[n];
53
+ Z.prototype[n]=function(){return new nt(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Z}var v,h=[],g=[],y=0,m=+new Date+"",_=75,b=40,d=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",w=/\b__p\+='';/g,j=/\b(__p\+=)''\+/g,k=/(__e\(.*?\)|\b__t\))\+'';/g,x=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,C=/\w*$/,O=/^\s*function[ \n\r\t]+\w/,I=/<%=([\s\S]+?)%>/g,N=RegExp("^["+d+"]*0+(?=.$)"),S=/($^)/,E=/\bthis\b/,R=/['\n\r\t\u2028\u2029\\]/g,A="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),D="[object Arguments]",$="[object Array]",F="[object Boolean]",T="[object Date]",B="[object Function]",W="[object Number]",q="[object Object]",z="[object RegExp]",P="[object String]",K={};
54
+ K[B]=false,K[D]=K[$]=K[F]=K[T]=K[W]=K[q]=K[z]=K[P]=true;var L={leading:false,maxWait:0,trailing:false},M={configurable:false,enumerable:false,value:null,writable:false},U={"boolean":false,"function":true,object:true,number:false,string:false,undefined:false},V={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},G=U[typeof window]&&window||this,H=U[typeof exports]&&exports&&!exports.nodeType&&exports,J=U[typeof module]&&module&&!module.nodeType&&module,Q=J&&J.exports===H&&H,X=U[typeof global]&&global;!X||X.global!==X&&X.window!==X||(G=X);
55
+ var Y=s();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(G._=Y, define(function(){return Y})):H&&J?Q?(J.exports=Y)._=Y:H._=Y:G._=Y}).call(this);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
3
+ * Lo-Dash 2.3.0 (Custom Build) <http://lodash.com/>
4
4
  * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
5
5
  * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
6
6
  * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
@@ -147,12 +147,31 @@
147
147
  }
148
148
 
149
149
  /**
150
- * A no-operation function.
150
+ * Slices the `collection` from the `start` index up to, but not including,
151
+ * the `end` index.
152
+ *
153
+ * Note: This function is used instead of `Array#slice` to support node lists
154
+ * in IE < 9 and to ensure dense arrays are returned.
151
155
  *
152
156
  * @private
157
+ * @param {Array|Object|string} collection The collection to slice.
158
+ * @param {number} start The start index.
159
+ * @param {number} end The end index.
160
+ * @returns {Array} Returns the new array.
153
161
  */
154
- function noop() {
155
- // no operation performed
162
+ function slice(array, start, end) {
163
+ start || (start = 0);
164
+ if (typeof end == 'undefined') {
165
+ end = array ? array.length : 0;
166
+ }
167
+ var index = -1,
168
+ length = end - start || 0,
169
+ result = Array(length < 0 ? 0 : length);
170
+
171
+ while (++index < length) {
172
+ result[index] = array[start + index];
173
+ }
174
+ return result;
156
175
  }
157
176
 
158
177
  /*--------------------------------------------------------------------------*/
@@ -171,11 +190,14 @@
171
190
  /** Used to restore the original `_` reference in `noConflict` */
172
191
  var oldDash = root._;
173
192
 
193
+ /** Used to resolve the internal [[Class]] of values */
194
+ var toString = objectProto.toString;
195
+
174
196
  /** Used to detect if a method is native */
175
197
  var reNative = RegExp('^' +
176
- String(objectProto.valueOf)
198
+ String(toString)
177
199
  .replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
178
- .replace(/valueOf|for [^\]]+/g, '.+?') + '$'
200
+ .replace(/toString| for [^\]]+/g, '.*?') + '$'
179
201
  );
180
202
 
181
203
  /** Native method shortcuts */
@@ -184,24 +206,17 @@
184
206
  hasOwnProperty = objectProto.hasOwnProperty,
185
207
  now = reNative.test(now = Date.now) && now || function() { return +new Date; },
186
208
  push = arrayRef.push,
187
- toString = objectProto.toString,
188
- unshift = arrayRef.unshift;
209
+ propertyIsEnumerable = objectProto.propertyIsEnumerable;
189
210
 
190
211
  /* Native method shortcuts for methods with the same name as other `lodash` methods */
191
- var nativeBind = reNative.test(nativeBind = toString.bind) && nativeBind,
192
- nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate,
212
+ var nativeCreate = reNative.test(nativeCreate = Object.create) && nativeCreate,
193
213
  nativeIsArray = reNative.test(nativeIsArray = Array.isArray) && nativeIsArray,
194
214
  nativeIsFinite = root.isFinite,
195
215
  nativeIsNaN = root.isNaN,
196
216
  nativeKeys = reNative.test(nativeKeys = Object.keys) && nativeKeys,
197
217
  nativeMax = Math.max,
198
218
  nativeMin = Math.min,
199
- nativeRandom = Math.random,
200
- nativeSlice = arrayRef.slice;
201
-
202
- /** Detect various environments */
203
- var isIeOpera = reNative.test(root.attachEvent),
204
- isV8 = nativeBind && !/\n|true/.test(nativeBind + isIeOpera);
219
+ nativeRandom = Math.random;
205
220
 
206
221
  /*--------------------------------------------------------------------------*/
207
222
 
@@ -218,15 +233,16 @@
218
233
  *
219
234
  * The chainable wrapper functions are:
220
235
  * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`,
221
- * `compose`, `concat`, `countBy`, `createCallback`, `curry`, `debounce`,
222
- * `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, `forEach`,
223
- * `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `functions`,
224
- * `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, `invoke`, `keys`,
225
- * `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, `once`, `pairs`,
226
- * `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, `range`, `reject`,
227
- * `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, `sortBy`, `splice`,
228
- * `tap`, `throttle`, `times`, `toArray`, `transform`, `union`, `uniq`, `unshift`,
229
- * `unzip`, `values`, `where`, `without`, `wrap`, and `zip`
236
+ * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`,
237
+ * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`,
238
+ * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
239
+ * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
240
+ * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`,
241
+ * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`,
242
+ * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`,
243
+ * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`,
244
+ * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`,
245
+ * and `zip`
230
246
  *
231
247
  * The non-chainable wrapper functions are:
232
248
  * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`,
@@ -302,14 +318,6 @@
302
318
  (function() {
303
319
  var object = { '0': 1, 'length': 1 };
304
320
 
305
- /**
306
- * Detect if `Function#bind` exists and is inferred to be fast (all but V8).
307
- *
308
- * @memberOf _.support
309
- * @type boolean
310
- */
311
- support.fastBind = nativeBind && !isV8;
312
-
313
321
  /**
314
322
  * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
315
323
  *
@@ -371,6 +379,65 @@
371
379
 
372
380
  /*--------------------------------------------------------------------------*/
373
381
 
382
+ /**
383
+ * The base implementation of `_.bind` that creates the bound function and
384
+ * sets its meta data.
385
+ *
386
+ * @private
387
+ * @param {Array} bindData The bind data array.
388
+ * @returns {Function} Returns the new bound function.
389
+ */
390
+ function baseBind(bindData) {
391
+ var func = bindData[0],
392
+ partialArgs = bindData[2],
393
+ thisArg = bindData[4];
394
+
395
+ function bound() {
396
+ // `Function#bind` spec
397
+ // http://es5.github.io/#x15.3.4.5
398
+ if (partialArgs) {
399
+ var args = partialArgs.slice();
400
+ push.apply(args, arguments);
401
+ }
402
+ // mimic the constructor's `return` behavior
403
+ // http://es5.github.io/#x13.2.2
404
+ if (this instanceof bound) {
405
+ // ensure `new bound` is an instance of `func`
406
+ var thisBinding = baseCreate(func.prototype),
407
+ result = func.apply(thisBinding, args || arguments);
408
+ return isObject(result) ? result : thisBinding;
409
+ }
410
+ return func.apply(thisArg, args || arguments);
411
+ }
412
+ return bound;
413
+ }
414
+
415
+ /**
416
+ * The base implementation of `_.create` without support for assigning
417
+ * properties to the created object.
418
+ *
419
+ * @private
420
+ * @param {Object} prototype The object to inherit from.
421
+ * @returns {Object} Returns the new object.
422
+ */
423
+ function baseCreate(prototype, properties) {
424
+ return isObject(prototype) ? nativeCreate(prototype) : {};
425
+ }
426
+ // fallback for browsers without `Object.create`
427
+ if (!nativeCreate) {
428
+ baseCreate = (function() {
429
+ function Object() {}
430
+ return function(prototype) {
431
+ if (isObject(prototype)) {
432
+ Object.prototype = prototype;
433
+ var result = new Object;
434
+ Object.prototype = null;
435
+ }
436
+ return result || root.Object();
437
+ };
438
+ }());
439
+ }
440
+
374
441
  /**
375
442
  * The base implementation of `_.createCallback` without support for creating
376
443
  * "_.pluck" or "_.where" style callbacks.
@@ -385,8 +452,8 @@
385
452
  if (typeof func != 'function') {
386
453
  return identity;
387
454
  }
388
- // exit early if there is no `thisArg`
389
- if (typeof thisArg == 'undefined') {
455
+ // exit early for no `thisArg` or already bound by `Function#bind`
456
+ if (typeof thisArg == 'undefined' || !('prototype' in func)) {
390
457
  return func;
391
458
  }
392
459
  switch (argCount) {
@@ -406,6 +473,82 @@
406
473
  return bind(func, thisArg);
407
474
  }
408
475
 
476
+ /**
477
+ * The base implementation of `createWrapper` that creates the wrapper and
478
+ * sets its meta data.
479
+ *
480
+ * @private
481
+ * @param {Array} bindData The bind data array.
482
+ * @returns {Function} Returns the new function.
483
+ */
484
+ function baseCreateWrapper(bindData) {
485
+ var func = bindData[0],
486
+ bitmask = bindData[1],
487
+ partialArgs = bindData[2],
488
+ partialRightArgs = bindData[3],
489
+ thisArg = bindData[4],
490
+ arity = bindData[5];
491
+
492
+ var isBind = bitmask & 1,
493
+ isBindKey = bitmask & 2,
494
+ isCurry = bitmask & 4,
495
+ isCurryBound = bitmask & 8,
496
+ key = func;
497
+
498
+ function bound() {
499
+ var thisBinding = isBind ? thisArg : this;
500
+ if (partialArgs) {
501
+ var args = partialArgs.slice();
502
+ push.apply(args, arguments);
503
+ }
504
+ if (partialRightArgs || isCurry) {
505
+ args || (args = slice(arguments));
506
+ if (partialRightArgs) {
507
+ push.apply(args, partialRightArgs);
508
+ }
509
+ if (isCurry && args.length < arity) {
510
+ bitmask |= 16 & ~32;
511
+ return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);
512
+ }
513
+ }
514
+ args || (args = arguments);
515
+ if (isBindKey) {
516
+ func = thisBinding[key];
517
+ }
518
+ if (this instanceof bound) {
519
+ thisBinding = baseCreate(func.prototype);
520
+ var result = func.apply(thisBinding, args);
521
+ return isObject(result) ? result : thisBinding;
522
+ }
523
+ return func.apply(thisBinding, args);
524
+ }
525
+ return bound;
526
+ }
527
+
528
+ /**
529
+ * The base implementation of `_.difference` that accepts a single array
530
+ * of values to exclude.
531
+ *
532
+ * @private
533
+ * @param {Array} array The array to process.
534
+ * @param {Array} [values] The array of values to exclude.
535
+ * @returns {Array} Returns a new array of filtered values.
536
+ */
537
+ function baseDifference(array, values) {
538
+ var index = -1,
539
+ indexOf = getIndexOf(),
540
+ length = array ? array.length : 0,
541
+ result = [];
542
+
543
+ while (++index < length) {
544
+ var value = array[index];
545
+ if (indexOf(values, value) < 0) {
546
+ result.push(value);
547
+ }
548
+ }
549
+ return result;
550
+ }
551
+
409
552
  /**
410
553
  * The base implementation of `_.flatten` without support for callback
411
554
  * shorthands or `thisArg` binding.
@@ -413,11 +556,11 @@
413
556
  * @private
414
557
  * @param {Array} array The array to flatten.
415
558
  * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level.
416
- * @param {boolean} [isArgArrays=false] A flag to restrict flattening to arrays and `arguments` objects.
559
+ * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects.
417
560
  * @param {number} [fromIndex=0] The index to start from.
418
561
  * @returns {Array} Returns a new flattened array.
419
562
  */
420
- function baseFlatten(array, isShallow, isArgArrays, fromIndex) {
563
+ function baseFlatten(array, isShallow, isStrict, fromIndex) {
421
564
  var index = (fromIndex || 0) - 1,
422
565
  length = array ? array.length : 0,
423
566
  result = [];
@@ -429,7 +572,7 @@
429
572
  && (isArray(value) || isArguments(value))) {
430
573
  // recursively flatten arrays (susceptible to call stack limits)
431
574
  if (!isShallow) {
432
- value = baseFlatten(value, isShallow, isArgArrays);
575
+ value = baseFlatten(value, isShallow, isStrict);
433
576
  }
434
577
  var valIndex = -1,
435
578
  valLength = value.length,
@@ -439,7 +582,7 @@
439
582
  while (++valIndex < valLength) {
440
583
  result[resIndex++] = value[valIndex];
441
584
  }
442
- } else if (!isArgArrays) {
585
+ } else if (!isStrict) {
443
586
  result.push(value);
444
587
  }
445
588
  }
@@ -496,8 +639,11 @@
496
639
  }
497
640
  var isArr = className == arrayClass;
498
641
  if (!isArr) {
499
- if (hasOwnProperty.call(a, '__wrapped__ ') || b instanceof lodash) {
500
- return baseIsEqual(a.__wrapped__ || a, b.__wrapped__ || b, stackA, stackB);
642
+ var aWrapped = a instanceof lodash,
643
+ bWrapped = b instanceof lodash;
644
+
645
+ if (aWrapped || bWrapped) {
646
+ return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, stackA, stackB);
501
647
  }
502
648
  if (className != objectClass) {
503
649
  return false;
@@ -505,10 +651,10 @@
505
651
  var ctorA = a.constructor,
506
652
  ctorB = b.constructor;
507
653
 
508
- if (ctorA != ctorB && !(
509
- isFunction(ctorA) && ctorA instanceof ctorA &&
510
- isFunction(ctorB) && ctorB instanceof ctorB
511
- )) {
654
+ if (ctorA != ctorB &&
655
+ !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&
656
+ ('constructor' in a && 'constructor' in b)
657
+ ) {
512
658
  return false;
513
659
  }
514
660
  }
@@ -557,6 +703,19 @@
557
703
  return result;
558
704
  }
559
705
 
706
+ /**
707
+ * The base implementation of `_.random` without argument juggling or support
708
+ * for returning floating-point numbers.
709
+ *
710
+ * @private
711
+ * @param {number} min The minimum possible value.
712
+ * @param {number} max The maximum possible value.
713
+ * @returns {number} Returns a random number.
714
+ */
715
+ function baseRandom(min, max) {
716
+ return min + floor(nativeRandom() * (max - min + 1));
717
+ }
718
+
560
719
  /**
561
720
  * The base implementation of `_.uniq` without support for callback shorthands
562
721
  * or `thisArg` binding.
@@ -643,16 +802,15 @@
643
802
  * provided to the new function.
644
803
  * @param {*} [thisArg] The `this` binding of `func`.
645
804
  * @param {number} [arity] The arity of `func`.
646
- * @returns {Function} Returns the new bound function.
805
+ * @returns {Function} Returns the new function.
647
806
  */
648
- function createBound(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
807
+ function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
649
808
  var isBind = bitmask & 1,
650
809
  isBindKey = bitmask & 2,
651
810
  isCurry = bitmask & 4,
652
811
  isCurryBound = bitmask & 8,
653
812
  isPartial = bitmask & 16,
654
- isPartialRight = bitmask & 32,
655
- key = func;
813
+ isPartialRight = bitmask & 32;
656
814
 
657
815
  if (!isBindKey && !isFunction(func)) {
658
816
  throw new TypeError;
@@ -665,76 +823,9 @@
665
823
  bitmask &= ~32;
666
824
  isPartialRight = partialRightArgs = false;
667
825
  }
668
- // use `Function#bind` if it exists and is fast
669
- // (in V8 `Function#bind` is slower except when partially applied)
670
- if (isBind && !(isBindKey || isCurry || isPartialRight) &&
671
- (support.fastBind || (nativeBind && isPartial))) {
672
- if (isPartial) {
673
- var args = [thisArg];
674
- push.apply(args, partialArgs);
675
- }
676
- var bound = isPartial
677
- ? nativeBind.apply(func, args)
678
- : nativeBind.call(func, thisArg);
679
- }
680
- else {
681
- bound = function() {
682
- // `Function#bind` spec
683
- // http://es5.github.io/#x15.3.4.5
684
- var args = arguments,
685
- thisBinding = isBind ? thisArg : this;
686
-
687
- if (isCurry || isPartial || isPartialRight) {
688
- args = nativeSlice.call(args);
689
- if (isPartial) {
690
- unshift.apply(args, partialArgs);
691
- }
692
- if (isPartialRight) {
693
- push.apply(args, partialRightArgs);
694
- }
695
- if (isCurry && args.length < arity) {
696
- bitmask |= 16 & ~32;
697
- return createBound(func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity);
698
- }
699
- }
700
- if (isBindKey) {
701
- func = thisBinding[key];
702
- }
703
- if (this instanceof bound) {
704
- // ensure `new bound` is an instance of `func`
705
- thisBinding = createObject(func.prototype);
706
-
707
- // mimic the constructor's `return` behavior
708
- // http://es5.github.io/#x13.2.2
709
- var result = func.apply(thisBinding, args);
710
- return isObject(result) ? result : thisBinding;
711
- }
712
- return func.apply(thisBinding, args);
713
- };
714
- }
715
- return bound;
716
- }
717
-
718
- /**
719
- * Creates a new object with the specified `prototype`.
720
- *
721
- * @private
722
- * @param {Object} prototype The prototype object.
723
- * @returns {Object} Returns the new object.
724
- */
725
- function createObject(prototype) {
726
- return isObject(prototype) ? nativeCreate(prototype) : {};
727
- }
728
- // fallback for browsers without `Object.create`
729
- if (!nativeCreate) {
730
- createObject = function(prototype) {
731
- if (isObject(prototype)) {
732
- noop.prototype = prototype;
733
- var result = new noop;
734
- noop.prototype = null;
735
- }
736
- return result || {};
737
- };
826
+ // fast path for `_.bind`
827
+ var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
828
+ return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
738
829
  }
739
830
 
740
831
  /**
@@ -798,7 +889,7 @@
798
889
  if (!isArguments(arguments)) {
799
890
  isArguments = function(value) {
800
891
  return value && typeof value == 'object' && typeof value.length == 'number' &&
801
- hasOwnProperty.call(value, 'callee') || false;
892
+ hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee') || false;
802
893
  };
803
894
  }
804
895
 
@@ -909,16 +1000,16 @@
909
1000
  * @returns {Object} Returns the destination object.
910
1001
  * @example
911
1002
  *
912
- * _.assign({ 'name': 'moe' }, { 'age': 40 });
913
- * // => { 'name': 'moe', 'age': 40 }
1003
+ * _.assign({ 'name': 'fred' }, { 'employer': 'slate' });
1004
+ * // => { 'name': 'fred', 'employer': 'slate' }
914
1005
  *
915
1006
  * var defaults = _.partialRight(_.assign, function(a, b) {
916
1007
  * return typeof a == 'undefined' ? b : a;
917
1008
  * });
918
1009
  *
919
- * var food = { 'name': 'apple' };
920
- * defaults(food, { 'name': 'banana', 'type': 'fruit' });
921
- * // => { 'name': 'apple', 'type': 'fruit' }
1010
+ * var object = { 'name': 'barney' };
1011
+ * defaults(object, { 'name': 'fred', 'employer': 'slate' });
1012
+ * // => { 'name': 'barney', 'employer': 'slate' }
922
1013
  */
923
1014
  function assign(object) {
924
1015
  if (!object) {
@@ -936,7 +1027,7 @@
936
1027
  }
937
1028
 
938
1029
  /**
939
- * Creates a clone of `value`. If `deep` is `true` nested objects will also
1030
+ * Creates a clone of `value`. If `isDeep` is `true` nested objects will also
940
1031
  * be cloned, otherwise they will be assigned by reference. If a callback
941
1032
  * is provided it will be executed to produce the cloned values. If the
942
1033
  * callback returns `undefined` cloning will be handled by the method instead.
@@ -946,23 +1037,23 @@
946
1037
  * @memberOf _
947
1038
  * @category Objects
948
1039
  * @param {*} value The value to clone.
949
- * @param {boolean} [deep=false] Specify a deep clone.
1040
+ * @param {boolean} [isDeep=false] Specify a deep clone.
950
1041
  * @param {Function} [callback] The function to customize cloning values.
951
1042
  * @param {*} [thisArg] The `this` binding of `callback`.
952
1043
  * @returns {*} Returns the cloned value.
953
1044
  * @example
954
1045
  *
955
- * var stooges = [
956
- * { 'name': 'moe', 'age': 40 },
957
- * { 'name': 'larry', 'age': 50 }
1046
+ * var characters = [
1047
+ * { 'name': 'barney', 'age': 36 },
1048
+ * { 'name': 'fred', 'age': 40 }
958
1049
  * ];
959
1050
  *
960
- * var shallow = _.clone(stooges);
961
- * shallow[0] === stooges[0];
1051
+ * var shallow = _.clone(characters);
1052
+ * shallow[0] === characters[0];
962
1053
  * // => true
963
1054
  *
964
- * var deep = _.clone(stooges, true);
965
- * deep[0] === stooges[0];
1055
+ * var deep = _.clone(characters, true);
1056
+ * deep[0] === characters[0];
966
1057
  * // => false
967
1058
  *
968
1059
  * _.mixin({
@@ -977,7 +1068,7 @@
977
1068
  */
978
1069
  function clone(value) {
979
1070
  return isObject(value)
980
- ? (isArray(value) ? nativeSlice.call(value) : assign({}, value))
1071
+ ? (isArray(value) ? slice(value) : assign({}, value))
981
1072
  : value;
982
1073
  }
983
1074
 
@@ -997,9 +1088,9 @@
997
1088
  * @returns {Object} Returns the destination object.
998
1089
  * @example
999
1090
  *
1000
- * var food = { 'name': 'apple' };
1001
- * _.defaults(food, { 'name': 'banana', 'type': 'fruit' });
1002
- * // => { 'name': 'apple', 'type': 'fruit' }
1091
+ * var object = { 'name': 'barney' };
1092
+ * _.defaults(object, { 'name': 'fred', 'employer': 'slate' });
1093
+ * // => { 'name': 'barney', 'employer': 'slate' }
1003
1094
  */
1004
1095
  function defaults(object) {
1005
1096
  if (!object) {
@@ -1034,18 +1125,20 @@
1034
1125
  * @returns {Object} Returns `object`.
1035
1126
  * @example
1036
1127
  *
1037
- * function Dog(name) {
1038
- * this.name = name;
1128
+ * function Shape() {
1129
+ * this.x = 0;
1130
+ * this.y = 0;
1039
1131
  * }
1040
1132
  *
1041
- * Dog.prototype.bark = function() {
1042
- * console.log('Woof, woof!');
1133
+ * Shape.prototype.move = function(x, y) {
1134
+ * this.x += x;
1135
+ * this.y += y;
1043
1136
  * };
1044
1137
  *
1045
- * _.forIn(new Dog('Dagny'), function(value, key) {
1138
+ * _.forIn(new Shape, function(value, key) {
1046
1139
  * console.log(key);
1047
1140
  * });
1048
- * // => logs 'bark' and 'name' (property order is not guaranteed across environments)
1141
+ * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)
1049
1142
  */
1050
1143
  var forIn = function(collection, callback) {
1051
1144
  var index, iterable = collection, result = iterable;
@@ -1144,8 +1237,8 @@
1144
1237
  * @returns {Object} Returns the created inverted object.
1145
1238
  * @example
1146
1239
  *
1147
- * _.invert({ 'first': 'moe', 'second': 'larry' });
1148
- * // => { 'moe': 'first', 'larry': 'second' }
1240
+ * _.invert({ 'first': 'fred', 'second': 'barney' });
1241
+ * // => { 'fred': 'first', 'barney': 'second' }
1149
1242
  */
1150
1243
  function invert(object) {
1151
1244
  var index = -1,
@@ -1174,7 +1267,8 @@
1174
1267
  * // => false
1175
1268
  */
1176
1269
  function isBoolean(value) {
1177
- return value === true || value === false || toString.call(value) == boolClass;
1270
+ return value === true || value === false ||
1271
+ value && typeof value == 'object' && toString.call(value) == boolClass || false;
1178
1272
  }
1179
1273
 
1180
1274
  /**
@@ -1191,7 +1285,7 @@
1191
1285
  * // => true
1192
1286
  */
1193
1287
  function isDate(value) {
1194
- return value ? (typeof value == 'object' && toString.call(value) == dateClass) : false;
1288
+ return value && typeof value == 'object' && toString.call(value) == dateClass || false;
1195
1289
  }
1196
1290
 
1197
1291
  /**
@@ -1208,7 +1302,7 @@
1208
1302
  * // => true
1209
1303
  */
1210
1304
  function isElement(value) {
1211
- return value ? value.nodeType === 1 : false;
1305
+ return value && value.nodeType === 1 || false;
1212
1306
  }
1213
1307
 
1214
1308
  /**
@@ -1264,13 +1358,13 @@
1264
1358
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
1265
1359
  * @example
1266
1360
  *
1267
- * var moe = { 'name': 'moe', 'age': 40 };
1268
- * var copy = { 'name': 'moe', 'age': 40 };
1361
+ * var object = { 'name': 'fred' };
1362
+ * var copy = { 'name': 'fred' };
1269
1363
  *
1270
- * moe == copy;
1364
+ * object == copy;
1271
1365
  * // => false
1272
1366
  *
1273
- * _.isEqual(moe, copy);
1367
+ * _.isEqual(object, copy);
1274
1368
  * // => true
1275
1369
  *
1276
1370
  * var words = ['hello', 'goodbye'];
@@ -1439,7 +1533,8 @@
1439
1533
  * // => true
1440
1534
  */
1441
1535
  function isNumber(value) {
1442
- return typeof value == 'number' || toString.call(value) == numberClass;
1536
+ return typeof value == 'number' ||
1537
+ value && typeof value == 'object' && toString.call(value) == numberClass || false;
1443
1538
  }
1444
1539
 
1445
1540
  /**
@@ -1452,11 +1547,11 @@
1452
1547
  * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`.
1453
1548
  * @example
1454
1549
  *
1455
- * _.isRegExp(/moe/);
1550
+ * _.isRegExp(/fred/);
1456
1551
  * // => true
1457
1552
  */
1458
1553
  function isRegExp(value) {
1459
- return (value && objectTypes[typeof value]) ? toString.call(value) == regexpClass : false;
1554
+ return value && objectTypes[typeof value] && toString.call(value) == regexpClass || false;
1460
1555
  }
1461
1556
 
1462
1557
  /**
@@ -1469,11 +1564,12 @@
1469
1564
  * @returns {boolean} Returns `true` if the `value` is a string, else `false`.
1470
1565
  * @example
1471
1566
  *
1472
- * _.isString('moe');
1567
+ * _.isString('fred');
1473
1568
  * // => true
1474
1569
  */
1475
1570
  function isString(value) {
1476
- return typeof value == 'string' || toString.call(value) == stringClass;
1571
+ return typeof value == 'string' ||
1572
+ value && typeof value == 'object' && toString.call(value) == stringClass || false;
1477
1573
  }
1478
1574
 
1479
1575
  /**
@@ -1511,24 +1607,29 @@
1511
1607
  * @returns {Object} Returns an object without the omitted properties.
1512
1608
  * @example
1513
1609
  *
1514
- * _.omit({ 'name': 'moe', 'age': 40 }, 'age');
1515
- * // => { 'name': 'moe' }
1610
+ * _.omit({ 'name': 'fred', 'age': 40 }, 'age');
1611
+ * // => { 'name': 'fred' }
1516
1612
  *
1517
- * _.omit({ 'name': 'moe', 'age': 40 }, function(value) {
1613
+ * _.omit({ 'name': 'fred', 'age': 40 }, function(value) {
1518
1614
  * return typeof value == 'number';
1519
1615
  * });
1520
- * // => { 'name': 'moe' }
1616
+ * // => { 'name': 'fred' }
1521
1617
  */
1522
1618
  function omit(object) {
1523
- var indexOf = getIndexOf(),
1524
- props = baseFlatten(arguments, true, false, 1),
1525
- result = {};
1526
-
1619
+ var props = [];
1527
1620
  forIn(object, function(value, key) {
1528
- if (indexOf(props, key) < 0) {
1529
- result[key] = value;
1530
- }
1621
+ props.push(key);
1531
1622
  });
1623
+ props = baseDifference(props, baseFlatten(arguments, true, false, 1));
1624
+
1625
+ var index = -1,
1626
+ length = props.length,
1627
+ result = {};
1628
+
1629
+ while (++index < length) {
1630
+ var key = props[index];
1631
+ result[key] = object[key];
1632
+ }
1532
1633
  return result;
1533
1634
  }
1534
1635
 
@@ -1543,8 +1644,8 @@
1543
1644
  * @returns {Array} Returns new array of key-value pairs.
1544
1645
  * @example
1545
1646
  *
1546
- * _.pairs({ 'moe': 30, 'larry': 40 });
1547
- * // => [['moe', 30], ['larry', 40]] (property order is not guaranteed across environments)
1647
+ * _.pairs({ 'barney': 36, 'fred': 40 });
1648
+ * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments)
1548
1649
  */
1549
1650
  function pairs(object) {
1550
1651
  var index = -1,
@@ -1578,13 +1679,13 @@
1578
1679
  * @returns {Object} Returns an object composed of the picked properties.
1579
1680
  * @example
1580
1681
  *
1581
- * _.pick({ 'name': 'moe', '_userid': 'moe1' }, 'name');
1582
- * // => { 'name': 'moe' }
1682
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name');
1683
+ * // => { 'name': 'fred' }
1583
1684
  *
1584
- * _.pick({ 'name': 'moe', '_userid': 'moe1' }, function(value, key) {
1685
+ * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) {
1585
1686
  * return key.charAt(0) != '_';
1586
1687
  * });
1587
- * // => { 'name': 'moe' }
1688
+ * // => { 'name': 'fred' }
1588
1689
  */
1589
1690
  function pick(object) {
1590
1691
  var index = -1,
@@ -1593,9 +1694,9 @@
1593
1694
  result = {};
1594
1695
 
1595
1696
  while (++index < length) {
1596
- var prop = props[index];
1597
- if (prop in object) {
1598
- result[prop] = object[prop];
1697
+ var key = props[index];
1698
+ if (key in object) {
1699
+ result[key] = object[key];
1599
1700
  }
1600
1701
  }
1601
1702
  return result;
@@ -1649,10 +1750,10 @@
1649
1750
  * _.contains([1, 2, 3], 1, 2);
1650
1751
  * // => false
1651
1752
  *
1652
- * _.contains({ 'name': 'moe', 'age': 40 }, 'moe');
1753
+ * _.contains({ 'name': 'fred', 'age': 40 }, 'fred');
1653
1754
  * // => true
1654
1755
  *
1655
- * _.contains('curly', 'ur');
1756
+ * _.contains('pebbles', 'eb');
1656
1757
  * // => true
1657
1758
  */
1658
1759
  function contains(collection, target) {
@@ -1732,20 +1833,20 @@
1732
1833
  * else `false`.
1733
1834
  * @example
1734
1835
  *
1735
- * _.every([true, 1, null, 'yes'], Boolean);
1836
+ * _.every([true, 1, null, 'yes']);
1736
1837
  * // => false
1737
1838
  *
1738
- * var stooges = [
1739
- * { 'name': 'moe', 'age': 40 },
1740
- * { 'name': 'larry', 'age': 50 }
1839
+ * var characters = [
1840
+ * { 'name': 'barney', 'age': 36 },
1841
+ * { 'name': 'fred', 'age': 40 }
1741
1842
  * ];
1742
1843
  *
1743
1844
  * // using "_.pluck" callback shorthand
1744
- * _.every(stooges, 'age');
1845
+ * _.every(characters, 'age');
1745
1846
  * // => true
1746
1847
  *
1747
1848
  * // using "_.where" callback shorthand
1748
- * _.every(stooges, { 'age': 50 });
1849
+ * _.every(characters, { 'age': 36 });
1749
1850
  * // => false
1750
1851
  */
1751
1852
  function every(collection, callback, thisArg) {
@@ -1796,18 +1897,18 @@
1796
1897
  * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
1797
1898
  * // => [2, 4, 6]
1798
1899
  *
1799
- * var food = [
1800
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
1801
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
1900
+ * var characters = [
1901
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
1902
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
1802
1903
  * ];
1803
1904
  *
1804
1905
  * // using "_.pluck" callback shorthand
1805
- * _.filter(food, 'organic');
1806
- * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
1906
+ * _.filter(characters, 'blocked');
1907
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
1807
1908
  *
1808
1909
  * // using "_.where" callback shorthand
1809
- * _.filter(food, { 'type': 'fruit' });
1810
- * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
1910
+ * _.filter(characters, { 'age': 36 });
1911
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
1811
1912
  */
1812
1913
  function filter(collection, callback, thisArg) {
1813
1914
  var result = [];
@@ -1857,24 +1958,24 @@
1857
1958
  * @returns {*} Returns the found element, else `undefined`.
1858
1959
  * @example
1859
1960
  *
1860
- * _.find([1, 2, 3, 4], function(num) {
1861
- * return num % 2 == 0;
1862
- * });
1863
- * // => 2
1864
- *
1865
- * var food = [
1866
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
1867
- * { 'name': 'banana', 'organic': true, 'type': 'fruit' },
1868
- * { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
1961
+ * var characters = [
1962
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
1963
+ * { 'name': 'fred', 'age': 40, 'blocked': true },
1964
+ * { 'name': 'pebbles', 'age': 1, 'blocked': false }
1869
1965
  * ];
1870
1966
  *
1967
+ * _.find(characters, function(chr) {
1968
+ * return chr.age < 40;
1969
+ * });
1970
+ * // => { 'name': 'barney', 'age': 36, 'blocked': false }
1971
+ *
1871
1972
  * // using "_.where" callback shorthand
1872
- * _.find(food, { 'type': 'vegetable' });
1873
- * // => { 'name': 'beet', 'organic': false, 'type': 'vegetable' }
1973
+ * _.find(characters, { 'age': 1 });
1974
+ * // => { 'name': 'pebbles', 'age': 1, 'blocked': false }
1874
1975
  *
1875
1976
  * // using "_.pluck" callback shorthand
1876
- * _.find(food, 'organic');
1877
- * // => { 'name': 'banana', 'organic': true, 'type': 'fruit' }
1977
+ * _.find(characters, 'blocked');
1978
+ * // => { 'name': 'fred', 'age': 40, 'blocked': true }
1878
1979
  */
1879
1980
  function find(collection, callback, thisArg) {
1880
1981
  callback = createCallback(callback, thisArg, 3);
@@ -1934,6 +2035,10 @@
1934
2035
  * (value, index|key, collection). Callbacks may exit iteration early by
1935
2036
  * explicitly returning `false`.
1936
2037
  *
2038
+ * Note: As with other "Collections" methods, objects with a `length` property
2039
+ * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
2040
+ * may be used for object iteration.
2041
+ *
1937
2042
  * @static
1938
2043
  * @memberOf _
1939
2044
  * @alias each
@@ -2076,7 +2181,7 @@
2076
2181
  * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); });
2077
2182
  * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
2078
2183
  *
2079
- * _.indexBy(stooges, function(key) { this.fromCharCode(key.code); }, String);
2184
+ * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String);
2080
2185
  * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
2081
2186
  */
2082
2187
  var indexBy = createAggregator(function(result, value, key) {
@@ -2106,7 +2211,7 @@
2106
2211
  * // => [['1', '2', '3'], ['4', '5', '6']]
2107
2212
  */
2108
2213
  function invoke(collection, methodName) {
2109
- var args = nativeSlice.call(arguments, 2),
2214
+ var args = slice(arguments, 2),
2110
2215
  index = -1,
2111
2216
  isFunc = typeof methodName == 'function',
2112
2217
  length = collection ? collection.length : 0,
@@ -2148,14 +2253,14 @@
2148
2253
  * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });
2149
2254
  * // => [3, 6, 9] (property order is not guaranteed across environments)
2150
2255
  *
2151
- * var stooges = [
2152
- * { 'name': 'moe', 'age': 40 },
2153
- * { 'name': 'larry', 'age': 50 }
2256
+ * var characters = [
2257
+ * { 'name': 'barney', 'age': 36 },
2258
+ * { 'name': 'fred', 'age': 40 }
2154
2259
  * ];
2155
2260
  *
2156
2261
  * // using "_.pluck" callback shorthand
2157
- * _.map(stooges, 'name');
2158
- * // => ['moe', 'larry']
2262
+ * _.map(characters, 'name');
2263
+ * // => ['barney', 'fred']
2159
2264
  */
2160
2265
  function map(collection, callback, thisArg) {
2161
2266
  var index = -1,
@@ -2204,26 +2309,31 @@
2204
2309
  * _.max([4, 2, 8, 6]);
2205
2310
  * // => 8
2206
2311
  *
2207
- * var stooges = [
2208
- * { 'name': 'moe', 'age': 40 },
2209
- * { 'name': 'larry', 'age': 50 }
2312
+ * var characters = [
2313
+ * { 'name': 'barney', 'age': 36 },
2314
+ * { 'name': 'fred', 'age': 40 }
2210
2315
  * ];
2211
2316
  *
2212
- * _.max(stooges, function(stooge) { return stooge.age; });
2213
- * // => { 'name': 'larry', 'age': 50 };
2317
+ * _.max(characters, function(chr) { return chr.age; });
2318
+ * // => { 'name': 'fred', 'age': 40 };
2214
2319
  *
2215
2320
  * // using "_.pluck" callback shorthand
2216
- * _.max(stooges, 'age');
2217
- * // => { 'name': 'larry', 'age': 50 };
2321
+ * _.max(characters, 'age');
2322
+ * // => { 'name': 'fred', 'age': 40 };
2218
2323
  */
2219
2324
  function max(collection, callback, thisArg) {
2220
2325
  var computed = -Infinity,
2221
2326
  result = computed;
2222
2327
 
2328
+ // allows working with functions like `_.map` without using
2329
+ // their `index` argument as a callback
2330
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
2331
+ callback = null;
2332
+ }
2223
2333
  var index = -1,
2224
2334
  length = collection ? collection.length : 0;
2225
2335
 
2226
- if (!callback && typeof length == 'number') {
2336
+ if (callback == null && typeof length == 'number') {
2227
2337
  while (++index < length) {
2228
2338
  var value = collection[index];
2229
2339
  if (value > result) {
@@ -2272,26 +2382,31 @@
2272
2382
  * _.min([4, 2, 8, 6]);
2273
2383
  * // => 2
2274
2384
  *
2275
- * var stooges = [
2276
- * { 'name': 'moe', 'age': 40 },
2277
- * { 'name': 'larry', 'age': 50 }
2385
+ * var characters = [
2386
+ * { 'name': 'barney', 'age': 36 },
2387
+ * { 'name': 'fred', 'age': 40 }
2278
2388
  * ];
2279
2389
  *
2280
- * _.min(stooges, function(stooge) { return stooge.age; });
2281
- * // => { 'name': 'moe', 'age': 40 };
2390
+ * _.min(characters, function(chr) { return chr.age; });
2391
+ * // => { 'name': 'barney', 'age': 36 };
2282
2392
  *
2283
2393
  * // using "_.pluck" callback shorthand
2284
- * _.min(stooges, 'age');
2285
- * // => { 'name': 'moe', 'age': 40 };
2394
+ * _.min(characters, 'age');
2395
+ * // => { 'name': 'barney', 'age': 36 };
2286
2396
  */
2287
2397
  function min(collection, callback, thisArg) {
2288
2398
  var computed = Infinity,
2289
2399
  result = computed;
2290
2400
 
2401
+ // allows working with functions like `_.map` without using
2402
+ // their `index` argument as a callback
2403
+ if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) {
2404
+ callback = null;
2405
+ }
2291
2406
  var index = -1,
2292
2407
  length = collection ? collection.length : 0;
2293
2408
 
2294
- if (!callback && typeof length == 'number') {
2409
+ if (callback == null && typeof length == 'number') {
2295
2410
  while (++index < length) {
2296
2411
  var value = collection[index];
2297
2412
  if (value < result) {
@@ -2313,7 +2428,7 @@
2313
2428
  }
2314
2429
 
2315
2430
  /**
2316
- * Retrieves the value of a specified property from all elements in the `collection`.
2431
+ * Retrieves the value of a specified property from all elements in the collection.
2317
2432
  *
2318
2433
  * @static
2319
2434
  * @memberOf _
@@ -2324,13 +2439,13 @@
2324
2439
  * @returns {Array} Returns a new array of property values.
2325
2440
  * @example
2326
2441
  *
2327
- * var stooges = [
2328
- * { 'name': 'moe', 'age': 40 },
2329
- * { 'name': 'larry', 'age': 50 }
2442
+ * var characters = [
2443
+ * { 'name': 'barney', 'age': 36 },
2444
+ * { 'name': 'fred', 'age': 40 }
2330
2445
  * ];
2331
2446
  *
2332
- * _.pluck(stooges, 'name');
2333
- * // => ['moe', 'larry']
2447
+ * _.pluck(characters, 'name');
2448
+ * // => ['barney', 'fred']
2334
2449
  */
2335
2450
  function pluck(collection, property) {
2336
2451
  var index = -1,
@@ -2378,7 +2493,7 @@
2378
2493
  function reduce(collection, callback, accumulator, thisArg) {
2379
2494
  if (!collection) return accumulator;
2380
2495
  var noaccum = arguments.length < 3;
2381
- callback = baseCreateCallback(callback, thisArg, 4);
2496
+ callback = createCallback(callback, thisArg, 4);
2382
2497
 
2383
2498
  var index = -1,
2384
2499
  length = collection.length;
@@ -2421,7 +2536,7 @@
2421
2536
  */
2422
2537
  function reduceRight(collection, callback, accumulator, thisArg) {
2423
2538
  var noaccum = arguments.length < 3;
2424
- callback = baseCreateCallback(callback, thisArg, 4);
2539
+ callback = createCallback(callback, thisArg, 4);
2425
2540
  forEachRight(collection, function(value, index, collection) {
2426
2541
  accumulator = noaccum
2427
2542
  ? (noaccum = false, value)
@@ -2455,18 +2570,18 @@
2455
2570
  * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; });
2456
2571
  * // => [1, 3, 5]
2457
2572
  *
2458
- * var food = [
2459
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
2460
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
2573
+ * var characters = [
2574
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
2575
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
2461
2576
  * ];
2462
2577
  *
2463
2578
  * // using "_.pluck" callback shorthand
2464
- * _.reject(food, 'organic');
2465
- * // => [{ 'name': 'apple', 'organic': false, 'type': 'fruit' }]
2579
+ * _.reject(characters, 'blocked');
2580
+ * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }]
2466
2581
  *
2467
2582
  * // using "_.where" callback shorthand
2468
- * _.reject(food, { 'type': 'fruit' });
2469
- * // => [{ 'name': 'carrot', 'organic': true, 'type': 'vegetable' }]
2583
+ * _.reject(characters, { 'age': 36 });
2584
+ * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }]
2470
2585
  */
2471
2586
  function reject(collection, callback, thisArg) {
2472
2587
  callback = createCallback(callback, thisArg, 3);
@@ -2483,8 +2598,8 @@
2483
2598
  * @category Collections
2484
2599
  * @param {Array|Object|string} collection The collection to sample.
2485
2600
  * @param {number} [n] The number of elements to sample.
2486
- * @param- {Object} [guard] Allows working with functions, like `_.map`,
2487
- * without using their `key` and `object` arguments as sources.
2601
+ * @param- {Object} [guard] Allows working with functions like `_.map`
2602
+ * without using their `index` arguments as `n`.
2488
2603
  * @returns {Array} Returns the random sample(s) of `collection`.
2489
2604
  * @example
2490
2605
  *
@@ -2495,12 +2610,11 @@
2495
2610
  * // => [3, 1]
2496
2611
  */
2497
2612
  function sample(collection, n, guard) {
2498
- var length = collection ? collection.length : 0;
2499
- if (typeof length != 'number') {
2613
+ if (collection && typeof collection.length != 'number') {
2500
2614
  collection = values(collection);
2501
2615
  }
2502
2616
  if (n == null || guard) {
2503
- return collection ? collection[random(length - 1)] : undefined;
2617
+ return collection ? collection[baseRandom(0, collection.length - 1)] : undefined;
2504
2618
  }
2505
2619
  var result = shuffle(collection);
2506
2620
  result.length = nativeMin(nativeMax(0, n), result.length);
@@ -2527,7 +2641,7 @@
2527
2641
  result = Array(typeof length == 'number' ? length : 0);
2528
2642
 
2529
2643
  forEach(collection, function(value) {
2530
- var rand = random(++index);
2644
+ var rand = baseRandom(0, ++index);
2531
2645
  result[index] = result[rand];
2532
2646
  result[rand] = value;
2533
2647
  });
@@ -2551,7 +2665,7 @@
2551
2665
  * _.size({ 'one': 1, 'two': 2, 'three': 3 });
2552
2666
  * // => 3
2553
2667
  *
2554
- * _.size('curly');
2668
+ * _.size('pebbles');
2555
2669
  * // => 5
2556
2670
  */
2557
2671
  function size(collection) {
@@ -2588,17 +2702,17 @@
2588
2702
  * _.some([null, 0, 'yes', false], Boolean);
2589
2703
  * // => true
2590
2704
  *
2591
- * var food = [
2592
- * { 'name': 'apple', 'organic': false, 'type': 'fruit' },
2593
- * { 'name': 'carrot', 'organic': true, 'type': 'vegetable' }
2705
+ * var characters = [
2706
+ * { 'name': 'barney', 'age': 36, 'blocked': false },
2707
+ * { 'name': 'fred', 'age': 40, 'blocked': true }
2594
2708
  * ];
2595
2709
  *
2596
2710
  * // using "_.pluck" callback shorthand
2597
- * _.some(food, 'organic');
2711
+ * _.some(characters, 'blocked');
2598
2712
  * // => true
2599
2713
  *
2600
2714
  * // using "_.where" callback shorthand
2601
- * _.some(food, { 'type': 'meat' });
2715
+ * _.some(characters, { 'age': 1 });
2602
2716
  * // => false
2603
2717
  */
2604
2718
  function some(collection, callback, thisArg) {
@@ -2694,7 +2808,7 @@
2694
2808
  */
2695
2809
  function toArray(collection) {
2696
2810
  if (isArray(collection)) {
2697
- return nativeSlice.call(collection);
2811
+ return slice(collection);
2698
2812
  }
2699
2813
  if (collection && typeof collection.length == 'number') {
2700
2814
  return map(collection);
@@ -2716,16 +2830,16 @@
2716
2830
  * @returns {Array} Returns a new array of elements that have the given properties.
2717
2831
  * @example
2718
2832
  *
2719
- * var stooges = [
2720
- * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
2721
- * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
2833
+ * var characters = [
2834
+ * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] },
2835
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
2722
2836
  * ];
2723
2837
  *
2724
- * _.where(stooges, { 'age': 40 });
2725
- * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
2838
+ * _.where(characters, { 'age': 36 });
2839
+ * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }]
2726
2840
  *
2727
- * _.where(stooges, { 'quotes': ['Poifect!'] });
2728
- * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
2841
+ * _.where(characters, { 'pets': ['dino'] });
2842
+ * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }]
2729
2843
  */
2730
2844
  function where(collection, properties, first) {
2731
2845
  return (first && isEmpty(properties))
@@ -2771,7 +2885,7 @@
2771
2885
  * @memberOf _
2772
2886
  * @category Arrays
2773
2887
  * @param {Array} array The array to process.
2774
- * @param {...Array} [array] The arrays of values to exclude.
2888
+ * @param {...Array} [values] The arrays of values to exclude.
2775
2889
  * @returns {Array} Returns a new array of filtered values.
2776
2890
  * @example
2777
2891
  *
@@ -2779,19 +2893,7 @@
2779
2893
  * // => [1, 3, 4]
2780
2894
  */
2781
2895
  function difference(array) {
2782
- var index = -1,
2783
- indexOf = getIndexOf(),
2784
- length = array.length,
2785
- flattened = baseFlatten(arguments, true, true, 1),
2786
- result = [];
2787
-
2788
- while (++index < length) {
2789
- var value = array[index];
2790
- if (indexOf(flattened, value) < 0) {
2791
- result.push(value);
2792
- }
2793
- }
2794
- return result;
2896
+ return baseDifference(array, baseFlatten(arguments, true, true, 1));
2795
2897
  }
2796
2898
 
2797
2899
  /**
@@ -2831,24 +2933,19 @@
2831
2933
  * });
2832
2934
  * // => [1, 2]
2833
2935
  *
2834
- * var food = [
2835
- * { 'name': 'banana', 'organic': true },
2836
- * { 'name': 'beet', 'organic': false },
2936
+ * var characters = [
2937
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
2938
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
2939
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
2837
2940
  * ];
2838
2941
  *
2839
2942
  * // using "_.pluck" callback shorthand
2840
- * _.first(food, 'organic');
2841
- * // => [{ 'name': 'banana', 'organic': true }]
2842
- *
2843
- * var food = [
2844
- * { 'name': 'apple', 'type': 'fruit' },
2845
- * { 'name': 'banana', 'type': 'fruit' },
2846
- * { 'name': 'beet', 'type': 'vegetable' }
2847
- * ];
2943
+ * _.first(characters, 'blocked');
2944
+ * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }]
2848
2945
  *
2849
2946
  * // using "_.where" callback shorthand
2850
- * _.first(food, { 'type': 'fruit' });
2851
- * // => [{ 'name': 'apple', 'type': 'fruit' }, { 'name': 'banana', 'type': 'fruit' }]
2947
+ * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name');
2948
+ * // => ['barney', 'fred']
2852
2949
  */
2853
2950
  function first(array, callback, thisArg) {
2854
2951
  var n = 0,
@@ -2866,7 +2963,7 @@
2866
2963
  return array ? array[0] : undefined;
2867
2964
  }
2868
2965
  }
2869
- return nativeSlice.call(array, 0, nativeMin(nativeMax(0, n), length));
2966
+ return slice(array, 0, nativeMin(nativeMax(0, n), length));
2870
2967
  }
2871
2968
 
2872
2969
  /**
@@ -2901,14 +2998,14 @@
2901
2998
  * _.flatten([1, [2], [3, [[4]]]], true);
2902
2999
  * // => [1, 2, 3, [[4]]];
2903
3000
  *
2904
- * var stooges = [
2905
- * { 'name': 'curly', 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
2906
- * { 'name': 'moe', 'quotes': ['Spread out!', 'You knucklehead!'] }
3001
+ * var characters = [
3002
+ * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] },
3003
+ * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }
2907
3004
  * ];
2908
3005
  *
2909
3006
  * // using "_.pluck" callback shorthand
2910
- * _.flatten(stooges, 'quotes');
2911
- * // => ['Oh, a wise guy, eh?', 'Poifect!', 'Spread out!', 'You knucklehead!']
3007
+ * _.flatten(characters, 'pets');
3008
+ * // => ['hoppy', 'baby puss', 'dino']
2912
3009
  */
2913
3010
  function flatten(array, isShallow) {
2914
3011
  return baseFlatten(array, isShallow);
@@ -2985,24 +3082,19 @@
2985
3082
  * });
2986
3083
  * // => [1]
2987
3084
  *
2988
- * var food = [
2989
- * { 'name': 'beet', 'organic': false },
2990
- * { 'name': 'carrot', 'organic': true }
3085
+ * var characters = [
3086
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
3087
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
3088
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
2991
3089
  * ];
2992
3090
  *
2993
3091
  * // using "_.pluck" callback shorthand
2994
- * _.initial(food, 'organic');
2995
- * // => [{ 'name': 'beet', 'organic': false }]
2996
- *
2997
- * var food = [
2998
- * { 'name': 'banana', 'type': 'fruit' },
2999
- * { 'name': 'beet', 'type': 'vegetable' },
3000
- * { 'name': 'carrot', 'type': 'vegetable' }
3001
- * ];
3092
+ * _.initial(characters, 'blocked');
3093
+ * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }]
3002
3094
  *
3003
3095
  * // using "_.where" callback shorthand
3004
- * _.initial(food, { 'type': 'vegetable' });
3005
- * // => [{ 'name': 'banana', 'type': 'fruit' }]
3096
+ * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name');
3097
+ * // => ['barney', 'fred']
3006
3098
  */
3007
3099
  function initial(array, callback, thisArg) {
3008
3100
  var n = 0,
@@ -3017,7 +3109,7 @@
3017
3109
  } else {
3018
3110
  n = (callback == null || thisArg) ? 1 : callback || n;
3019
3111
  }
3020
- return nativeSlice.call(array, 0, nativeMin(nativeMax(0, length - n), length));
3112
+ return slice(array, 0, nativeMin(nativeMax(0, length - n), length));
3021
3113
  }
3022
3114
 
3023
3115
  /**
@@ -3094,24 +3186,19 @@
3094
3186
  * });
3095
3187
  * // => [2, 3]
3096
3188
  *
3097
- * var food = [
3098
- * { 'name': 'beet', 'organic': false },
3099
- * { 'name': 'carrot', 'organic': true }
3189
+ * var characters = [
3190
+ * { 'name': 'barney', 'blocked': false, 'employer': 'slate' },
3191
+ * { 'name': 'fred', 'blocked': true, 'employer': 'slate' },
3192
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
3100
3193
  * ];
3101
3194
  *
3102
3195
  * // using "_.pluck" callback shorthand
3103
- * _.last(food, 'organic');
3104
- * // => [{ 'name': 'carrot', 'organic': true }]
3105
- *
3106
- * var food = [
3107
- * { 'name': 'banana', 'type': 'fruit' },
3108
- * { 'name': 'beet', 'type': 'vegetable' },
3109
- * { 'name': 'carrot', 'type': 'vegetable' }
3110
- * ];
3196
+ * _.pluck(_.last(characters, 'blocked'), 'name');
3197
+ * // => ['fred', 'pebbles']
3111
3198
  *
3112
3199
  * // using "_.where" callback shorthand
3113
- * _.last(food, { 'type': 'vegetable' });
3114
- * // => [{ 'name': 'beet', 'type': 'vegetable' }, { 'name': 'carrot', 'type': 'vegetable' }]
3200
+ * _.last(characters, { 'employer': 'na' });
3201
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
3115
3202
  */
3116
3203
  function last(array, callback, thisArg) {
3117
3204
  var n = 0,
@@ -3129,7 +3216,7 @@
3129
3216
  return array ? array[length - 1] : undefined;
3130
3217
  }
3131
3218
  }
3132
- return nativeSlice.call(array, nativeMax(0, length - n));
3219
+ return slice(array, nativeMax(0, length - n));
3133
3220
  }
3134
3221
 
3135
3222
  /**
@@ -3137,6 +3224,13 @@
3137
3224
  * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used
3138
3225
  * as the offset from the end of the collection.
3139
3226
  *
3227
+ * If a property name is provided for `callback` the created "_.pluck" style
3228
+ * callback will return the property value of the given element.
3229
+ *
3230
+ * If an object is provided for `callback` the created "_.where" style callback
3231
+ * will return `true` for elements that have the properties of the given object,
3232
+ * else `false`.
3233
+ *
3140
3234
  * @static
3141
3235
  * @memberOf _
3142
3236
  * @category Arrays
@@ -3179,17 +3273,17 @@
3179
3273
  * @returns {Array} Returns a new range array.
3180
3274
  * @example
3181
3275
  *
3182
- * _.range(10);
3183
- * // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
3276
+ * _.range(4);
3277
+ * // => [0, 1, 2, 3]
3184
3278
  *
3185
- * _.range(1, 11);
3186
- * // => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3279
+ * _.range(1, 5);
3280
+ * // => [1, 2, 3, 4]
3187
3281
  *
3188
- * _.range(0, 30, 5);
3189
- * // => [0, 5, 10, 15, 20, 25]
3282
+ * _.range(0, 20, 5);
3283
+ * // => [0, 5, 10, 15]
3190
3284
  *
3191
- * _.range(0, -10, -1);
3192
- * // => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
3285
+ * _.range(0, -4, -1);
3286
+ * // => [0, -1, -2, -3]
3193
3287
  *
3194
3288
  * _.range(1, 4, 0);
3195
3289
  * // => [1, 1, 1]
@@ -3205,7 +3299,7 @@
3205
3299
  end = start;
3206
3300
  start = 0;
3207
3301
  }
3208
- // use `Array(length)` so engines, like Chakra and V8, avoid slower modes
3302
+ // use `Array(length)` so engines like Chakra and V8 avoid slower modes
3209
3303
  // http://youtu.be/XAqIpGU8ZZk#t=17m25s
3210
3304
  var index = -1,
3211
3305
  length = nativeMax(0, ceil((end - start) / step)),
@@ -3256,24 +3350,19 @@
3256
3350
  * });
3257
3351
  * // => [3]
3258
3352
  *
3259
- * var food = [
3260
- * { 'name': 'banana', 'organic': true },
3261
- * { 'name': 'beet', 'organic': false },
3353
+ * var characters = [
3354
+ * { 'name': 'barney', 'blocked': true, 'employer': 'slate' },
3355
+ * { 'name': 'fred', 'blocked': false, 'employer': 'slate' },
3356
+ * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' }
3262
3357
  * ];
3263
3358
  *
3264
3359
  * // using "_.pluck" callback shorthand
3265
- * _.rest(food, 'organic');
3266
- * // => [{ 'name': 'beet', 'organic': false }]
3267
- *
3268
- * var food = [
3269
- * { 'name': 'apple', 'type': 'fruit' },
3270
- * { 'name': 'banana', 'type': 'fruit' },
3271
- * { 'name': 'beet', 'type': 'vegetable' }
3272
- * ];
3360
+ * _.pluck(_.rest(characters, 'blocked'), 'name');
3361
+ * // => ['fred', 'pebbles']
3273
3362
  *
3274
3363
  * // using "_.where" callback shorthand
3275
- * _.rest(food, { 'type': 'fruit' });
3276
- * // => [{ 'name': 'beet', 'type': 'vegetable' }]
3364
+ * _.rest(characters, { 'employer': 'slate' });
3365
+ * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }]
3277
3366
  */
3278
3367
  function rest(array, callback, thisArg) {
3279
3368
  if (typeof callback != 'number' && callback != null) {
@@ -3288,7 +3377,7 @@
3288
3377
  } else {
3289
3378
  n = (callback == null || thisArg) ? 1 : nativeMax(0, callback);
3290
3379
  }
3291
- return nativeSlice.call(array, n);
3380
+ return slice(array, n);
3292
3381
  }
3293
3382
 
3294
3383
  /**
@@ -3422,7 +3511,7 @@
3422
3511
  // juggle arguments
3423
3512
  if (typeof isSorted != 'boolean' && isSorted != null) {
3424
3513
  thisArg = callback;
3425
- callback = !(thisArg && thisArg[isSorted] === array) ? isSorted : null;
3514
+ callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted;
3426
3515
  isSorted = false;
3427
3516
  }
3428
3517
  if (callback != null) {
@@ -3447,7 +3536,7 @@
3447
3536
  * // => [2, 3, 4]
3448
3537
  */
3449
3538
  function without(array) {
3450
- return difference(array, nativeSlice.call(arguments, 1));
3539
+ return baseDifference(array, slice(arguments, 1));
3451
3540
  }
3452
3541
 
3453
3542
  /**
@@ -3463,8 +3552,8 @@
3463
3552
  * @returns {Array} Returns a new array of grouped elements.
3464
3553
  * @example
3465
3554
  *
3466
- * _.zip(['moe', 'larry'], [30, 40], [true, false]);
3467
- * // => [['moe', 30, true], ['larry', 40, false]]
3555
+ * _.zip(['fred', 'barney'], [30, 40], [true, false]);
3556
+ * // => [['fred', 30, true], ['barney', 40, false]]
3468
3557
  */
3469
3558
  function zip() {
3470
3559
  var index = -1,
@@ -3492,8 +3581,8 @@
3492
3581
  * corresponding values.
3493
3582
  * @example
3494
3583
  *
3495
- * _.zipObject(['moe', 'larry'], [30, 40]);
3496
- * // => { 'moe': 30, 'larry': 40 }
3584
+ * _.zipObject(['fred', 'barney'], [30, 40]);
3585
+ * // => { 'fred': 30, 'barney': 40 }
3497
3586
  */
3498
3587
  function zipObject(keys, values) {
3499
3588
  var index = -1,
@@ -3566,14 +3655,14 @@
3566
3655
  * return greeting + ' ' + this.name;
3567
3656
  * };
3568
3657
  *
3569
- * func = _.bind(func, { 'name': 'moe' }, 'hi');
3658
+ * func = _.bind(func, { 'name': 'fred' }, 'hi');
3570
3659
  * func();
3571
- * // => 'hi moe'
3660
+ * // => 'hi fred'
3572
3661
  */
3573
3662
  function bind(func, thisArg) {
3574
3663
  return arguments.length > 2
3575
- ? createBound(func, 17, nativeSlice.call(arguments, 2), null, thisArg)
3576
- : createBound(func, 1, null, null, thisArg);
3664
+ ? createWrapper(func, 17, slice(arguments, 2), null, thisArg)
3665
+ : createWrapper(func, 1, null, null, thisArg);
3577
3666
  }
3578
3667
 
3579
3668
  /**
@@ -3607,7 +3696,7 @@
3607
3696
 
3608
3697
  while (++index < length) {
3609
3698
  var key = funcs[index];
3610
- object[key] = createBound(object[key], 1, null, null, object);
3699
+ object[key] = createWrapper(object[key], 1, null, null, object);
3611
3700
  }
3612
3701
  return object;
3613
3702
  }
@@ -3626,7 +3715,7 @@
3626
3715
  * @example
3627
3716
  *
3628
3717
  * var realNameMap = {
3629
- * 'curly': 'jerome'
3718
+ * 'pebbles': 'penelope'
3630
3719
  * };
3631
3720
  *
3632
3721
  * var format = function(name) {
@@ -3639,8 +3728,8 @@
3639
3728
  * };
3640
3729
  *
3641
3730
  * var welcome = _.compose(greet, format);
3642
- * welcome('curly');
3643
- * // => 'Hiya Jerome!'
3731
+ * welcome('pebbles');
3732
+ * // => 'Hiya Penelope!'
3644
3733
  */
3645
3734
  function compose() {
3646
3735
  var funcs = arguments,
@@ -3677,9 +3766,9 @@
3677
3766
  * @returns {Function} Returns a callback function.
3678
3767
  * @example
3679
3768
  *
3680
- * var stooges = [
3681
- * { 'name': 'moe', 'age': 40 },
3682
- * { 'name': 'larry', 'age': 50 }
3769
+ * var characters = [
3770
+ * { 'name': 'barney', 'age': 36 },
3771
+ * { 'name': 'fred', 'age': 40 }
3683
3772
  * ];
3684
3773
  *
3685
3774
  * // wrap to create custom callback shorthands
@@ -3690,8 +3779,8 @@
3690
3779
  * };
3691
3780
  * });
3692
3781
  *
3693
- * _.filter(stooges, 'age__gt45');
3694
- * // => [{ 'name': 'larry', 'age': 50 }]
3782
+ * _.filter(characters, 'age__gt38');
3783
+ * // => [{ 'name': 'fred', 'age': 40 }]
3695
3784
  */
3696
3785
  function createCallback(func, thisArg, argCount) {
3697
3786
  var type = typeof func;
@@ -3792,6 +3881,9 @@
3792
3881
  if (isCalled) {
3793
3882
  lastCalled = now();
3794
3883
  result = func.apply(thisArg, args);
3884
+ if (!timeoutId && !maxTimeoutId) {
3885
+ args = thisArg = null;
3886
+ }
3795
3887
  }
3796
3888
  } else {
3797
3889
  timeoutId = setTimeout(delayed, remaining);
@@ -3806,6 +3898,9 @@
3806
3898
  if (trailing || (maxWait !== wait)) {
3807
3899
  lastCalled = now();
3808
3900
  result = func.apply(thisArg, args);
3901
+ if (!timeoutId && !maxTimeoutId) {
3902
+ args = thisArg = null;
3903
+ }
3809
3904
  }
3810
3905
  };
3811
3906
 
@@ -3821,8 +3916,10 @@
3821
3916
  if (!maxTimeoutId && !leading) {
3822
3917
  lastCalled = stamp;
3823
3918
  }
3824
- var remaining = maxWait - (stamp - lastCalled);
3825
- if (remaining <= 0) {
3919
+ var remaining = maxWait - (stamp - lastCalled),
3920
+ isCalled = remaining <= 0;
3921
+
3922
+ if (isCalled) {
3826
3923
  if (maxTimeoutId) {
3827
3924
  maxTimeoutId = clearTimeout(maxTimeoutId);
3828
3925
  }
@@ -3833,12 +3930,19 @@
3833
3930
  maxTimeoutId = setTimeout(maxDelayed, remaining);
3834
3931
  }
3835
3932
  }
3836
- if (!timeoutId && wait !== maxWait) {
3933
+ if (isCalled && timeoutId) {
3934
+ timeoutId = clearTimeout(timeoutId);
3935
+ }
3936
+ else if (!timeoutId && wait !== maxWait) {
3837
3937
  timeoutId = setTimeout(delayed, wait);
3838
3938
  }
3839
3939
  if (leadingCall) {
3940
+ isCalled = true;
3840
3941
  result = func.apply(thisArg, args);
3841
3942
  }
3943
+ if (isCalled && !timeoutId && !maxTimeoutId) {
3944
+ args = thisArg = null;
3945
+ }
3842
3946
  return result;
3843
3947
  };
3844
3948
  }
@@ -3862,7 +3966,7 @@
3862
3966
  if (!isFunction(func)) {
3863
3967
  throw new TypeError;
3864
3968
  }
3865
- var args = nativeSlice.call(arguments, 1);
3969
+ var args = slice(arguments, 1);
3866
3970
  return setTimeout(function() { func.apply(undefined, args); }, 1);
3867
3971
  }
3868
3972
 
@@ -3887,7 +3991,7 @@
3887
3991
  if (!isFunction(func)) {
3888
3992
  throw new TypeError;
3889
3993
  }
3890
- var args = nativeSlice.call(arguments, 2);
3994
+ var args = slice(arguments, 2);
3891
3995
  return setTimeout(function() { func.apply(undefined, args); }, wait);
3892
3996
  }
3893
3997
 
@@ -3911,19 +4015,22 @@
3911
4015
  * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
3912
4016
  * });
3913
4017
  *
4018
+ * fibonacci(9)
4019
+ * // => 34
4020
+ *
3914
4021
  * var data = {
3915
- * 'moe': { 'name': 'moe', 'age': 40 },
3916
- * 'curly': { 'name': 'curly', 'age': 60 }
4022
+ * 'fred': { 'name': 'fred', 'age': 40 },
4023
+ * 'pebbles': { 'name': 'pebbles', 'age': 1 }
3917
4024
  * };
3918
4025
  *
3919
4026
  * // modifying the result cache
3920
- * var stooge = _.memoize(function(name) { return data[name]; }, _.identity);
3921
- * stooge('curly');
3922
- * // => { 'name': 'curly', 'age': 60 }
4027
+ * var get = _.memoize(function(name) { return data[name]; }, _.identity);
4028
+ * get('pebbles');
4029
+ * // => { 'name': 'pebbles', 'age': 1 }
3923
4030
  *
3924
- * stooge.cache.curly.name = 'jerome';
3925
- * stooge('curly');
3926
- * // => { 'name': 'jerome', 'age': 60 }
4031
+ * get.cache.pebbles.name = 'penelope';
4032
+ * get('pebbles');
4033
+ * // => { 'name': 'penelope', 'age': 1 }
3927
4034
  */
3928
4035
  function memoize(func, resolver) {
3929
4036
  var cache = {};
@@ -3987,11 +4094,11 @@
3987
4094
  *
3988
4095
  * var greet = function(greeting, name) { return greeting + ' ' + name; };
3989
4096
  * var hi = _.partial(greet, 'hi');
3990
- * hi('moe');
3991
- * // => 'hi moe'
4097
+ * hi('fred');
4098
+ * // => 'hi fred'
3992
4099
  */
3993
4100
  function partial(func) {
3994
- return createBound(func, 16, nativeSlice.call(arguments, 1));
4101
+ return createWrapper(func, 16, slice(arguments, 1));
3995
4102
  }
3996
4103
 
3997
4104
  /**
@@ -4060,22 +4167,15 @@
4060
4167
  * @returns {Function} Returns the new function.
4061
4168
  * @example
4062
4169
  *
4063
- * var hello = function(name) { return 'hello ' + name; };
4064
- * hello = _.wrap(hello, function(func) {
4065
- * return 'before, ' + func('moe') + ', after';
4170
+ * var p = _.wrap(_.escape, function(func, text) {
4171
+ * return '<p>' + func(text) + '</p>';
4066
4172
  * });
4067
- * hello();
4068
- * // => 'before, hello moe, after'
4173
+ *
4174
+ * p('Fred, Wilma, & Pebbles');
4175
+ * // => '<p>Fred, Wilma, &amp; Pebbles</p>'
4069
4176
  */
4070
4177
  function wrap(value, wrapper) {
4071
- if (!isFunction(wrapper)) {
4072
- throw new TypeError;
4073
- }
4074
- return function() {
4075
- var args = [value];
4076
- push.apply(args, arguments);
4077
- return wrapper.apply(this, args);
4078
- };
4178
+ return createWrapper(wrapper, 16, [value]);
4079
4179
  }
4080
4180
 
4081
4181
  /*--------------------------------------------------------------------------*/
@@ -4091,8 +4191,8 @@
4091
4191
  * @returns {string} Returns the escaped string.
4092
4192
  * @example
4093
4193
  *
4094
- * _.escape('Moe, Larry & Curly');
4095
- * // => 'Moe, Larry &amp; Curly'
4194
+ * _.escape('Fred, Wilma, & Pebbles');
4195
+ * // => 'Fred, Wilma, &amp; Pebbles'
4096
4196
  */
4097
4197
  function escape(string) {
4098
4198
  return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar);
@@ -4108,8 +4208,8 @@
4108
4208
  * @returns {*} Returns `value`.
4109
4209
  * @example
4110
4210
  *
4111
- * var moe = { 'name': 'moe' };
4112
- * moe === _.identity(moe);
4211
+ * var object = { 'name': 'fred' };
4212
+ * _.identity(object) === object;
4113
4213
  * // => true
4114
4214
  */
4115
4215
  function identity(value) {
@@ -4133,11 +4233,11 @@
4133
4233
  * }
4134
4234
  * });
4135
4235
  *
4136
- * _.capitalize('moe');
4137
- * // => 'Moe'
4236
+ * _.capitalize('fred');
4237
+ * // => 'Fred'
4138
4238
  *
4139
- * _('moe').capitalize();
4140
- * // => 'Moe'
4239
+ * _('fred').capitalize();
4240
+ * // => 'Fred'
4141
4241
  */
4142
4242
  function mixin(object) {
4143
4243
  forEach(functions(object), function(methodName) {
@@ -4172,6 +4272,22 @@
4172
4272
  return this;
4173
4273
  }
4174
4274
 
4275
+ /**
4276
+ * A no-operation function.
4277
+ *
4278
+ * @static
4279
+ * @memberOf _
4280
+ * @category Utilities
4281
+ * @example
4282
+ *
4283
+ * var object = { 'name': 'fred' };
4284
+ * _.noop(object) === undefined;
4285
+ * // => true
4286
+ */
4287
+ function noop() {
4288
+ // no operation performed
4289
+ }
4290
+
4175
4291
  /**
4176
4292
  * Produces a random number between `min` and `max` (inclusive). If only one
4177
4293
  * argument is provided a number between `0` and the given number will be
@@ -4255,7 +4371,7 @@
4255
4371
  * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
4256
4372
  *
4257
4373
  * For more information on precompiling templates see:
4258
- * http://lodash.com/#custom-builds
4374
+ * http://lodash.com/custom-builds
4259
4375
  *
4260
4376
  * For more information on Chrome extension sandboxes see:
4261
4377
  * http://developer.chrome.com/stable/extensions/sandboxingEval.html
@@ -4278,8 +4394,8 @@
4278
4394
  *
4279
4395
  * // using the "interpolate" delimiter to create a compiled template
4280
4396
  * var compiled = _.template('hello <%= name %>');
4281
- * compiled({ 'name': 'moe' });
4282
- * // => 'hello moe'
4397
+ * compiled({ 'name': 'fred' });
4398
+ * // => 'hello fred'
4283
4399
  *
4284
4400
  * // using the "escape" delimiter to escape HTML in data property values
4285
4401
  * _.template('<b><%- value %></b>', { 'value': '<script>' });
@@ -4287,16 +4403,16 @@
4287
4403
  *
4288
4404
  * // using the "evaluate" delimiter to generate HTML
4289
4405
  * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
4290
- * _.template(list, { 'people': ['moe', 'larry'] });
4291
- * // => '<li>moe</li><li>larry</li>'
4406
+ * _.template(list, { 'people': ['fred', 'barney'] });
4407
+ * // => '<li>fred</li><li>barney</li>'
4292
4408
  *
4293
4409
  * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
4294
- * _.template('hello ${ name }', { 'name': 'curly' });
4295
- * // => 'hello curly'
4410
+ * _.template('hello ${ name }', { 'name': 'pebbles' });
4411
+ * // => 'hello pebbles'
4296
4412
  *
4297
4413
  * // using the internal `print` function in "evaluate" delimiters
4298
- * _.template('<% print("hello " + name); %>!', { 'name': 'larry' });
4299
- * // => 'hello larry!'
4414
+ * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
4415
+ * // => 'hello barney!'
4300
4416
  *
4301
4417
  * // using a custom template delimiters
4302
4418
  * _.templateSettings = {
@@ -4308,8 +4424,8 @@
4308
4424
  *
4309
4425
  * // using the `imports` option to import jQuery
4310
4426
  * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
4311
- * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
4312
- * // => '<li>moe</li><li>larry</li>'
4427
+ * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { '$': jQuery } });
4428
+ * // => '<li>fred</li><li>barney</li>'
4313
4429
  *
4314
4430
  * // using the `sourceURL` option to specify a custom sourceURL for the template
4315
4431
  * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
@@ -4337,7 +4453,7 @@
4337
4453
  var _ = lodash,
4338
4454
  settings = _.templateSettings;
4339
4455
 
4340
- text || (text = '');
4456
+ text = String(text || '');
4341
4457
  options = defaults({}, options, settings);
4342
4458
 
4343
4459
  var index = 0,
@@ -4436,8 +4552,8 @@
4436
4552
  * @returns {string} Returns the unescaped string.
4437
4553
  * @example
4438
4554
  *
4439
- * _.unescape('Moe, Larry &amp; Curly');
4440
- * // => 'Moe, Larry & Curly'
4555
+ * _.unescape('Fred, Barney &amp; Pebbles');
4556
+ * // => 'Fred, Barney & Pebbles'
4441
4557
  */
4442
4558
  function unescape(string) {
4443
4559
  return string == null ? '' : String(string).replace(reEscapedHtml, unescapeHtmlChar);
@@ -4477,18 +4593,18 @@
4477
4593
  * @returns {Object} Returns the wrapper object.
4478
4594
  * @example
4479
4595
  *
4480
- * var stooges = [
4481
- * { 'name': 'moe', 'age': 40 },
4482
- * { 'name': 'larry', 'age': 50 },
4483
- * { 'name': 'curly', 'age': 60 }
4596
+ * var characters = [
4597
+ * { 'name': 'barney', 'age': 36 },
4598
+ * { 'name': 'fred', 'age': 40 },
4599
+ * { 'name': 'pebbles', 'age': 1 }
4484
4600
  * ];
4485
4601
  *
4486
- * var youngest = _.chain(stooges)
4602
+ * var youngest = _.chain(characters)
4487
4603
  * .sortBy('age')
4488
- * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
4604
+ * .map(function(chr) { return chr.name + ' is ' + chr.age; })
4489
4605
  * .first()
4490
4606
  * .value();
4491
- * // => 'moe is 40'
4607
+ * // => 'pebbles is 1'
4492
4608
  */
4493
4609
  function chain(value) {
4494
4610
  value = new lodashWrapper(value);
@@ -4511,12 +4627,10 @@
4511
4627
  * @example
4512
4628
  *
4513
4629
  * _([1, 2, 3, 4])
4514
- * .filter(function(num) { return num % 2 == 0; })
4515
- * .tap(function(array) { console.log(array); })
4516
- * .map(function(num) { return num * num; })
4630
+ * .tap(function(array) { array.pop(); })
4631
+ * .reverse()
4517
4632
  * .value();
4518
- * // => // [2, 4] (logged)
4519
- * // => [4, 16]
4633
+ * // => [3, 2, 1]
4520
4634
  */
4521
4635
  function tap(value, interceptor) {
4522
4636
  interceptor(value);
@@ -4532,21 +4646,21 @@
4532
4646
  * @returns {*} Returns the wrapper object.
4533
4647
  * @example
4534
4648
  *
4535
- * var stooges = [
4536
- * { 'name': 'moe', 'age': 40 },
4537
- * { 'name': 'larry', 'age': 50 }
4649
+ * var characters = [
4650
+ * { 'name': 'barney', 'age': 36 },
4651
+ * { 'name': 'fred', 'age': 40 }
4538
4652
  * ];
4539
4653
  *
4540
4654
  * // without explicit chaining
4541
- * _(stooges).first();
4542
- * // => { 'name': 'moe', 'age': 40 }
4655
+ * _(characters).first();
4656
+ * // => { 'name': 'barney', 'age': 36 }
4543
4657
  *
4544
4658
  * // with explicit chaining
4545
- * _(stooges).chain()
4659
+ * _(characters).chain()
4546
4660
  * .first()
4547
4661
  * .pick('age')
4548
4662
  * .value()
4549
- * // => { 'age': 40 }
4663
+ * // => { 'age': 36 }
4550
4664
  */
4551
4665
  function wrapperChain() {
4552
4666
  this.__chain__ = true;
@@ -4708,7 +4822,7 @@
4708
4822
  * @memberOf _
4709
4823
  * @type string
4710
4824
  */
4711
- lodash.VERSION = '2.2.1';
4825
+ lodash.VERSION = '2.3.0';
4712
4826
 
4713
4827
  // add "Chaining" functions to the wrapper
4714
4828
  lodash.prototype.chain = wrapperChain;
@@ -4747,7 +4861,7 @@
4747
4861
 
4748
4862
  /*--------------------------------------------------------------------------*/
4749
4863
 
4750
- // some AMD build optimizers, like r.js, check for condition patterns like the following:
4864
+ // some AMD build optimizers like r.js check for condition patterns like the following:
4751
4865
  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
4752
4866
  // Expose Lo-Dash to the global object even when an AMD loader is present in
4753
4867
  // case Lo-Dash was injected by a third-party script and not intended to be