lodash-rails 4.17.5 → 4.17.21

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,26 +4,26 @@
4
4
  * Build: `lodash core -o ./dist/lodash.core.js`
5
5
  */
6
6
  ;(function(){function n(n){return H(n)&&pn.call(n,"callee")&&!yn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?Z:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return j(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");
7
- return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===Z?i===i:r(i,c)))var c=i,f=o}return f}function l(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function p(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=R),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?p(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f)}return o}function s(n,t){return n&&On(n,t,Dn);
7
+ return setTimeout(function(){n.apply(Z,r)},t)}function f(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function a(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===Z?i===i:r(i,c)))var c=i,f=o}return f}function l(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function p(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=R),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?p(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f)}return o}function s(n,t){return n&&On(n,t,Dn);
8
8
  }function h(n,t){return l(t,function(t){return U(n[t])})}function v(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!H(t)?n!==n&&t!==t:y(n,t,r,e,b,u))}function y(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=i?"[object Array]":hn.call(n),a=c?"[object Array]":hn.call(t),f="[object Arguments]"==f?"[object Object]":f,a="[object Arguments]"==a?"[object Object]":a,l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){
9
- return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t,
10
- r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return n<t}function j(n,t){var r=-1,e=M(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function d(n){var t=_n(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&b(n[u],r[u],3)))return false}return true}}function m(n,t){return n=Object(n),C(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function O(n){return xn(I(n,void 0,X),n+"");
9
+ return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=T(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=B(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t,
10
+ r=u(i,f,r,e,o),o.pop(),r)}function g(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?d:r)(n)}function _(n,t){return n<t}function j(n,t){var r=-1,e=M(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function d(n){var t=_n(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&b(n[u],r[u],3)))return false}return true}}function m(n,t){return n=Object(n),C(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function O(n){return xn(I(n,void 0,X),n+"");
11
11
  }function x(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function A(n){return x(n,0,n.length)}function E(n,t){var r;return mn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function w(n,r){return C(r,function(n,r){return r.func.apply(r.thisArg,t([n],r.args))},n)}function k(n,t,r){var e=!r;r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],c=Z;if(c===Z&&(c=n[i]),e)r[i]=c;else{var f=r,a=f[i];pn.call(f,i)&&J(a,c)&&(c!==Z||i in f)||(f[i]=c);
12
12
  }}return r}function N(n){return O(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:Z,o=3<n.length&&typeof o=="function"?(u--,o):Z;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function F(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return V(t)?t:r}}function S(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&this instanceof e?u:n;++c<f;)a[c]=r[c];for(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function");
13
- var u=F(n);return e}function T(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;for(var c=-1,f=true,a=2&r?[]:Z;++c<i;){var l=n[c],p=t[c];if(void 0!==Z){f=false;break}if(a){if(!E(t,function(n,t){if(!P(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function B(n,t,r,e,u,o){var i=1&r,c=Dn(n),f=c.length,a=Dn(t).length;if(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:pn.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];
14
- if(void 0!==Z||s!==h&&!u(s,h,r,e,o)){a=false;break}i||(i="constructor"==p)}return a&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),a}function R(t){return Nn(t)||n(t)}function D(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function I(n,t,r){return t=jn(t===Z?n.length-1:t,0),function(){for(var e=arguments,u=-1,o=jn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,
15
- o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return(null==n?0:n.length)?p(n,1):[]}function q(n){return n&&n.length?n[0]:Z}function P(n,t,r){var e=null==n?0:n.length;r=typeof r=="number"?0>r?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function z(n,t){return mn(n,g(t))}function C(n,t,r){return e(n,g(t),r,3>arguments.length,mn)}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),
16
- function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){
17
- return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n);return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;
18
- if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){
19
- return function(t){return null==n?Z:n[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i;
20
- var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(s),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=X,An=function(n){return function(t,r,e){var u=Object(t);if(!M(t)){var o=g(r);t=Dn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:Z}}(function(n,t,r){var e=null==n?0:n.length;
21
- if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),En=O(function(n,t,r){return S(n,t,r)}),wn=O(function(n,t){return c(n,1,t)}),kn=O(function(n,t,r){return c(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=N(function(n,t){k(t,_n(t),n)}),Bn=N(function(n,t){k(t,D(t),n)}),Rn=O(function(n,t){n=Object(n);var r,e=-1,u=t.length,o=2<u?t[2]:Z;if(r=o){r=t[0];var i=t[1];if(V(o)){var c=typeof i;if("number"==c){if(c=M(o))var c=o.length,f=typeof i,c=null==c?9007199254740991:c,c=!!c&&("number"==f||"symbol"!=f&&en.test(i))&&-1<i&&0==i%1&&i<c;
22
- }else c="string"==c&&i in o;r=!!c&&J(o[i],r)}else r=false}for(r&&(u=1);++e<u;)for(o=t[e],r=In(o),i=-1,c=r.length;++i<c;){var f=r[i],a=n[f];(a===Z||J(a,ln[f])&&!pn.call(n,f))&&(n[f]=o[f])}return n}),Dn=_n,In=D,$n=function(n){return xn(I(n,Z,$),n+"")}(function(n,t){return null==n?{}:m(n,t)});o.assignIn=Bn,o.before=G,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return l(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];
23
- return t(Nn(e)?A(e):[e],p(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Rn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return l(n,g(t))},o.flatten=$,o.flattenDeep=function(n){return(null==n?0:n.length)?p(n,nn):[]},o.iteratee=g,o.keys=Dn,o.map=function(n,t){return j(n,g(t))},o.matches=function(n){return d(Tn({},n))},o.mixin=Y,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){
24
- return G(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===Z?e:+r,e?x(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=g(t),j(j(n,function(n,r,u){return{value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==Z,o=null===r,i=r===r,c=e!==Z,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){
25
- return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return M(n)?n.length?A(n):[]:W(n)},o.values=W,o.extend=Bn,Y(o,o),o.clone=function(n){return V(n)?Nn(n)?A(n):k(n,_n(n)):n},o.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,fn):n},o.every=function(n,t,r){return t=r?Z:t,f(n,g(t))},o.find=An,o.forEach=z,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=q,o.identity=X,o.indexOf=P,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==hn.call(n);
26
- },o.isDate=function(n){return H(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return M(t)&&(Nn(t)||L(t)||U(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=U,o.isNaN=function(n){return K(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=K,o.isObject=V,o.isRegExp=function(n){return H(n)&&"[object RegExp]"==hn.call(n)},o.isString=L,o.isUndefined=function(n){return n===Z},o.last=function(n){
27
- var t=null==n?0:n.length;return t?n[t-1]:Z},o.max=function(n){return n&&n.length?a(n,X,v):Z},o.min=function(n){return n&&n.length?a(n,X,_):Z},o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=C,o.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=M(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?Z:t,E(n,g(t))},o.uniqueId=function(n){var t=++sn;return Q(n)+t},o.each=z,o.first=q,Y(o,function(){
28
- var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.5",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n);
29
- })}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return w(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o, define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);
13
+ var u=F(n);return e}function T(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;var c=o.get(n),f=o.get(t);if(c&&f)return c==t&&f==n;for(var c=-1,f=true,a=2&r?[]:Z;++c<i;){var l=n[c],p=t[c];if(void 0!==Z){f=false;break}if(a){if(!E(t,function(n,t){if(!P(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function B(n,t,r,e,u,o){var i=1&r,c=Dn(n),f=c.length,a=Dn(t).length;if(f!=a&&!i)return false;for(a=f;a--;){var l=c[a];if(!(i?l in t:pn.call(t,l)))return false;
14
+ }var p=o.get(n),l=o.get(t);if(p&&l)return p==t&&l==n;for(p=true;++a<f;){var l=c[a],s=n[l],h=t[l];if(void 0!==Z||s!==h&&!u(s,h,r,e,o)){p=false;break}i||(i="constructor"==l)}return p&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(p=false)),p}function R(t){return Nn(t)||n(t)}function D(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function I(n,t,r){return t=jn(t===Z?n.length-1:t,0),
15
+ function(){for(var e=arguments,u=-1,o=jn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return(null==n?0:n.length)?p(n,1):[]}function q(n){return n&&n.length?n[0]:Z}function P(n,t,r){var e=null==n?0:n.length;r=typeof r=="number"?0>r?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function z(n,t){return mn(n,g(t))}function C(n,t,r){return e(n,g(t),r,3>arguments.length,mn);
16
+ }function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!U(n)}function U(n){return!!V(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function V(n){var t=typeof n;
17
+ return null!=n&&("object"==t||"function"==t)}function H(n){return null!=n&&typeof n=="object"}function K(n){return typeof n=="number"||H(n)&&"[object Number]"==hn.call(n)}function L(n){return typeof n=="string"||!Nn(n)&&H(n)&&"[object String]"==hn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return null==n?[]:u(n,Dn(n))}function X(n){return n}function Y(n,r,e){var u=Dn(r),o=h(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=h(r,Dn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(n);
18
+ return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=A(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var Z,nn=1/0,tn=/[&<>"']/g,rn=RegExp(tn.source),en=/^(?:0|[1-9]\d*)$/,un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){
19
+ return function(t){return null==n?Z:n[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,bn=Object.create,yn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return V(t)?bn?bn(t):(n.prototype=t,t=new n,n.prototype=Z,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i;
20
+ var mn=function(n,t){return function(r,e){if(null==r)return r;if(!M(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(s),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=X,An=function(n){return function(t,r,e){var u=Object(t);if(!M(t)){var o=g(r);t=Dn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:Z}}(function(n,t,r){var e=null==n?0:n.length;
21
+ if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(e+r,0));n:{for(t=g(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),En=O(function(n,t,r){return S(n,t,r)}),wn=O(function(n,t){return c(n,1,t)}),kn=O(function(n,t,r){return c(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=N(function(n,t){k(t,_n(t),n)}),Bn=N(function(n,t){k(t,D(t),n)}),Rn=O(function(n,t){n=Object(n);var r,e=-1,u=t.length,o=2<u?t[2]:Z;if(r=o){r=t[0];var i=t[1];if(V(o)){var c=typeof i;if("number"==c){if(c=M(o))var c=o.length,f=typeof i,c=null==c?9007199254740991:c,c=!!c&&("number"==f||"symbol"!=f&&en.test(i))&&-1<i&&0==i%1&&i<c;
22
+ }else c="string"==c&&i in o;r=!!c&&J(o[i],r)}else r=false}for(r&&(u=1);++e<u;)for(o=t[e],r=In(o),i=-1,c=r.length;++i<c;){var f=r[i],a=n[f];(a===Z||J(a,ln[f])&&!pn.call(n,f))&&(n[f]=o[f])}return n}),Dn=_n,In=D,$n=function(n){return xn(I(n,Z,$),n+"")}(function(n,t){return null==n?{}:m(n,t)});o.assignIn=Bn,o.before=G,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return l(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];
23
+ return t(Nn(e)?A(e):[e],p(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Rn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return l(n,g(t))},o.flatten=$,o.flattenDeep=function(n){return(null==n?0:n.length)?p(n,nn):[]},o.iteratee=g,o.keys=Dn,o.map=function(n,t){return j(n,g(t))},o.matches=function(n){return d(Tn({},n))},o.mixin=Y,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){
24
+ return G(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===Z?e:+r,e?x(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=g(t),j(j(n,function(n,r,u){return{value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==Z,o=null===r,i=r===r,c=e!==Z,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){
25
+ return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return M(n)?n.length?A(n):[]:W(n)},o.values=W,o.extend=Bn,Y(o,o),o.clone=function(n){return V(n)?Nn(n)?A(n):k(n,_n(n)):n},o.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,fn):n},o.every=function(n,t,r){return t=r?Z:t,f(n,g(t))},o.find=An,o.forEach=z,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=q,o.identity=X,o.indexOf=P,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==hn.call(n);
26
+ },o.isDate=function(n){return H(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return M(t)&&(Nn(t)||L(t)||U(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=U,o.isNaN=function(n){return K(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=K,o.isObject=V,o.isRegExp=function(n){return H(n)&&"[object RegExp]"==hn.call(n)},o.isString=L,o.isUndefined=function(n){return n===Z},o.last=function(n){
27
+ var t=null==n?0:n.length;return t?n[t-1]:Z},o.max=function(n){return n&&n.length?a(n,X,v):Z},o.min=function(n){return n&&n.length?a(n,X,_):Z},o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=C,o.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=M(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?Z:t,E(n,g(t))},o.uniqueId=function(n){var t=++sn;return Q(n)+t},o.each=z,o.first=q,Y(o,function(){
28
+ var n={};return s(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.21",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n);
29
+ })}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return w(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o, define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license
3
3
  * Lodash <https://lodash.com/>
4
- * Copyright JS Foundation and other contributors <https://js.foundation/>
4
+ * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
5
5
  * Released under MIT license <https://lodash.com/license>
6
6
  * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
7
7
  * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -12,14 +12,15 @@
12
12
  var undefined;
13
13
 
14
14
  /** Used as the semantic version number. */
15
- var VERSION = '4.17.5';
15
+ var VERSION = '4.17.21';
16
16
 
17
17
  /** Used as the size to enable large array optimizations. */
18
18
  var LARGE_ARRAY_SIZE = 200;
19
19
 
20
20
  /** Error message constants. */
21
21
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
22
- FUNC_ERROR_TEXT = 'Expected a function';
22
+ FUNC_ERROR_TEXT = 'Expected a function',
23
+ INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
23
24
 
24
25
  /** Used to stand-in for `undefined` hash values. */
25
26
  var HASH_UNDEFINED = '__lodash_hash_undefined__';
@@ -32,48 +33,48 @@
32
33
 
33
34
  /** Used to compose bitmasks for cloning. */
34
35
  var CLONE_DEEP_FLAG = 1,
35
- CLONE_FLAT_FLAG = 2,
36
- CLONE_SYMBOLS_FLAG = 4;
36
+ CLONE_FLAT_FLAG = 2,
37
+ CLONE_SYMBOLS_FLAG = 4;
37
38
 
38
39
  /** Used to compose bitmasks for value comparisons. */
39
40
  var COMPARE_PARTIAL_FLAG = 1,
40
- COMPARE_UNORDERED_FLAG = 2;
41
+ COMPARE_UNORDERED_FLAG = 2;
41
42
 
42
43
  /** Used to compose bitmasks for function metadata. */
43
44
  var WRAP_BIND_FLAG = 1,
44
- WRAP_BIND_KEY_FLAG = 2,
45
- WRAP_CURRY_BOUND_FLAG = 4,
46
- WRAP_CURRY_FLAG = 8,
47
- WRAP_CURRY_RIGHT_FLAG = 16,
48
- WRAP_PARTIAL_FLAG = 32,
49
- WRAP_PARTIAL_RIGHT_FLAG = 64,
50
- WRAP_ARY_FLAG = 128,
51
- WRAP_REARG_FLAG = 256,
52
- WRAP_FLIP_FLAG = 512;
45
+ WRAP_BIND_KEY_FLAG = 2,
46
+ WRAP_CURRY_BOUND_FLAG = 4,
47
+ WRAP_CURRY_FLAG = 8,
48
+ WRAP_CURRY_RIGHT_FLAG = 16,
49
+ WRAP_PARTIAL_FLAG = 32,
50
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
51
+ WRAP_ARY_FLAG = 128,
52
+ WRAP_REARG_FLAG = 256,
53
+ WRAP_FLIP_FLAG = 512;
53
54
 
54
55
  /** Used as default options for `_.truncate`. */
55
56
  var DEFAULT_TRUNC_LENGTH = 30,
56
- DEFAULT_TRUNC_OMISSION = '...';
57
+ DEFAULT_TRUNC_OMISSION = '...';
57
58
 
58
59
  /** Used to detect hot functions by number of calls within a span of milliseconds. */
59
60
  var HOT_COUNT = 800,
60
- HOT_SPAN = 16;
61
+ HOT_SPAN = 16;
61
62
 
62
63
  /** Used to indicate the type of lazy iteratees. */
63
64
  var LAZY_FILTER_FLAG = 1,
64
- LAZY_MAP_FLAG = 2,
65
- LAZY_WHILE_FLAG = 3;
65
+ LAZY_MAP_FLAG = 2,
66
+ LAZY_WHILE_FLAG = 3;
66
67
 
67
68
  /** Used as references for various `Number` constants. */
68
69
  var INFINITY = 1 / 0,
69
- MAX_SAFE_INTEGER = 9007199254740991,
70
- MAX_INTEGER = 1.7976931348623157e+308,
71
- NAN = 0 / 0;
70
+ MAX_SAFE_INTEGER = 9007199254740991,
71
+ MAX_INTEGER = 1.7976931348623157e+308,
72
+ NAN = 0 / 0;
72
73
 
73
74
  /** Used as references for the maximum length and index of an array. */
74
75
  var MAX_ARRAY_LENGTH = 4294967295,
75
- MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
76
- HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
76
+ MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
77
+ HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
77
78
 
78
79
  /** Used to associate wrap methods with their bit flags. */
79
80
  var wrapFlags = [
@@ -90,81 +91,94 @@
90
91
 
91
92
  /** `Object#toString` result references. */
92
93
  var argsTag = '[object Arguments]',
93
- arrayTag = '[object Array]',
94
- asyncTag = '[object AsyncFunction]',
95
- boolTag = '[object Boolean]',
96
- dateTag = '[object Date]',
97
- domExcTag = '[object DOMException]',
98
- errorTag = '[object Error]',
99
- funcTag = '[object Function]',
100
- genTag = '[object GeneratorFunction]',
101
- mapTag = '[object Map]',
102
- numberTag = '[object Number]',
103
- nullTag = '[object Null]',
104
- objectTag = '[object Object]',
105
- promiseTag = '[object Promise]',
106
- proxyTag = '[object Proxy]',
107
- regexpTag = '[object RegExp]',
108
- setTag = '[object Set]',
109
- stringTag = '[object String]',
110
- symbolTag = '[object Symbol]',
111
- undefinedTag = '[object Undefined]',
112
- weakMapTag = '[object WeakMap]',
113
- weakSetTag = '[object WeakSet]';
94
+ arrayTag = '[object Array]',
95
+ asyncTag = '[object AsyncFunction]',
96
+ boolTag = '[object Boolean]',
97
+ dateTag = '[object Date]',
98
+ domExcTag = '[object DOMException]',
99
+ errorTag = '[object Error]',
100
+ funcTag = '[object Function]',
101
+ genTag = '[object GeneratorFunction]',
102
+ mapTag = '[object Map]',
103
+ numberTag = '[object Number]',
104
+ nullTag = '[object Null]',
105
+ objectTag = '[object Object]',
106
+ promiseTag = '[object Promise]',
107
+ proxyTag = '[object Proxy]',
108
+ regexpTag = '[object RegExp]',
109
+ setTag = '[object Set]',
110
+ stringTag = '[object String]',
111
+ symbolTag = '[object Symbol]',
112
+ undefinedTag = '[object Undefined]',
113
+ weakMapTag = '[object WeakMap]',
114
+ weakSetTag = '[object WeakSet]';
114
115
 
115
116
  var arrayBufferTag = '[object ArrayBuffer]',
116
- dataViewTag = '[object DataView]',
117
- float32Tag = '[object Float32Array]',
118
- float64Tag = '[object Float64Array]',
119
- int8Tag = '[object Int8Array]',
120
- int16Tag = '[object Int16Array]',
121
- int32Tag = '[object Int32Array]',
122
- uint8Tag = '[object Uint8Array]',
123
- uint8ClampedTag = '[object Uint8ClampedArray]',
124
- uint16Tag = '[object Uint16Array]',
125
- uint32Tag = '[object Uint32Array]';
117
+ dataViewTag = '[object DataView]',
118
+ float32Tag = '[object Float32Array]',
119
+ float64Tag = '[object Float64Array]',
120
+ int8Tag = '[object Int8Array]',
121
+ int16Tag = '[object Int16Array]',
122
+ int32Tag = '[object Int32Array]',
123
+ uint8Tag = '[object Uint8Array]',
124
+ uint8ClampedTag = '[object Uint8ClampedArray]',
125
+ uint16Tag = '[object Uint16Array]',
126
+ uint32Tag = '[object Uint32Array]';
126
127
 
127
128
  /** Used to match empty string literals in compiled template source. */
128
129
  var reEmptyStringLeading = /\b__p \+= '';/g,
129
- reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
130
- reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
130
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
131
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
131
132
 
132
133
  /** Used to match HTML entities and HTML characters. */
133
134
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
134
- reUnescapedHtml = /[&<>"']/g,
135
- reHasEscapedHtml = RegExp(reEscapedHtml.source),
136
- reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
135
+ reUnescapedHtml = /[&<>"']/g,
136
+ reHasEscapedHtml = RegExp(reEscapedHtml.source),
137
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
137
138
 
138
139
  /** Used to match template delimiters. */
139
140
  var reEscape = /<%-([\s\S]+?)%>/g,
140
- reEvaluate = /<%([\s\S]+?)%>/g,
141
- reInterpolate = /<%=([\s\S]+?)%>/g;
141
+ reEvaluate = /<%([\s\S]+?)%>/g,
142
+ reInterpolate = /<%=([\s\S]+?)%>/g;
142
143
 
143
144
  /** Used to match property names within property paths. */
144
145
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
145
- reIsPlainProp = /^\w*$/,
146
- rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
146
+ reIsPlainProp = /^\w*$/,
147
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
147
148
 
148
149
  /**
149
150
  * Used to match `RegExp`
150
151
  * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
151
152
  */
152
153
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
153
- reHasRegExpChar = RegExp(reRegExpChar.source);
154
+ reHasRegExpChar = RegExp(reRegExpChar.source);
154
155
 
155
- /** Used to match leading and trailing whitespace. */
156
- var reTrim = /^\s+|\s+$/g,
157
- reTrimStart = /^\s+/,
158
- reTrimEnd = /\s+$/;
156
+ /** Used to match leading whitespace. */
157
+ var reTrimStart = /^\s+/;
158
+
159
+ /** Used to match a single whitespace character. */
160
+ var reWhitespace = /\s/;
159
161
 
160
162
  /** Used to match wrap detail comments. */
161
163
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
162
- reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
163
- reSplitDetails = /,? & /;
164
+ reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
165
+ reSplitDetails = /,? & /;
164
166
 
165
167
  /** Used to match words composed of alphanumeric characters. */
166
168
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
167
169
 
170
+ /**
171
+ * Used to validate the `validate` option in `_.template` variable.
172
+ *
173
+ * Forbids characters which could potentially change the meaning of the function argument definition:
174
+ * - "()," (modification of function parameters)
175
+ * - "=" (default value)
176
+ * - "[]{}" (destructuring of function parameters)
177
+ * - "/" (beginning of a comment)
178
+ * - whitespace
179
+ */
180
+ var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
181
+
168
182
  /** Used to match backslashes in property paths. */
169
183
  var reEscapeChar = /\\(\\)?/g;
170
184
 
@@ -203,50 +217,50 @@
203
217
 
204
218
  /** Used to compose unicode character classes. */
205
219
  var rsAstralRange = '\\ud800-\\udfff',
206
- rsComboMarksRange = '\\u0300-\\u036f',
207
- reComboHalfMarksRange = '\\ufe20-\\ufe2f',
208
- rsComboSymbolsRange = '\\u20d0-\\u20ff',
209
- rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
210
- rsDingbatRange = '\\u2700-\\u27bf',
211
- rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
212
- rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
213
- rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
214
- rsPunctuationRange = '\\u2000-\\u206f',
215
- rsSpaceRange = ' \\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',
216
- rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
217
- rsVarRange = '\\ufe0e\\ufe0f',
218
- rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
220
+ rsComboMarksRange = '\\u0300-\\u036f',
221
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
222
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
223
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
224
+ rsDingbatRange = '\\u2700-\\u27bf',
225
+ rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
226
+ rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
227
+ rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
228
+ rsPunctuationRange = '\\u2000-\\u206f',
229
+ rsSpaceRange = ' \\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',
230
+ rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
231
+ rsVarRange = '\\ufe0e\\ufe0f',
232
+ rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
219
233
 
220
234
  /** Used to compose unicode capture groups. */
221
235
  var rsApos = "['\u2019]",
222
- rsAstral = '[' + rsAstralRange + ']',
223
- rsBreak = '[' + rsBreakRange + ']',
224
- rsCombo = '[' + rsComboRange + ']',
225
- rsDigits = '\\d+',
226
- rsDingbat = '[' + rsDingbatRange + ']',
227
- rsLower = '[' + rsLowerRange + ']',
228
- rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
229
- rsFitz = '\\ud83c[\\udffb-\\udfff]',
230
- rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
231
- rsNonAstral = '[^' + rsAstralRange + ']',
232
- rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
233
- rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
234
- rsUpper = '[' + rsUpperRange + ']',
235
- rsZWJ = '\\u200d';
236
+ rsAstral = '[' + rsAstralRange + ']',
237
+ rsBreak = '[' + rsBreakRange + ']',
238
+ rsCombo = '[' + rsComboRange + ']',
239
+ rsDigits = '\\d+',
240
+ rsDingbat = '[' + rsDingbatRange + ']',
241
+ rsLower = '[' + rsLowerRange + ']',
242
+ rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
243
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
244
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
245
+ rsNonAstral = '[^' + rsAstralRange + ']',
246
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
247
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
248
+ rsUpper = '[' + rsUpperRange + ']',
249
+ rsZWJ = '\\u200d';
236
250
 
237
251
  /** Used to compose unicode regexes. */
238
252
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
239
- rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
240
- rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
241
- rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
242
- reOptMod = rsModifier + '?',
243
- rsOptVar = '[' + rsVarRange + ']?',
244
- rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
245
- rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
246
- rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
247
- rsSeq = rsOptVar + reOptMod + rsOptJoin,
248
- rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
249
- rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
253
+ rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
254
+ rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
255
+ rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
256
+ reOptMod = rsModifier + '?',
257
+ rsOptVar = '[' + rsVarRange + ']?',
258
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
259
+ rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
260
+ rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
261
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
262
+ rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
263
+ rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
250
264
 
251
265
  /** Used to match apostrophes. */
252
266
  var reApos = RegExp(rsApos, 'g');
@@ -276,7 +290,7 @@
276
290
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
277
291
 
278
292
  /** Used to detect strings that need a more robust regexp to match words. */
279
- var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
293
+ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
280
294
 
281
295
  /** Used to assign default `context` object properties. */
282
296
  var contextProps = [
@@ -293,34 +307,34 @@
293
307
  /** Used to identify `toStringTag` values of typed arrays. */
294
308
  var typedArrayTags = {};
295
309
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
296
- typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
297
- typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
298
- typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
299
- typedArrayTags[uint32Tag] = true;
310
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
311
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
312
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
313
+ typedArrayTags[uint32Tag] = true;
300
314
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
301
- typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
302
- typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
303
- typedArrayTags[errorTag] = typedArrayTags[funcTag] =
304
- typedArrayTags[mapTag] = typedArrayTags[numberTag] =
305
- typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
306
- typedArrayTags[setTag] = typedArrayTags[stringTag] =
307
- typedArrayTags[weakMapTag] = false;
315
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
316
+ typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
317
+ typedArrayTags[errorTag] = typedArrayTags[funcTag] =
318
+ typedArrayTags[mapTag] = typedArrayTags[numberTag] =
319
+ typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
320
+ typedArrayTags[setTag] = typedArrayTags[stringTag] =
321
+ typedArrayTags[weakMapTag] = false;
308
322
 
309
323
  /** Used to identify `toStringTag` values supported by `_.clone`. */
310
324
  var cloneableTags = {};
311
325
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
312
- cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
313
- cloneableTags[boolTag] = cloneableTags[dateTag] =
314
- cloneableTags[float32Tag] = cloneableTags[float64Tag] =
315
- cloneableTags[int8Tag] = cloneableTags[int16Tag] =
316
- cloneableTags[int32Tag] = cloneableTags[mapTag] =
317
- cloneableTags[numberTag] = cloneableTags[objectTag] =
318
- cloneableTags[regexpTag] = cloneableTags[setTag] =
319
- cloneableTags[stringTag] = cloneableTags[symbolTag] =
320
- cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
321
- cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
326
+ cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
327
+ cloneableTags[boolTag] = cloneableTags[dateTag] =
328
+ cloneableTags[float32Tag] = cloneableTags[float64Tag] =
329
+ cloneableTags[int8Tag] = cloneableTags[int16Tag] =
330
+ cloneableTags[int32Tag] = cloneableTags[mapTag] =
331
+ cloneableTags[numberTag] = cloneableTags[objectTag] =
332
+ cloneableTags[regexpTag] = cloneableTags[setTag] =
333
+ cloneableTags[stringTag] = cloneableTags[symbolTag] =
334
+ cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
335
+ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
322
336
  cloneableTags[errorTag] = cloneableTags[funcTag] =
323
- cloneableTags[weakMapTag] = false;
337
+ cloneableTags[weakMapTag] = false;
324
338
 
325
339
  /** Used to map Latin Unicode letters to basic Latin letters. */
326
340
  var deburredLetters = {
@@ -410,7 +424,7 @@
410
424
 
411
425
  /** Built-in method references without a dependency on `root`. */
412
426
  var freeParseFloat = parseFloat,
413
- freeParseInt = parseInt;
427
+ freeParseInt = parseInt;
414
428
 
415
429
  /** Detect free variable `global` from Node.js. */
416
430
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
@@ -436,17 +450,25 @@
436
450
  /** Used to access faster Node.js helpers. */
437
451
  var nodeUtil = (function() {
438
452
  try {
453
+ // Use `util.types` for Node.js 10+.
454
+ var types = freeModule && freeModule.require && freeModule.require('util').types;
455
+
456
+ if (types) {
457
+ return types;
458
+ }
459
+
460
+ // Legacy `process.binding('util')` for Node.js < 10.
439
461
  return freeProcess && freeProcess.binding && freeProcess.binding('util');
440
462
  } catch (e) {}
441
463
  }());
442
464
 
443
465
  /* Node.js helper references. */
444
466
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
445
- nodeIsDate = nodeUtil && nodeUtil.isDate,
446
- nodeIsMap = nodeUtil && nodeUtil.isMap,
447
- nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
448
- nodeIsSet = nodeUtil && nodeUtil.isSet,
449
- nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
467
+ nodeIsDate = nodeUtil && nodeUtil.isDate,
468
+ nodeIsMap = nodeUtil && nodeUtil.isMap,
469
+ nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
470
+ nodeIsSet = nodeUtil && nodeUtil.isSet,
471
+ nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
450
472
 
451
473
  /*--------------------------------------------------------------------------*/
452
474
 
@@ -482,7 +504,7 @@
482
504
  */
483
505
  function arrayAggregator(array, setter, iteratee, accumulator) {
484
506
  var index = -1,
485
- length = array == null ? 0 : array.length;
507
+ length = array == null ? 0 : array.length;
486
508
 
487
509
  while (++index < length) {
488
510
  var value = array[index];
@@ -502,7 +524,7 @@
502
524
  */
503
525
  function arrayEach(array, iteratee) {
504
526
  var index = -1,
505
- length = array == null ? 0 : array.length;
527
+ length = array == null ? 0 : array.length;
506
528
 
507
529
  while (++index < length) {
508
530
  if (iteratee(array[index], index, array) === false) {
@@ -544,7 +566,7 @@
544
566
  */
545
567
  function arrayEvery(array, predicate) {
546
568
  var index = -1,
547
- length = array == null ? 0 : array.length;
569
+ length = array == null ? 0 : array.length;
548
570
 
549
571
  while (++index < length) {
550
572
  if (!predicate(array[index], index, array)) {
@@ -565,9 +587,9 @@
565
587
  */
566
588
  function arrayFilter(array, predicate) {
567
589
  var index = -1,
568
- length = array == null ? 0 : array.length,
569
- resIndex = 0,
570
- result = [];
590
+ length = array == null ? 0 : array.length,
591
+ resIndex = 0,
592
+ result = [];
571
593
 
572
594
  while (++index < length) {
573
595
  var value = array[index];
@@ -603,7 +625,7 @@
603
625
  */
604
626
  function arrayIncludesWith(array, value, comparator) {
605
627
  var index = -1,
606
- length = array == null ? 0 : array.length;
628
+ length = array == null ? 0 : array.length;
607
629
 
608
630
  while (++index < length) {
609
631
  if (comparator(value, array[index])) {
@@ -624,8 +646,8 @@
624
646
  */
625
647
  function arrayMap(array, iteratee) {
626
648
  var index = -1,
627
- length = array == null ? 0 : array.length,
628
- result = Array(length);
649
+ length = array == null ? 0 : array.length,
650
+ result = Array(length);
629
651
 
630
652
  while (++index < length) {
631
653
  result[index] = iteratee(array[index], index, array);
@@ -643,8 +665,8 @@
643
665
  */
644
666
  function arrayPush(array, values) {
645
667
  var index = -1,
646
- length = values.length,
647
- offset = array.length;
668
+ length = values.length,
669
+ offset = array.length;
648
670
 
649
671
  while (++index < length) {
650
672
  array[offset + index] = values[index];
@@ -666,7 +688,7 @@
666
688
  */
667
689
  function arrayReduce(array, iteratee, accumulator, initAccum) {
668
690
  var index = -1,
669
- length = array == null ? 0 : array.length;
691
+ length = array == null ? 0 : array.length;
670
692
 
671
693
  if (initAccum && length) {
672
694
  accumulator = array[++index];
@@ -712,7 +734,7 @@
712
734
  */
713
735
  function arraySome(array, predicate) {
714
736
  var index = -1,
715
- length = array == null ? 0 : array.length;
737
+ length = array == null ? 0 : array.length;
716
738
 
717
739
  while (++index < length) {
718
740
  if (predicate(array[index], index, array)) {
@@ -788,7 +810,7 @@
788
810
  */
789
811
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
790
812
  var length = array.length,
791
- index = fromIndex + (fromRight ? 1 : -1);
813
+ index = fromIndex + (fromRight ? 1 : -1);
792
814
 
793
815
  while ((fromRight ? index-- : ++index < length)) {
794
816
  if (predicate(array[index], index, array)) {
@@ -825,7 +847,7 @@
825
847
  */
826
848
  function baseIndexOfWith(array, value, fromIndex, comparator) {
827
849
  var index = fromIndex - 1,
828
- length = array.length;
850
+ length = array.length;
829
851
 
830
852
  while (++index < length) {
831
853
  if (comparator(array[index], value)) {
@@ -939,8 +961,8 @@
939
961
  */
940
962
  function baseSum(array, iteratee) {
941
963
  var result,
942
- index = -1,
943
- length = array.length;
964
+ index = -1,
965
+ length = array.length;
944
966
 
945
967
  while (++index < length) {
946
968
  var current = iteratee(array[index]);
@@ -962,7 +984,7 @@
962
984
  */
963
985
  function baseTimes(n, iteratee) {
964
986
  var index = -1,
965
- result = Array(n);
987
+ result = Array(n);
966
988
 
967
989
  while (++index < n) {
968
990
  result[index] = iteratee(index);
@@ -985,6 +1007,19 @@
985
1007
  });
986
1008
  }
987
1009
 
1010
+ /**
1011
+ * The base implementation of `_.trim`.
1012
+ *
1013
+ * @private
1014
+ * @param {string} string The string to trim.
1015
+ * @returns {string} Returns the trimmed string.
1016
+ */
1017
+ function baseTrim(string) {
1018
+ return string
1019
+ ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
1020
+ : string;
1021
+ }
1022
+
988
1023
  /**
989
1024
  * The base implementation of `_.unary` without support for storing metadata.
990
1025
  *
@@ -1037,7 +1072,7 @@
1037
1072
  */
1038
1073
  function charsStartIndex(strSymbols, chrSymbols) {
1039
1074
  var index = -1,
1040
- length = strSymbols.length;
1075
+ length = strSymbols.length;
1041
1076
 
1042
1077
  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
1043
1078
  return index;
@@ -1069,7 +1104,7 @@
1069
1104
  */
1070
1105
  function countHolders(array, placeholder) {
1071
1106
  var length = array.length,
1072
- result = 0;
1107
+ result = 0;
1073
1108
 
1074
1109
  while (length--) {
1075
1110
  if (array[length] === placeholder) {
@@ -1152,7 +1187,7 @@
1152
1187
  */
1153
1188
  function iteratorToArray(iterator) {
1154
1189
  var data,
1155
- result = [];
1190
+ result = [];
1156
1191
 
1157
1192
  while (!(data = iterator.next()).done) {
1158
1193
  result.push(data.value);
@@ -1169,7 +1204,7 @@
1169
1204
  */
1170
1205
  function mapToArray(map) {
1171
1206
  var index = -1,
1172
- result = Array(map.size);
1207
+ result = Array(map.size);
1173
1208
 
1174
1209
  map.forEach(function(value, key) {
1175
1210
  result[++index] = [key, value];
@@ -1202,9 +1237,9 @@
1202
1237
  */
1203
1238
  function replaceHolders(array, placeholder) {
1204
1239
  var index = -1,
1205
- length = array.length,
1206
- resIndex = 0,
1207
- result = [];
1240
+ length = array.length,
1241
+ resIndex = 0,
1242
+ result = [];
1208
1243
 
1209
1244
  while (++index < length) {
1210
1245
  var value = array[index];
@@ -1216,20 +1251,6 @@
1216
1251
  return result;
1217
1252
  }
1218
1253
 
1219
- /**
1220
- * Gets the value at `key`, unless `key` is "__proto__".
1221
- *
1222
- * @private
1223
- * @param {Object} object The object to query.
1224
- * @param {string} key The key of the property to get.
1225
- * @returns {*} Returns the property value.
1226
- */
1227
- function safeGet(object, key) {
1228
- return key == '__proto__'
1229
- ? undefined
1230
- : object[key];
1231
- }
1232
-
1233
1254
  /**
1234
1255
  * Converts `set` to an array of its values.
1235
1256
  *
@@ -1239,7 +1260,7 @@
1239
1260
  */
1240
1261
  function setToArray(set) {
1241
1262
  var index = -1,
1242
- result = Array(set.size);
1263
+ result = Array(set.size);
1243
1264
 
1244
1265
  set.forEach(function(value) {
1245
1266
  result[++index] = value;
@@ -1256,7 +1277,7 @@
1256
1277
  */
1257
1278
  function setToPairs(set) {
1258
1279
  var index = -1,
1259
- result = Array(set.size);
1280
+ result = Array(set.size);
1260
1281
 
1261
1282
  set.forEach(function(value) {
1262
1283
  result[++index] = [value, value];
@@ -1276,7 +1297,7 @@
1276
1297
  */
1277
1298
  function strictIndexOf(array, value, fromIndex) {
1278
1299
  var index = fromIndex - 1,
1279
- length = array.length;
1300
+ length = array.length;
1280
1301
 
1281
1302
  while (++index < length) {
1282
1303
  if (array[index] === value) {
@@ -1332,6 +1353,21 @@
1332
1353
  : asciiToArray(string);
1333
1354
  }
1334
1355
 
1356
+ /**
1357
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
1358
+ * character of `string`.
1359
+ *
1360
+ * @private
1361
+ * @param {string} string The string to inspect.
1362
+ * @returns {number} Returns the index of the last non-whitespace character.
1363
+ */
1364
+ function trimmedEndIndex(string) {
1365
+ var index = string.length;
1366
+
1367
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
1368
+ return index;
1369
+ }
1370
+
1335
1371
  /**
1336
1372
  * Used by `_.unescape` to convert HTML entities to characters.
1337
1373
  *
@@ -1414,19 +1450,19 @@
1414
1450
 
1415
1451
  /** Built-in constructor references. */
1416
1452
  var Array = context.Array,
1417
- Date = context.Date,
1418
- Error = context.Error,
1419
- Function = context.Function,
1420
- Math = context.Math,
1421
- Object = context.Object,
1422
- RegExp = context.RegExp,
1423
- String = context.String,
1424
- TypeError = context.TypeError;
1453
+ Date = context.Date,
1454
+ Error = context.Error,
1455
+ Function = context.Function,
1456
+ Math = context.Math,
1457
+ Object = context.Object,
1458
+ RegExp = context.RegExp,
1459
+ String = context.String,
1460
+ TypeError = context.TypeError;
1425
1461
 
1426
1462
  /** Used for built-in method references. */
1427
1463
  var arrayProto = Array.prototype,
1428
- funcProto = Function.prototype,
1429
- objectProto = Object.prototype;
1464
+ funcProto = Function.prototype,
1465
+ objectProto = Object.prototype;
1430
1466
 
1431
1467
  /** Used to detect overreaching core-js shims. */
1432
1468
  var coreJsData = context['__core-js_shared__'];
@@ -1462,21 +1498,21 @@
1462
1498
  /** Used to detect if a method is native. */
1463
1499
  var reIsNative = RegExp('^' +
1464
1500
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
1465
- .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
1501
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
1466
1502
  );
1467
1503
 
1468
1504
  /** Built-in value references. */
1469
1505
  var Buffer = moduleExports ? context.Buffer : undefined,
1470
- Symbol = context.Symbol,
1471
- Uint8Array = context.Uint8Array,
1472
- allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
1473
- getPrototype = overArg(Object.getPrototypeOf, Object),
1474
- objectCreate = Object.create,
1475
- propertyIsEnumerable = objectProto.propertyIsEnumerable,
1476
- splice = arrayProto.splice,
1477
- spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
1478
- symIterator = Symbol ? Symbol.iterator : undefined,
1479
- symToStringTag = Symbol ? Symbol.toStringTag : undefined;
1506
+ Symbol = context.Symbol,
1507
+ Uint8Array = context.Uint8Array,
1508
+ allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
1509
+ getPrototype = overArg(Object.getPrototypeOf, Object),
1510
+ objectCreate = Object.create,
1511
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
1512
+ splice = arrayProto.splice,
1513
+ spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
1514
+ symIterator = Symbol ? Symbol.iterator : undefined,
1515
+ symToStringTag = Symbol ? Symbol.toStringTag : undefined;
1480
1516
 
1481
1517
  var defineProperty = (function() {
1482
1518
  try {
@@ -1488,31 +1524,31 @@
1488
1524
 
1489
1525
  /** Mocked built-ins. */
1490
1526
  var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
1491
- ctxNow = Date && Date.now !== root.Date.now && Date.now,
1492
- ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
1527
+ ctxNow = Date && Date.now !== root.Date.now && Date.now,
1528
+ ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
1493
1529
 
1494
1530
  /* Built-in method references for those with the same name as other `lodash` methods. */
1495
1531
  var nativeCeil = Math.ceil,
1496
- nativeFloor = Math.floor,
1497
- nativeGetSymbols = Object.getOwnPropertySymbols,
1498
- nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
1499
- nativeIsFinite = context.isFinite,
1500
- nativeJoin = arrayProto.join,
1501
- nativeKeys = overArg(Object.keys, Object),
1502
- nativeMax = Math.max,
1503
- nativeMin = Math.min,
1504
- nativeNow = Date.now,
1505
- nativeParseInt = context.parseInt,
1506
- nativeRandom = Math.random,
1507
- nativeReverse = arrayProto.reverse;
1532
+ nativeFloor = Math.floor,
1533
+ nativeGetSymbols = Object.getOwnPropertySymbols,
1534
+ nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
1535
+ nativeIsFinite = context.isFinite,
1536
+ nativeJoin = arrayProto.join,
1537
+ nativeKeys = overArg(Object.keys, Object),
1538
+ nativeMax = Math.max,
1539
+ nativeMin = Math.min,
1540
+ nativeNow = Date.now,
1541
+ nativeParseInt = context.parseInt,
1542
+ nativeRandom = Math.random,
1543
+ nativeReverse = arrayProto.reverse;
1508
1544
 
1509
1545
  /* Built-in method references that are verified to be native. */
1510
1546
  var DataView = getNative(context, 'DataView'),
1511
- Map = getNative(context, 'Map'),
1512
- Promise = getNative(context, 'Promise'),
1513
- Set = getNative(context, 'Set'),
1514
- WeakMap = getNative(context, 'WeakMap'),
1515
- nativeCreate = getNative(Object, 'create');
1547
+ Map = getNative(context, 'Map'),
1548
+ Promise = getNative(context, 'Promise'),
1549
+ Set = getNative(context, 'Set'),
1550
+ WeakMap = getNative(context, 'WeakMap'),
1551
+ nativeCreate = getNative(Object, 'create');
1516
1552
 
1517
1553
  /** Used to store function metadata. */
1518
1554
  var metaMap = WeakMap && new WeakMap;
@@ -1522,15 +1558,15 @@
1522
1558
 
1523
1559
  /** Used to detect maps, sets, and weakmaps. */
1524
1560
  var dataViewCtorString = toSource(DataView),
1525
- mapCtorString = toSource(Map),
1526
- promiseCtorString = toSource(Promise),
1527
- setCtorString = toSource(Set),
1528
- weakMapCtorString = toSource(WeakMap);
1561
+ mapCtorString = toSource(Map),
1562
+ promiseCtorString = toSource(Promise),
1563
+ setCtorString = toSource(Set),
1564
+ weakMapCtorString = toSource(WeakMap);
1529
1565
 
1530
1566
  /** Used to convert symbols to primitives and strings. */
1531
1567
  var symbolProto = Symbol ? Symbol.prototype : undefined,
1532
- symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
1533
- symbolToString = symbolProto ? symbolProto.toString : undefined;
1568
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
1569
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
1534
1570
 
1535
1571
  /*------------------------------------------------------------------------*/
1536
1572
 
@@ -1847,19 +1883,19 @@
1847
1883
  */
1848
1884
  function lazyValue() {
1849
1885
  var array = this.__wrapped__.value(),
1850
- dir = this.__dir__,
1851
- isArr = isArray(array),
1852
- isRight = dir < 0,
1853
- arrLength = isArr ? array.length : 0,
1854
- view = getView(0, arrLength, this.__views__),
1855
- start = view.start,
1856
- end = view.end,
1857
- length = end - start,
1858
- index = isRight ? end : (start - 1),
1859
- iteratees = this.__iteratees__,
1860
- iterLength = iteratees.length,
1861
- resIndex = 0,
1862
- takeCount = nativeMin(length, this.__takeCount__);
1886
+ dir = this.__dir__,
1887
+ isArr = isArray(array),
1888
+ isRight = dir < 0,
1889
+ arrLength = isArr ? array.length : 0,
1890
+ view = getView(0, arrLength, this.__views__),
1891
+ start = view.start,
1892
+ end = view.end,
1893
+ length = end - start,
1894
+ index = isRight ? end : (start - 1),
1895
+ iteratees = this.__iteratees__,
1896
+ iterLength = iteratees.length,
1897
+ resIndex = 0,
1898
+ takeCount = nativeMin(length, this.__takeCount__);
1863
1899
 
1864
1900
  if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
1865
1901
  return baseWrapperValue(array, this.__actions__);
@@ -1867,30 +1903,30 @@
1867
1903
  var result = [];
1868
1904
 
1869
1905
  outer:
1870
- while (length-- && resIndex < takeCount) {
1871
- index += dir;
1906
+ while (length-- && resIndex < takeCount) {
1907
+ index += dir;
1872
1908
 
1873
- var iterIndex = -1,
1909
+ var iterIndex = -1,
1874
1910
  value = array[index];
1875
1911
 
1876
- while (++iterIndex < iterLength) {
1877
- var data = iteratees[iterIndex],
1912
+ while (++iterIndex < iterLength) {
1913
+ var data = iteratees[iterIndex],
1878
1914
  iteratee = data.iteratee,
1879
1915
  type = data.type,
1880
1916
  computed = iteratee(value);
1881
1917
 
1882
- if (type == LAZY_MAP_FLAG) {
1883
- value = computed;
1884
- } else if (!computed) {
1885
- if (type == LAZY_FILTER_FLAG) {
1886
- continue outer;
1887
- } else {
1888
- break outer;
1918
+ if (type == LAZY_MAP_FLAG) {
1919
+ value = computed;
1920
+ } else if (!computed) {
1921
+ if (type == LAZY_FILTER_FLAG) {
1922
+ continue outer;
1923
+ } else {
1924
+ break outer;
1925
+ }
1889
1926
  }
1890
1927
  }
1928
+ result[resIndex++] = value;
1891
1929
  }
1892
- result[resIndex++] = value;
1893
- }
1894
1930
  return result;
1895
1931
  }
1896
1932
 
@@ -1909,7 +1945,7 @@
1909
1945
  */
1910
1946
  function Hash(entries) {
1911
1947
  var index = -1,
1912
- length = entries == null ? 0 : entries.length;
1948
+ length = entries == null ? 0 : entries.length;
1913
1949
 
1914
1950
  this.clear();
1915
1951
  while (++index < length) {
@@ -2013,7 +2049,7 @@
2013
2049
  */
2014
2050
  function ListCache(entries) {
2015
2051
  var index = -1,
2016
- length = entries == null ? 0 : entries.length;
2052
+ length = entries == null ? 0 : entries.length;
2017
2053
 
2018
2054
  this.clear();
2019
2055
  while (++index < length) {
@@ -2045,7 +2081,7 @@
2045
2081
  */
2046
2082
  function listCacheDelete(key) {
2047
2083
  var data = this.__data__,
2048
- index = assocIndexOf(data, key);
2084
+ index = assocIndexOf(data, key);
2049
2085
 
2050
2086
  if (index < 0) {
2051
2087
  return false;
@@ -2071,7 +2107,7 @@
2071
2107
  */
2072
2108
  function listCacheGet(key) {
2073
2109
  var data = this.__data__,
2074
- index = assocIndexOf(data, key);
2110
+ index = assocIndexOf(data, key);
2075
2111
 
2076
2112
  return index < 0 ? undefined : data[index][1];
2077
2113
  }
@@ -2101,7 +2137,7 @@
2101
2137
  */
2102
2138
  function listCacheSet(key, value) {
2103
2139
  var data = this.__data__,
2104
- index = assocIndexOf(data, key);
2140
+ index = assocIndexOf(data, key);
2105
2141
 
2106
2142
  if (index < 0) {
2107
2143
  ++this.size;
@@ -2130,7 +2166,7 @@
2130
2166
  */
2131
2167
  function MapCache(entries) {
2132
2168
  var index = -1,
2133
- length = entries == null ? 0 : entries.length;
2169
+ length = entries == null ? 0 : entries.length;
2134
2170
 
2135
2171
  this.clear();
2136
2172
  while (++index < length) {
@@ -2208,7 +2244,7 @@
2208
2244
  */
2209
2245
  function mapCacheSet(key, value) {
2210
2246
  var data = getMapData(this, key),
2211
- size = data.size;
2247
+ size = data.size;
2212
2248
 
2213
2249
  data.set(key, value);
2214
2250
  this.size += data.size == size ? 0 : 1;
@@ -2234,7 +2270,7 @@
2234
2270
  */
2235
2271
  function SetCache(values) {
2236
2272
  var index = -1,
2237
- length = values == null ? 0 : values.length;
2273
+ length = values == null ? 0 : values.length;
2238
2274
 
2239
2275
  this.__data__ = new MapCache;
2240
2276
  while (++index < length) {
@@ -2311,7 +2347,7 @@
2311
2347
  */
2312
2348
  function stackDelete(key) {
2313
2349
  var data = this.__data__,
2314
- result = data['delete'](key);
2350
+ result = data['delete'](key);
2315
2351
 
2316
2352
  this.size = data.size;
2317
2353
  return result;
@@ -2388,25 +2424,25 @@
2388
2424
  */
2389
2425
  function arrayLikeKeys(value, inherited) {
2390
2426
  var isArr = isArray(value),
2391
- isArg = !isArr && isArguments(value),
2392
- isBuff = !isArr && !isArg && isBuffer(value),
2393
- isType = !isArr && !isArg && !isBuff && isTypedArray(value),
2394
- skipIndexes = isArr || isArg || isBuff || isType,
2395
- result = skipIndexes ? baseTimes(value.length, String) : [],
2396
- length = result.length;
2427
+ isArg = !isArr && isArguments(value),
2428
+ isBuff = !isArr && !isArg && isBuffer(value),
2429
+ isType = !isArr && !isArg && !isBuff && isTypedArray(value),
2430
+ skipIndexes = isArr || isArg || isBuff || isType,
2431
+ result = skipIndexes ? baseTimes(value.length, String) : [],
2432
+ length = result.length;
2397
2433
 
2398
2434
  for (var key in value) {
2399
2435
  if ((inherited || hasOwnProperty.call(value, key)) &&
2400
- !(skipIndexes && (
2401
- // Safari 9 has enumerable `arguments.length` in strict mode.
2402
- key == 'length' ||
2403
- // Node.js 0.10 has enumerable non-index properties on buffers.
2404
- (isBuff && (key == 'offset' || key == 'parent')) ||
2405
- // PhantomJS 2 has enumerable non-index properties on typed arrays.
2406
- (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
2407
- // Skip index properties.
2408
- isIndex(key, length)
2409
- ))) {
2436
+ !(skipIndexes && (
2437
+ // Safari 9 has enumerable `arguments.length` in strict mode.
2438
+ key == 'length' ||
2439
+ // Node.js 0.10 has enumerable non-index properties on buffers.
2440
+ (isBuff && (key == 'offset' || key == 'parent')) ||
2441
+ // PhantomJS 2 has enumerable non-index properties on typed arrays.
2442
+ (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
2443
+ // Skip index properties.
2444
+ isIndex(key, length)
2445
+ ))) {
2410
2446
  result.push(key);
2411
2447
  }
2412
2448
  }
@@ -2459,7 +2495,7 @@
2459
2495
  */
2460
2496
  function assignMergeValue(object, key, value) {
2461
2497
  if ((value !== undefined && !eq(object[key], value)) ||
2462
- (value === undefined && !(key in object))) {
2498
+ (value === undefined && !(key in object))) {
2463
2499
  baseAssignValue(object, key, value);
2464
2500
  }
2465
2501
  }
@@ -2477,7 +2513,7 @@
2477
2513
  function assignValue(object, key, value) {
2478
2514
  var objValue = object[key];
2479
2515
  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
2480
- (value === undefined && !(key in object))) {
2516
+ (value === undefined && !(key in object))) {
2481
2517
  baseAssignValue(object, key, value);
2482
2518
  }
2483
2519
  }
@@ -2576,9 +2612,9 @@
2576
2612
  */
2577
2613
  function baseAt(object, paths) {
2578
2614
  var index = -1,
2579
- length = paths.length,
2580
- result = Array(length),
2581
- skip = object == null;
2615
+ length = paths.length,
2616
+ result = Array(length),
2617
+ skip = object == null;
2582
2618
 
2583
2619
  while (++index < length) {
2584
2620
  result[index] = skip ? undefined : get(object, paths[index]);
@@ -2625,9 +2661,9 @@
2625
2661
  */
2626
2662
  function baseClone(value, bitmask, customizer, key, object, stack) {
2627
2663
  var result,
2628
- isDeep = bitmask & CLONE_DEEP_FLAG,
2629
- isFlat = bitmask & CLONE_FLAT_FLAG,
2630
- isFull = bitmask & CLONE_SYMBOLS_FLAG;
2664
+ isDeep = bitmask & CLONE_DEEP_FLAG,
2665
+ isFlat = bitmask & CLONE_FLAT_FLAG,
2666
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
2631
2667
 
2632
2668
  if (customizer) {
2633
2669
  result = object ? customizer(value, key, object, stack) : customizer(value);
@@ -2646,7 +2682,7 @@
2646
2682
  }
2647
2683
  } else {
2648
2684
  var tag = getTag(value),
2649
- isFunc = tag == funcTag || tag == genTag;
2685
+ isFunc = tag == funcTag || tag == genTag;
2650
2686
 
2651
2687
  if (isBuffer(value)) {
2652
2688
  return cloneBuffer(value, isDeep);
@@ -2677,16 +2713,10 @@
2677
2713
  value.forEach(function(subValue) {
2678
2714
  result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
2679
2715
  });
2680
-
2681
- return result;
2682
- }
2683
-
2684
- if (isMap(value)) {
2716
+ } else if (isMap(value)) {
2685
2717
  value.forEach(function(subValue, key) {
2686
2718
  result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
2687
2719
  });
2688
-
2689
- return result;
2690
2720
  }
2691
2721
 
2692
2722
  var keysFunc = isFull
@@ -2735,8 +2765,8 @@
2735
2765
  object = Object(object);
2736
2766
  while (length--) {
2737
2767
  var key = props[length],
2738
- predicate = source[key],
2739
- value = object[key];
2768
+ predicate = source[key],
2769
+ value = object[key];
2740
2770
 
2741
2771
  if ((value === undefined && !(key in object)) || !predicate(value)) {
2742
2772
  return false;
@@ -2775,11 +2805,11 @@
2775
2805
  */
2776
2806
  function baseDifference(array, values, iteratee, comparator) {
2777
2807
  var index = -1,
2778
- includes = arrayIncludes,
2779
- isCommon = true,
2780
- length = array.length,
2781
- result = [],
2782
- valuesLength = values.length;
2808
+ includes = arrayIncludes,
2809
+ isCommon = true,
2810
+ length = array.length,
2811
+ result = [],
2812
+ valuesLength = values.length;
2783
2813
 
2784
2814
  if (!length) {
2785
2815
  return result;
@@ -2797,24 +2827,24 @@
2797
2827
  values = new SetCache(values);
2798
2828
  }
2799
2829
  outer:
2800
- while (++index < length) {
2801
- var value = array[index],
2830
+ while (++index < length) {
2831
+ var value = array[index],
2802
2832
  computed = iteratee == null ? value : iteratee(value);
2803
2833
 
2804
- value = (comparator || value !== 0) ? value : 0;
2805
- if (isCommon && computed === computed) {
2806
- var valuesIndex = valuesLength;
2807
- while (valuesIndex--) {
2808
- if (values[valuesIndex] === computed) {
2809
- continue outer;
2834
+ value = (comparator || value !== 0) ? value : 0;
2835
+ if (isCommon && computed === computed) {
2836
+ var valuesIndex = valuesLength;
2837
+ while (valuesIndex--) {
2838
+ if (values[valuesIndex] === computed) {
2839
+ continue outer;
2840
+ }
2810
2841
  }
2842
+ result.push(value);
2843
+ }
2844
+ else if (!includes(values, computed, comparator)) {
2845
+ result.push(value);
2811
2846
  }
2812
- result.push(value);
2813
- }
2814
- else if (!includes(values, computed, comparator)) {
2815
- result.push(value);
2816
2847
  }
2817
- }
2818
2848
  return result;
2819
2849
  }
2820
2850
 
@@ -2868,18 +2898,18 @@
2868
2898
  */
2869
2899
  function baseExtremum(array, iteratee, comparator) {
2870
2900
  var index = -1,
2871
- length = array.length;
2901
+ length = array.length;
2872
2902
 
2873
2903
  while (++index < length) {
2874
2904
  var value = array[index],
2875
- current = iteratee(value);
2905
+ current = iteratee(value);
2876
2906
 
2877
2907
  if (current != null && (computed === undefined
2878
- ? (current === current && !isSymbol(current))
2879
- : comparator(current, computed)
2880
- )) {
2908
+ ? (current === current && !isSymbol(current))
2909
+ : comparator(current, computed)
2910
+ )) {
2881
2911
  var computed = current,
2882
- result = value;
2912
+ result = value;
2883
2913
  }
2884
2914
  }
2885
2915
  return result;
@@ -2944,7 +2974,7 @@
2944
2974
  */
2945
2975
  function baseFlatten(array, depth, predicate, isStrict, result) {
2946
2976
  var index = -1,
2947
- length = array.length;
2977
+ length = array.length;
2948
2978
 
2949
2979
  predicate || (predicate = isFlattenable);
2950
2980
  result || (result = []);
@@ -3041,7 +3071,7 @@
3041
3071
  path = castPath(path, object);
3042
3072
 
3043
3073
  var index = 0,
3044
- length = path.length;
3074
+ length = path.length;
3045
3075
 
3046
3076
  while (object != null && index < length) {
3047
3077
  object = object[toKey(path[index++])];
@@ -3143,12 +3173,12 @@
3143
3173
  */
3144
3174
  function baseIntersection(arrays, iteratee, comparator) {
3145
3175
  var includes = comparator ? arrayIncludesWith : arrayIncludes,
3146
- length = arrays[0].length,
3147
- othLength = arrays.length,
3148
- othIndex = othLength,
3149
- caches = Array(othLength),
3150
- maxLength = Infinity,
3151
- result = [];
3176
+ length = arrays[0].length,
3177
+ othLength = arrays.length,
3178
+ othIndex = othLength,
3179
+ caches = Array(othLength),
3180
+ maxLength = Infinity,
3181
+ result = [];
3152
3182
 
3153
3183
  while (othIndex--) {
3154
3184
  var array = arrays[othIndex];
@@ -3163,34 +3193,34 @@
3163
3193
  array = arrays[0];
3164
3194
 
3165
3195
  var index = -1,
3166
- seen = caches[0];
3196
+ seen = caches[0];
3167
3197
 
3168
3198
  outer:
3169
- while (++index < length && result.length < maxLength) {
3170
- var value = array[index],
3199
+ while (++index < length && result.length < maxLength) {
3200
+ var value = array[index],
3171
3201
  computed = iteratee ? iteratee(value) : value;
3172
3202
 
3173
- value = (comparator || value !== 0) ? value : 0;
3174
- if (!(seen
3203
+ value = (comparator || value !== 0) ? value : 0;
3204
+ if (!(seen
3175
3205
  ? cacheHas(seen, computed)
3176
3206
  : includes(result, computed, comparator)
3177
- )) {
3178
- othIndex = othLength;
3179
- while (--othIndex) {
3180
- var cache = caches[othIndex];
3181
- if (!(cache
3182
- ? cacheHas(cache, computed)
3183
- : includes(arrays[othIndex], computed, comparator))
3184
- ) {
3185
- continue outer;
3207
+ )) {
3208
+ othIndex = othLength;
3209
+ while (--othIndex) {
3210
+ var cache = caches[othIndex];
3211
+ if (!(cache
3212
+ ? cacheHas(cache, computed)
3213
+ : includes(arrays[othIndex], computed, comparator))
3214
+ ) {
3215
+ continue outer;
3216
+ }
3186
3217
  }
3218
+ if (seen) {
3219
+ seen.push(computed);
3220
+ }
3221
+ result.push(value);
3187
3222
  }
3188
- if (seen) {
3189
- seen.push(computed);
3190
- }
3191
- result.push(value);
3192
3223
  }
3193
- }
3194
3224
  return result;
3195
3225
  }
3196
3226
 
@@ -3302,16 +3332,16 @@
3302
3332
  */
3303
3333
  function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
3304
3334
  var objIsArr = isArray(object),
3305
- othIsArr = isArray(other),
3306
- objTag = objIsArr ? arrayTag : getTag(object),
3307
- othTag = othIsArr ? arrayTag : getTag(other);
3335
+ othIsArr = isArray(other),
3336
+ objTag = objIsArr ? arrayTag : getTag(object),
3337
+ othTag = othIsArr ? arrayTag : getTag(other);
3308
3338
 
3309
3339
  objTag = objTag == argsTag ? objectTag : objTag;
3310
3340
  othTag = othTag == argsTag ? objectTag : othTag;
3311
3341
 
3312
3342
  var objIsObj = objTag == objectTag,
3313
- othIsObj = othTag == objectTag,
3314
- isSameTag = objTag == othTag;
3343
+ othIsObj = othTag == objectTag,
3344
+ isSameTag = objTag == othTag;
3315
3345
 
3316
3346
  if (isSameTag && isBuffer(object)) {
3317
3347
  if (!isBuffer(other)) {
@@ -3328,11 +3358,11 @@
3328
3358
  }
3329
3359
  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
3330
3360
  var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
3331
- othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
3361
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
3332
3362
 
3333
3363
  if (objIsWrapped || othIsWrapped) {
3334
3364
  var objUnwrapped = objIsWrapped ? object.value() : object,
3335
- othUnwrapped = othIsWrapped ? other.value() : other;
3365
+ othUnwrapped = othIsWrapped ? other.value() : other;
3336
3366
 
3337
3367
  stack || (stack = new Stack);
3338
3368
  return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
@@ -3368,8 +3398,8 @@
3368
3398
  */
3369
3399
  function baseIsMatch(object, source, matchData, customizer) {
3370
3400
  var index = matchData.length,
3371
- length = index,
3372
- noCustomizer = !customizer;
3401
+ length = index,
3402
+ noCustomizer = !customizer;
3373
3403
 
3374
3404
  if (object == null) {
3375
3405
  return !length;
@@ -3378,17 +3408,17 @@
3378
3408
  while (index--) {
3379
3409
  var data = matchData[index];
3380
3410
  if ((noCustomizer && data[2])
3381
- ? data[1] !== object[data[0]]
3382
- : !(data[0] in object)
3383
- ) {
3411
+ ? data[1] !== object[data[0]]
3412
+ : !(data[0] in object)
3413
+ ) {
3384
3414
  return false;
3385
3415
  }
3386
3416
  }
3387
3417
  while (++index < length) {
3388
3418
  data = matchData[index];
3389
3419
  var key = data[0],
3390
- objValue = object[key],
3391
- srcValue = data[1];
3420
+ objValue = object[key],
3421
+ srcValue = data[1];
3392
3422
 
3393
3423
  if (noCustomizer && data[2]) {
3394
3424
  if (objValue === undefined && !(key in object)) {
@@ -3400,9 +3430,9 @@
3400
3430
  var result = customizer(objValue, srcValue, key, object, source, stack);
3401
3431
  }
3402
3432
  if (!(result === undefined
3403
- ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
3404
- : result
3405
- )) {
3433
+ ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
3434
+ : result
3435
+ )) {
3406
3436
  return false;
3407
3437
  }
3408
3438
  }
@@ -3516,7 +3546,7 @@
3516
3546
  return nativeKeysIn(object);
3517
3547
  }
3518
3548
  var isProto = isPrototype(object),
3519
- result = [];
3549
+ result = [];
3520
3550
 
3521
3551
  for (var key in object) {
3522
3552
  if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
@@ -3549,7 +3579,7 @@
3549
3579
  */
3550
3580
  function baseMap(collection, iteratee) {
3551
3581
  var index = -1,
3552
- result = isArrayLike(collection) ? Array(collection.length) : [];
3582
+ result = isArrayLike(collection) ? Array(collection.length) : [];
3553
3583
 
3554
3584
  baseEach(collection, function(value, key, collection) {
3555
3585
  result[++index] = iteratee(value, key, collection);
@@ -3610,8 +3640,8 @@
3610
3640
  return;
3611
3641
  }
3612
3642
  baseFor(source, function(srcValue, key) {
3643
+ stack || (stack = new Stack);
3613
3644
  if (isObject(srcValue)) {
3614
- stack || (stack = new Stack);
3615
3645
  baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
3616
3646
  }
3617
3647
  else {
@@ -3644,8 +3674,8 @@
3644
3674
  */
3645
3675
  function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
3646
3676
  var objValue = safeGet(object, key),
3647
- srcValue = safeGet(source, key),
3648
- stacked = stack.get(srcValue);
3677
+ srcValue = safeGet(source, key),
3678
+ stacked = stack.get(srcValue);
3649
3679
 
3650
3680
  if (stacked) {
3651
3681
  assignMergeValue(object, key, stacked);
@@ -3659,8 +3689,8 @@
3659
3689
 
3660
3690
  if (isCommon) {
3661
3691
  var isArr = isArray(srcValue),
3662
- isBuff = !isArr && isBuffer(srcValue),
3663
- isTyped = !isArr && !isBuff && isTypedArray(srcValue);
3692
+ isBuff = !isArr && isBuffer(srcValue),
3693
+ isTyped = !isArr && !isBuff && isTypedArray(srcValue);
3664
3694
 
3665
3695
  newValue = srcValue;
3666
3696
  if (isArr || isBuff || isTyped) {
@@ -3687,7 +3717,7 @@
3687
3717
  if (isArguments(objValue)) {
3688
3718
  newValue = toPlainObject(objValue);
3689
3719
  }
3690
- else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
3720
+ else if (!isObject(objValue) || isFunction(objValue)) {
3691
3721
  newValue = initCloneObject(srcValue);
3692
3722
  }
3693
3723
  }
@@ -3731,8 +3761,21 @@
3731
3761
  * @returns {Array} Returns the new sorted array.
3732
3762
  */
3733
3763
  function baseOrderBy(collection, iteratees, orders) {
3764
+ if (iteratees.length) {
3765
+ iteratees = arrayMap(iteratees, function(iteratee) {
3766
+ if (isArray(iteratee)) {
3767
+ return function(value) {
3768
+ return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
3769
+ }
3770
+ }
3771
+ return iteratee;
3772
+ });
3773
+ } else {
3774
+ iteratees = [identity];
3775
+ }
3776
+
3734
3777
  var index = -1;
3735
- iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));
3778
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
3736
3779
 
3737
3780
  var result = baseMap(collection, function(value, key, collection) {
3738
3781
  var criteria = arrayMap(iteratees, function(iteratee) {
@@ -3772,12 +3815,12 @@
3772
3815
  */
3773
3816
  function basePickBy(object, paths, predicate) {
3774
3817
  var index = -1,
3775
- length = paths.length,
3776
- result = {};
3818
+ length = paths.length,
3819
+ result = {};
3777
3820
 
3778
3821
  while (++index < length) {
3779
3822
  var path = paths[index],
3780
- value = baseGet(object, path);
3823
+ value = baseGet(object, path);
3781
3824
 
3782
3825
  if (predicate(value, path)) {
3783
3826
  baseSet(result, castPath(path, object), value);
@@ -3812,9 +3855,9 @@
3812
3855
  */
3813
3856
  function basePullAll(array, values, iteratee, comparator) {
3814
3857
  var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
3815
- index = -1,
3816
- length = values.length,
3817
- seen = array;
3858
+ index = -1,
3859
+ length = values.length,
3860
+ seen = array;
3818
3861
 
3819
3862
  if (array === values) {
3820
3863
  values = copyArray(values);
@@ -3824,8 +3867,8 @@
3824
3867
  }
3825
3868
  while (++index < length) {
3826
3869
  var fromIndex = 0,
3827
- value = values[index],
3828
- computed = iteratee ? iteratee(value) : value;
3870
+ value = values[index],
3871
+ computed = iteratee ? iteratee(value) : value;
3829
3872
 
3830
3873
  while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
3831
3874
  if (seen !== array) {
@@ -3848,7 +3891,7 @@
3848
3891
  */
3849
3892
  function basePullAt(array, indexes) {
3850
3893
  var length = array ? indexes.length : 0,
3851
- lastIndex = length - 1;
3894
+ lastIndex = length - 1;
3852
3895
 
3853
3896
  while (length--) {
3854
3897
  var index = indexes[length];
@@ -3890,8 +3933,8 @@
3890
3933
  */
3891
3934
  function baseRange(start, end, step, fromRight) {
3892
3935
  var index = -1,
3893
- length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
3894
- result = Array(length);
3936
+ length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
3937
+ result = Array(length);
3895
3938
 
3896
3939
  while (length--) {
3897
3940
  result[fromRight ? length : ++index] = start;
@@ -3981,13 +4024,17 @@
3981
4024
  path = castPath(path, object);
3982
4025
 
3983
4026
  var index = -1,
3984
- length = path.length,
3985
- lastIndex = length - 1,
3986
- nested = object;
4027
+ length = path.length,
4028
+ lastIndex = length - 1,
4029
+ nested = object;
3987
4030
 
3988
4031
  while (nested != null && ++index < length) {
3989
4032
  var key = toKey(path[index]),
3990
- newValue = value;
4033
+ newValue = value;
4034
+
4035
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
4036
+ return object;
4037
+ }
3991
4038
 
3992
4039
  if (index != lastIndex) {
3993
4040
  var objValue = nested[key];
@@ -4056,7 +4103,7 @@
4056
4103
  */
4057
4104
  function baseSlice(array, start, end) {
4058
4105
  var index = -1,
4059
- length = array.length;
4106
+ length = array.length;
4060
4107
 
4061
4108
  if (start < 0) {
4062
4109
  start = -start > length ? 0 : (length + start);
@@ -4108,15 +4155,15 @@
4108
4155
  */
4109
4156
  function baseSortedIndex(array, value, retHighest) {
4110
4157
  var low = 0,
4111
- high = array == null ? low : array.length;
4158
+ high = array == null ? low : array.length;
4112
4159
 
4113
4160
  if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
4114
4161
  while (low < high) {
4115
4162
  var mid = (low + high) >>> 1,
4116
- computed = array[mid];
4163
+ computed = array[mid];
4117
4164
 
4118
4165
  if (computed !== null && !isSymbol(computed) &&
4119
- (retHighest ? (computed <= value) : (computed < value))) {
4166
+ (retHighest ? (computed <= value) : (computed < value))) {
4120
4167
  low = mid + 1;
4121
4168
  } else {
4122
4169
  high = mid;
@@ -4141,22 +4188,25 @@
4141
4188
  * into `array`.
4142
4189
  */
4143
4190
  function baseSortedIndexBy(array, value, iteratee, retHighest) {
4144
- value = iteratee(value);
4145
-
4146
4191
  var low = 0,
4147
- high = array == null ? 0 : array.length,
4148
- valIsNaN = value !== value,
4149
- valIsNull = value === null,
4150
- valIsSymbol = isSymbol(value),
4151
- valIsUndefined = value === undefined;
4192
+ high = array == null ? 0 : array.length;
4193
+ if (high === 0) {
4194
+ return 0;
4195
+ }
4196
+
4197
+ value = iteratee(value);
4198
+ var valIsNaN = value !== value,
4199
+ valIsNull = value === null,
4200
+ valIsSymbol = isSymbol(value),
4201
+ valIsUndefined = value === undefined;
4152
4202
 
4153
4203
  while (low < high) {
4154
4204
  var mid = nativeFloor((low + high) / 2),
4155
- computed = iteratee(array[mid]),
4156
- othIsDefined = computed !== undefined,
4157
- othIsNull = computed === null,
4158
- othIsReflexive = computed === computed,
4159
- othIsSymbol = isSymbol(computed);
4205
+ computed = iteratee(array[mid]),
4206
+ othIsDefined = computed !== undefined,
4207
+ othIsNull = computed === null,
4208
+ othIsReflexive = computed === computed,
4209
+ othIsSymbol = isSymbol(computed);
4160
4210
 
4161
4211
  if (valIsNaN) {
4162
4212
  var setLow = retHighest || othIsReflexive;
@@ -4191,13 +4241,13 @@
4191
4241
  */
4192
4242
  function baseSortedUniq(array, iteratee) {
4193
4243
  var index = -1,
4194
- length = array.length,
4195
- resIndex = 0,
4196
- result = [];
4244
+ length = array.length,
4245
+ resIndex = 0,
4246
+ result = [];
4197
4247
 
4198
4248
  while (++index < length) {
4199
4249
  var value = array[index],
4200
- computed = iteratee ? iteratee(value) : value;
4250
+ computed = iteratee ? iteratee(value) : value;
4201
4251
 
4202
4252
  if (!index || !eq(computed, seen)) {
4203
4253
  var seen = computed;
@@ -4260,11 +4310,11 @@
4260
4310
  */
4261
4311
  function baseUniq(array, iteratee, comparator) {
4262
4312
  var index = -1,
4263
- includes = arrayIncludes,
4264
- length = array.length,
4265
- isCommon = true,
4266
- result = [],
4267
- seen = result;
4313
+ includes = arrayIncludes,
4314
+ length = array.length,
4315
+ isCommon = true,
4316
+ result = [],
4317
+ seen = result;
4268
4318
 
4269
4319
  if (comparator) {
4270
4320
  isCommon = false;
@@ -4283,30 +4333,30 @@
4283
4333
  seen = iteratee ? [] : result;
4284
4334
  }
4285
4335
  outer:
4286
- while (++index < length) {
4287
- var value = array[index],
4336
+ while (++index < length) {
4337
+ var value = array[index],
4288
4338
  computed = iteratee ? iteratee(value) : value;
4289
4339
 
4290
- value = (comparator || value !== 0) ? value : 0;
4291
- if (isCommon && computed === computed) {
4292
- var seenIndex = seen.length;
4293
- while (seenIndex--) {
4294
- if (seen[seenIndex] === computed) {
4295
- continue outer;
4340
+ value = (comparator || value !== 0) ? value : 0;
4341
+ if (isCommon && computed === computed) {
4342
+ var seenIndex = seen.length;
4343
+ while (seenIndex--) {
4344
+ if (seen[seenIndex] === computed) {
4345
+ continue outer;
4346
+ }
4296
4347
  }
4348
+ if (iteratee) {
4349
+ seen.push(computed);
4350
+ }
4351
+ result.push(value);
4297
4352
  }
4298
- if (iteratee) {
4299
- seen.push(computed);
4300
- }
4301
- result.push(value);
4302
- }
4303
- else if (!includes(seen, computed, comparator)) {
4304
- if (seen !== result) {
4305
- seen.push(computed);
4353
+ else if (!includes(seen, computed, comparator)) {
4354
+ if (seen !== result) {
4355
+ seen.push(computed);
4356
+ }
4357
+ result.push(value);
4306
4358
  }
4307
- result.push(value);
4308
4359
  }
4309
- }
4310
4360
  return result;
4311
4361
  }
4312
4362
 
@@ -4351,10 +4401,10 @@
4351
4401
  */
4352
4402
  function baseWhile(array, predicate, isDrop, fromRight) {
4353
4403
  var length = array.length,
4354
- index = fromRight ? length : -1;
4404
+ index = fromRight ? length : -1;
4355
4405
 
4356
4406
  while ((fromRight ? index-- : ++index < length) &&
4357
- predicate(array[index], index, array)) {}
4407
+ predicate(array[index], index, array)) {}
4358
4408
 
4359
4409
  return isDrop
4360
4410
  ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
@@ -4397,11 +4447,11 @@
4397
4447
  return length ? baseUniq(arrays[0]) : [];
4398
4448
  }
4399
4449
  var index = -1,
4400
- result = Array(length);
4450
+ result = Array(length);
4401
4451
 
4402
4452
  while (++index < length) {
4403
4453
  var array = arrays[index],
4404
- othIndex = -1;
4454
+ othIndex = -1;
4405
4455
 
4406
4456
  while (++othIndex < length) {
4407
4457
  if (othIndex != index) {
@@ -4423,9 +4473,9 @@
4423
4473
  */
4424
4474
  function baseZipObject(props, values, assignFunc) {
4425
4475
  var index = -1,
4426
- length = props.length,
4427
- valsLength = values.length,
4428
- result = {};
4476
+ length = props.length,
4477
+ valsLength = values.length,
4478
+ result = {};
4429
4479
 
4430
4480
  while (++index < length) {
4431
4481
  var value = index < valsLength ? values[index] : undefined;
@@ -4520,7 +4570,7 @@
4520
4570
  return buffer.slice();
4521
4571
  }
4522
4572
  var length = buffer.length,
4523
- result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
4573
+ result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
4524
4574
 
4525
4575
  buffer.copy(result);
4526
4576
  return result;
@@ -4600,27 +4650,27 @@
4600
4650
  function compareAscending(value, other) {
4601
4651
  if (value !== other) {
4602
4652
  var valIsDefined = value !== undefined,
4603
- valIsNull = value === null,
4604
- valIsReflexive = value === value,
4605
- valIsSymbol = isSymbol(value);
4653
+ valIsNull = value === null,
4654
+ valIsReflexive = value === value,
4655
+ valIsSymbol = isSymbol(value);
4606
4656
 
4607
4657
  var othIsDefined = other !== undefined,
4608
- othIsNull = other === null,
4609
- othIsReflexive = other === other,
4610
- othIsSymbol = isSymbol(other);
4658
+ othIsNull = other === null,
4659
+ othIsReflexive = other === other,
4660
+ othIsSymbol = isSymbol(other);
4611
4661
 
4612
4662
  if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
4613
- (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
4614
- (valIsNull && othIsDefined && othIsReflexive) ||
4615
- (!valIsDefined && othIsReflexive) ||
4616
- !valIsReflexive) {
4663
+ (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
4664
+ (valIsNull && othIsDefined && othIsReflexive) ||
4665
+ (!valIsDefined && othIsReflexive) ||
4666
+ !valIsReflexive) {
4617
4667
  return 1;
4618
4668
  }
4619
4669
  if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
4620
- (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
4621
- (othIsNull && valIsDefined && valIsReflexive) ||
4622
- (!othIsDefined && valIsReflexive) ||
4623
- !othIsReflexive) {
4670
+ (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
4671
+ (othIsNull && valIsDefined && valIsReflexive) ||
4672
+ (!othIsDefined && valIsReflexive) ||
4673
+ !othIsReflexive) {
4624
4674
  return -1;
4625
4675
  }
4626
4676
  }
@@ -4643,10 +4693,10 @@
4643
4693
  */
4644
4694
  function compareMultiple(object, other, orders) {
4645
4695
  var index = -1,
4646
- objCriteria = object.criteria,
4647
- othCriteria = other.criteria,
4648
- length = objCriteria.length,
4649
- ordersLength = orders.length;
4696
+ objCriteria = object.criteria,
4697
+ othCriteria = other.criteria,
4698
+ length = objCriteria.length,
4699
+ ordersLength = orders.length;
4650
4700
 
4651
4701
  while (++index < length) {
4652
4702
  var result = compareAscending(objCriteria[index], othCriteria[index]);
@@ -4681,13 +4731,13 @@
4681
4731
  */
4682
4732
  function composeArgs(args, partials, holders, isCurried) {
4683
4733
  var argsIndex = -1,
4684
- argsLength = args.length,
4685
- holdersLength = holders.length,
4686
- leftIndex = -1,
4687
- leftLength = partials.length,
4688
- rangeLength = nativeMax(argsLength - holdersLength, 0),
4689
- result = Array(leftLength + rangeLength),
4690
- isUncurried = !isCurried;
4734
+ argsLength = args.length,
4735
+ holdersLength = holders.length,
4736
+ leftIndex = -1,
4737
+ leftLength = partials.length,
4738
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
4739
+ result = Array(leftLength + rangeLength),
4740
+ isUncurried = !isCurried;
4691
4741
 
4692
4742
  while (++leftIndex < leftLength) {
4693
4743
  result[leftIndex] = partials[leftIndex];
@@ -4716,14 +4766,14 @@
4716
4766
  */
4717
4767
  function composeArgsRight(args, partials, holders, isCurried) {
4718
4768
  var argsIndex = -1,
4719
- argsLength = args.length,
4720
- holdersIndex = -1,
4721
- holdersLength = holders.length,
4722
- rightIndex = -1,
4723
- rightLength = partials.length,
4724
- rangeLength = nativeMax(argsLength - holdersLength, 0),
4725
- result = Array(rangeLength + rightLength),
4726
- isUncurried = !isCurried;
4769
+ argsLength = args.length,
4770
+ holdersIndex = -1,
4771
+ holdersLength = holders.length,
4772
+ rightIndex = -1,
4773
+ rightLength = partials.length,
4774
+ rangeLength = nativeMax(argsLength - holdersLength, 0),
4775
+ result = Array(rangeLength + rightLength),
4776
+ isUncurried = !isCurried;
4727
4777
 
4728
4778
  while (++argsIndex < rangeLength) {
4729
4779
  result[argsIndex] = args[argsIndex];
@@ -4750,7 +4800,7 @@
4750
4800
  */
4751
4801
  function copyArray(source, array) {
4752
4802
  var index = -1,
4753
- length = source.length;
4803
+ length = source.length;
4754
4804
 
4755
4805
  array || (array = Array(length));
4756
4806
  while (++index < length) {
@@ -4774,7 +4824,7 @@
4774
4824
  object || (object = {});
4775
4825
 
4776
4826
  var index = -1,
4777
- length = props.length;
4827
+ length = props.length;
4778
4828
 
4779
4829
  while (++index < length) {
4780
4830
  var key = props[index];
@@ -4830,7 +4880,7 @@
4830
4880
  function createAggregator(setter, initializer) {
4831
4881
  return function(collection, iteratee) {
4832
4882
  var func = isArray(collection) ? arrayAggregator : baseAggregator,
4833
- accumulator = initializer ? initializer() : {};
4883
+ accumulator = initializer ? initializer() : {};
4834
4884
 
4835
4885
  return func(collection, setter, getIteratee(iteratee, 2), accumulator);
4836
4886
  };
@@ -4846,9 +4896,9 @@
4846
4896
  function createAssigner(assigner) {
4847
4897
  return baseRest(function(object, sources) {
4848
4898
  var index = -1,
4849
- length = sources.length,
4850
- customizer = length > 1 ? sources[length - 1] : undefined,
4851
- guard = length > 2 ? sources[2] : undefined;
4899
+ length = sources.length,
4900
+ customizer = length > 1 ? sources[length - 1] : undefined,
4901
+ guard = length > 2 ? sources[2] : undefined;
4852
4902
 
4853
4903
  customizer = (assigner.length > 3 && typeof customizer == 'function')
4854
4904
  ? (length--, customizer)
@@ -4886,8 +4936,8 @@
4886
4936
  return eachFunc(collection, iteratee);
4887
4937
  }
4888
4938
  var length = collection.length,
4889
- index = fromRight ? length : -1,
4890
- iterable = Object(collection);
4939
+ index = fromRight ? length : -1,
4940
+ iterable = Object(collection);
4891
4941
 
4892
4942
  while ((fromRight ? index-- : ++index < length)) {
4893
4943
  if (iteratee(iterable[index], index, iterable) === false) {
@@ -4908,9 +4958,9 @@
4908
4958
  function createBaseFor(fromRight) {
4909
4959
  return function(object, iteratee, keysFunc) {
4910
4960
  var index = -1,
4911
- iterable = Object(object),
4912
- props = keysFunc(object),
4913
- length = props.length;
4961
+ iterable = Object(object),
4962
+ props = keysFunc(object),
4963
+ length = props.length;
4914
4964
 
4915
4965
  while (length--) {
4916
4966
  var key = props[fromRight ? length : ++index];
@@ -4934,7 +4984,7 @@
4934
4984
  */
4935
4985
  function createBind(func, bitmask, thisArg) {
4936
4986
  var isBind = bitmask & WRAP_BIND_FLAG,
4937
- Ctor = createCtor(func);
4987
+ Ctor = createCtor(func);
4938
4988
 
4939
4989
  function wrapper() {
4940
4990
  var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
@@ -5008,7 +5058,7 @@
5008
5058
  case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
5009
5059
  }
5010
5060
  var thisBinding = baseCreate(Ctor.prototype),
5011
- result = Ctor.apply(thisBinding, args);
5061
+ result = Ctor.apply(thisBinding, args);
5012
5062
 
5013
5063
  // Mimic the constructor's `return` behavior.
5014
5064
  // See https://es5.github.io/#x13.2.2 for more details.
@@ -5030,9 +5080,9 @@
5030
5080
 
5031
5081
  function wrapper() {
5032
5082
  var length = arguments.length,
5033
- args = Array(length),
5034
- index = length,
5035
- placeholder = getHolder(wrapper);
5083
+ args = Array(length),
5084
+ index = length,
5085
+ placeholder = getHolder(wrapper);
5036
5086
 
5037
5087
  while (index--) {
5038
5088
  args[index] = arguments[index];
@@ -5083,8 +5133,8 @@
5083
5133
  function createFlow(fromRight) {
5084
5134
  return flatRest(function(funcs) {
5085
5135
  var length = funcs.length,
5086
- index = length,
5087
- prereq = LodashWrapper.prototype.thru;
5136
+ index = length,
5137
+ prereq = LodashWrapper.prototype.thru;
5088
5138
 
5089
5139
  if (fromRight) {
5090
5140
  funcs.reverse();
@@ -5103,12 +5153,12 @@
5103
5153
  func = funcs[index];
5104
5154
 
5105
5155
  var funcName = getFuncName(func),
5106
- data = funcName == 'wrapper' ? getData(func) : undefined;
5156
+ data = funcName == 'wrapper' ? getData(func) : undefined;
5107
5157
 
5108
5158
  if (data && isLaziable(data[0]) &&
5109
- data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
5110
- !data[4].length && data[9] == 1
5111
- ) {
5159
+ data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
5160
+ !data[4].length && data[9] == 1
5161
+ ) {
5112
5162
  wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
5113
5163
  } else {
5114
5164
  wrapper = (func.length == 1 && isLaziable(func))
@@ -5118,13 +5168,13 @@
5118
5168
  }
5119
5169
  return function() {
5120
5170
  var args = arguments,
5121
- value = args[0];
5171
+ value = args[0];
5122
5172
 
5123
5173
  if (wrapper && args.length == 1 && isArray(value)) {
5124
5174
  return wrapper.plant(value).value();
5125
5175
  }
5126
5176
  var index = 0,
5127
- result = length ? funcs[index].apply(this, args) : value;
5177
+ result = length ? funcs[index].apply(this, args) : value;
5128
5178
 
5129
5179
  while (++index < length) {
5130
5180
  result = funcs[index].call(this, result);
@@ -5155,23 +5205,23 @@
5155
5205
  */
5156
5206
  function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
5157
5207
  var isAry = bitmask & WRAP_ARY_FLAG,
5158
- isBind = bitmask & WRAP_BIND_FLAG,
5159
- isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
5160
- isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
5161
- isFlip = bitmask & WRAP_FLIP_FLAG,
5162
- Ctor = isBindKey ? undefined : createCtor(func);
5208
+ isBind = bitmask & WRAP_BIND_FLAG,
5209
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
5210
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
5211
+ isFlip = bitmask & WRAP_FLIP_FLAG,
5212
+ Ctor = isBindKey ? undefined : createCtor(func);
5163
5213
 
5164
5214
  function wrapper() {
5165
5215
  var length = arguments.length,
5166
- args = Array(length),
5167
- index = length;
5216
+ args = Array(length),
5217
+ index = length;
5168
5218
 
5169
5219
  while (index--) {
5170
5220
  args[index] = arguments[index];
5171
5221
  }
5172
5222
  if (isCurried) {
5173
5223
  var placeholder = getHolder(wrapper),
5174
- holdersCount = countHolders(args, placeholder);
5224
+ holdersCount = countHolders(args, placeholder);
5175
5225
  }
5176
5226
  if (partials) {
5177
5227
  args = composeArgs(args, partials, holders, isCurried);
@@ -5188,7 +5238,7 @@
5188
5238
  );
5189
5239
  }
5190
5240
  var thisBinding = isBind ? thisArg : this,
5191
- fn = isBindKey ? thisBinding[func] : func;
5241
+ fn = isBindKey ? thisBinding[func] : func;
5192
5242
 
5193
5243
  length = args.length;
5194
5244
  if (argPos) {
@@ -5310,15 +5360,15 @@
5310
5360
  */
5311
5361
  function createPartial(func, bitmask, thisArg, partials) {
5312
5362
  var isBind = bitmask & WRAP_BIND_FLAG,
5313
- Ctor = createCtor(func);
5363
+ Ctor = createCtor(func);
5314
5364
 
5315
5365
  function wrapper() {
5316
5366
  var argsIndex = -1,
5317
- argsLength = arguments.length,
5318
- leftIndex = -1,
5319
- leftLength = partials.length,
5320
- args = Array(leftLength + argsLength),
5321
- fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
5367
+ argsLength = arguments.length,
5368
+ leftIndex = -1,
5369
+ leftLength = partials.length,
5370
+ args = Array(leftLength + argsLength),
5371
+ fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
5322
5372
 
5323
5373
  while (++leftIndex < leftLength) {
5324
5374
  args[leftIndex] = partials[leftIndex];
@@ -5392,10 +5442,10 @@
5392
5442
  */
5393
5443
  function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
5394
5444
  var isCurry = bitmask & WRAP_CURRY_FLAG,
5395
- newHolders = isCurry ? holders : undefined,
5396
- newHoldersRight = isCurry ? undefined : holders,
5397
- newPartials = isCurry ? partials : undefined,
5398
- newPartialsRight = isCurry ? undefined : partials;
5445
+ newHolders = isCurry ? holders : undefined,
5446
+ newHoldersRight = isCurry ? undefined : holders,
5447
+ newPartials = isCurry ? partials : undefined,
5448
+ newPartialsRight = isCurry ? undefined : partials;
5399
5449
 
5400
5450
  bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
5401
5451
  bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
@@ -5428,11 +5478,11 @@
5428
5478
  return function(number, precision) {
5429
5479
  number = toNumber(number);
5430
5480
  precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
5431
- if (precision) {
5481
+ if (precision && nativeIsFinite(number)) {
5432
5482
  // Shift with exponential notation to avoid floating-point issues.
5433
5483
  // See [MDN](https://mdn.io/round#Examples) for more details.
5434
5484
  var pair = (toString(number) + 'e').split('e'),
5435
- value = func(pair[0] + 'e' + (+pair[1] + precision));
5485
+ value = func(pair[0] + 'e' + (+pair[1] + precision));
5436
5486
 
5437
5487
  pair = (toString(value) + 'e').split('e');
5438
5488
  return +(pair[0] + 'e' + (+pair[1] - precision));
@@ -5513,7 +5563,7 @@
5513
5563
 
5514
5564
  if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
5515
5565
  var partialsRight = partials,
5516
- holdersRight = holders;
5566
+ holdersRight = holders;
5517
5567
 
5518
5568
  partials = holders = undefined;
5519
5569
  }
@@ -5566,7 +5616,7 @@
5566
5616
  */
5567
5617
  function customDefaultsAssignIn(objValue, srcValue, key, object) {
5568
5618
  if (objValue === undefined ||
5569
- (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
5619
+ (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
5570
5620
  return srcValue;
5571
5621
  }
5572
5622
  return objValue;
@@ -5624,20 +5674,21 @@
5624
5674
  */
5625
5675
  function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
5626
5676
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
5627
- arrLength = array.length,
5628
- othLength = other.length;
5677
+ arrLength = array.length,
5678
+ othLength = other.length;
5629
5679
 
5630
5680
  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
5631
5681
  return false;
5632
5682
  }
5633
- // Assume cyclic values are equal.
5634
- var stacked = stack.get(array);
5635
- if (stacked && stack.get(other)) {
5636
- return stacked == other;
5683
+ // Check that cyclic values are equal.
5684
+ var arrStacked = stack.get(array);
5685
+ var othStacked = stack.get(other);
5686
+ if (arrStacked && othStacked) {
5687
+ return arrStacked == other && othStacked == array;
5637
5688
  }
5638
5689
  var index = -1,
5639
- result = true,
5640
- seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
5690
+ result = true,
5691
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
5641
5692
 
5642
5693
  stack.set(array, other);
5643
5694
  stack.set(other, array);
@@ -5645,7 +5696,7 @@
5645
5696
  // Ignore non-index properties.
5646
5697
  while (++index < arrLength) {
5647
5698
  var arrValue = array[index],
5648
- othValue = other[index];
5699
+ othValue = other[index];
5649
5700
 
5650
5701
  if (customizer) {
5651
5702
  var compared = isPartial
@@ -5662,18 +5713,18 @@
5662
5713
  // Recursively compare arrays (susceptible to call stack limits).
5663
5714
  if (seen) {
5664
5715
  if (!arraySome(other, function(othValue, othIndex) {
5665
- if (!cacheHas(seen, othIndex) &&
5666
- (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
5667
- return seen.push(othIndex);
5668
- }
5669
- })) {
5716
+ if (!cacheHas(seen, othIndex) &&
5717
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
5718
+ return seen.push(othIndex);
5719
+ }
5720
+ })) {
5670
5721
  result = false;
5671
5722
  break;
5672
5723
  }
5673
5724
  } else if (!(
5674
- arrValue === othValue ||
5675
- equalFunc(arrValue, othValue, bitmask, customizer, stack)
5676
- )) {
5725
+ arrValue === othValue ||
5726
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
5727
+ )) {
5677
5728
  result = false;
5678
5729
  break;
5679
5730
  }
@@ -5704,7 +5755,7 @@
5704
5755
  switch (tag) {
5705
5756
  case dataViewTag:
5706
5757
  if ((object.byteLength != other.byteLength) ||
5707
- (object.byteOffset != other.byteOffset)) {
5758
+ (object.byteOffset != other.byteOffset)) {
5708
5759
  return false;
5709
5760
  }
5710
5761
  object = object.buffer;
@@ -5712,7 +5763,7 @@
5712
5763
 
5713
5764
  case arrayBufferTag:
5714
5765
  if ((object.byteLength != other.byteLength) ||
5715
- !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
5766
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
5716
5767
  return false;
5717
5768
  }
5718
5769
  return true;
@@ -5780,10 +5831,10 @@
5780
5831
  */
5781
5832
  function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
5782
5833
  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
5783
- objProps = getAllKeys(object),
5784
- objLength = objProps.length,
5785
- othProps = getAllKeys(other),
5786
- othLength = othProps.length;
5834
+ objProps = getAllKeys(object),
5835
+ objLength = objProps.length,
5836
+ othProps = getAllKeys(other),
5837
+ othLength = othProps.length;
5787
5838
 
5788
5839
  if (objLength != othLength && !isPartial) {
5789
5840
  return false;
@@ -5795,10 +5846,11 @@
5795
5846
  return false;
5796
5847
  }
5797
5848
  }
5798
- // Assume cyclic values are equal.
5799
- var stacked = stack.get(object);
5800
- if (stacked && stack.get(other)) {
5801
- return stacked == other;
5849
+ // Check that cyclic values are equal.
5850
+ var objStacked = stack.get(object);
5851
+ var othStacked = stack.get(other);
5852
+ if (objStacked && othStacked) {
5853
+ return objStacked == other && othStacked == object;
5802
5854
  }
5803
5855
  var result = true;
5804
5856
  stack.set(object, other);
@@ -5808,7 +5860,7 @@
5808
5860
  while (++index < objLength) {
5809
5861
  key = objProps[index];
5810
5862
  var objValue = object[key],
5811
- othValue = other[key];
5863
+ othValue = other[key];
5812
5864
 
5813
5865
  if (customizer) {
5814
5866
  var compared = isPartial
@@ -5817,9 +5869,9 @@
5817
5869
  }
5818
5870
  // Recursively compare objects (susceptible to call stack limits).
5819
5871
  if (!(compared === undefined
5820
- ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
5821
- : compared
5822
- )) {
5872
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
5873
+ : compared
5874
+ )) {
5823
5875
  result = false;
5824
5876
  break;
5825
5877
  }
@@ -5827,13 +5879,13 @@
5827
5879
  }
5828
5880
  if (result && !skipCtor) {
5829
5881
  var objCtor = object.constructor,
5830
- othCtor = other.constructor;
5882
+ othCtor = other.constructor;
5831
5883
 
5832
5884
  // Non `Object` object instances with different constructors are not equal.
5833
5885
  if (objCtor != othCtor &&
5834
- ('constructor' in object && 'constructor' in other) &&
5835
- !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
5836
- typeof othCtor == 'function' && othCtor instanceof othCtor)) {
5886
+ ('constructor' in object && 'constructor' in other) &&
5887
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
5888
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
5837
5889
  result = false;
5838
5890
  }
5839
5891
  }
@@ -5896,12 +5948,12 @@
5896
5948
  */
5897
5949
  function getFuncName(func) {
5898
5950
  var result = (func.name + ''),
5899
- array = realNames[result],
5900
- length = hasOwnProperty.call(realNames, result) ? array.length : 0;
5951
+ array = realNames[result],
5952
+ length = hasOwnProperty.call(realNames, result) ? array.length : 0;
5901
5953
 
5902
5954
  while (length--) {
5903
5955
  var data = array[length],
5904
- otherFunc = data.func;
5956
+ otherFunc = data.func;
5905
5957
  if (otherFunc == null || otherFunc == func) {
5906
5958
  return data.name;
5907
5959
  }
@@ -5962,11 +6014,11 @@
5962
6014
  */
5963
6015
  function getMatchData(object) {
5964
6016
  var result = keys(object),
5965
- length = result.length;
6017
+ length = result.length;
5966
6018
 
5967
6019
  while (length--) {
5968
6020
  var key = result[length],
5969
- value = object[key];
6021
+ value = object[key];
5970
6022
 
5971
6023
  result[length] = [key, value, isStrictComparable(value)];
5972
6024
  }
@@ -5995,7 +6047,7 @@
5995
6047
  */
5996
6048
  function getRawTag(value) {
5997
6049
  var isOwn = hasOwnProperty.call(value, symToStringTag),
5998
- tag = value[symToStringTag];
6050
+ tag = value[symToStringTag];
5999
6051
 
6000
6052
  try {
6001
6053
  value[symToStringTag] = undefined;
@@ -6057,14 +6109,14 @@
6057
6109
 
6058
6110
  // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
6059
6111
  if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
6060
- (Map && getTag(new Map) != mapTag) ||
6061
- (Promise && getTag(Promise.resolve()) != promiseTag) ||
6062
- (Set && getTag(new Set) != setTag) ||
6063
- (WeakMap && getTag(new WeakMap) != weakMapTag)) {
6112
+ (Map && getTag(new Map) != mapTag) ||
6113
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
6114
+ (Set && getTag(new Set) != setTag) ||
6115
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
6064
6116
  getTag = function(value) {
6065
6117
  var result = baseGetTag(value),
6066
- Ctor = result == objectTag ? value.constructor : undefined,
6067
- ctorString = Ctor ? toSource(Ctor) : '';
6118
+ Ctor = result == objectTag ? value.constructor : undefined,
6119
+ ctorString = Ctor ? toSource(Ctor) : '';
6068
6120
 
6069
6121
  if (ctorString) {
6070
6122
  switch (ctorString) {
@@ -6091,11 +6143,11 @@
6091
6143
  */
6092
6144
  function getView(start, end, transforms) {
6093
6145
  var index = -1,
6094
- length = transforms.length;
6146
+ length = transforms.length;
6095
6147
 
6096
6148
  while (++index < length) {
6097
6149
  var data = transforms[index],
6098
- size = data.size;
6150
+ size = data.size;
6099
6151
 
6100
6152
  switch (data.type) {
6101
6153
  case 'drop': start += size; break;
@@ -6132,8 +6184,8 @@
6132
6184
  path = castPath(path, object);
6133
6185
 
6134
6186
  var index = -1,
6135
- length = path.length,
6136
- result = false;
6187
+ length = path.length,
6188
+ result = false;
6137
6189
 
6138
6190
  while (++index < length) {
6139
6191
  var key = toKey(path[index]);
@@ -6159,7 +6211,7 @@
6159
6211
  */
6160
6212
  function initCloneArray(array) {
6161
6213
  var length = array.length,
6162
- result = new array.constructor(length);
6214
+ result = new array.constructor(length);
6163
6215
 
6164
6216
  // Add properties assigned by `RegExp#exec`.
6165
6217
  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
@@ -6276,7 +6328,7 @@
6276
6328
  return !!length &&
6277
6329
  (type == 'number' ||
6278
6330
  (type != 'symbol' && reIsUint.test(value))) &&
6279
- (value > -1 && value % 1 == 0 && value < length);
6331
+ (value > -1 && value % 1 == 0 && value < length);
6280
6332
  }
6281
6333
 
6282
6334
  /**
@@ -6295,9 +6347,9 @@
6295
6347
  }
6296
6348
  var type = typeof index;
6297
6349
  if (type == 'number'
6298
- ? (isArrayLike(object) && isIndex(index, object.length))
6299
- : (type == 'string' && index in object)
6300
- ) {
6350
+ ? (isArrayLike(object) && isIndex(index, object.length))
6351
+ : (type == 'string' && index in object)
6352
+ ) {
6301
6353
  return eq(object[index], value);
6302
6354
  }
6303
6355
  return false;
@@ -6317,7 +6369,7 @@
6317
6369
  }
6318
6370
  var type = typeof value;
6319
6371
  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
6320
- value == null || isSymbol(value)) {
6372
+ value == null || isSymbol(value)) {
6321
6373
  return true;
6322
6374
  }
6323
6375
  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
@@ -6348,7 +6400,7 @@
6348
6400
  */
6349
6401
  function isLaziable(func) {
6350
6402
  var funcName = getFuncName(func),
6351
- other = lodash[funcName];
6403
+ other = lodash[funcName];
6352
6404
 
6353
6405
  if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
6354
6406
  return false;
@@ -6389,7 +6441,7 @@
6389
6441
  */
6390
6442
  function isPrototype(value) {
6391
6443
  var Ctor = value && value.constructor,
6392
- proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
6444
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
6393
6445
 
6394
6446
  return value === proto;
6395
6447
  }
@@ -6463,9 +6515,9 @@
6463
6515
  */
6464
6516
  function mergeData(data, source) {
6465
6517
  var bitmask = data[1],
6466
- srcBitmask = source[1],
6467
- newBitmask = bitmask | srcBitmask,
6468
- isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
6518
+ srcBitmask = source[1],
6519
+ newBitmask = bitmask | srcBitmask,
6520
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
6469
6521
 
6470
6522
  var isCombo =
6471
6523
  ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
@@ -6559,9 +6611,9 @@
6559
6611
  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
6560
6612
  return function() {
6561
6613
  var args = arguments,
6562
- index = -1,
6563
- length = nativeMax(args.length - start, 0),
6564
- array = Array(length);
6614
+ index = -1,
6615
+ length = nativeMax(args.length - start, 0),
6616
+ array = Array(length);
6565
6617
 
6566
6618
  while (++index < length) {
6567
6619
  array[index] = args[start + index];
@@ -6600,8 +6652,8 @@
6600
6652
  */
6601
6653
  function reorder(array, indexes) {
6602
6654
  var arrLength = array.length,
6603
- length = nativeMin(indexes.length, arrLength),
6604
- oldArray = copyArray(array);
6655
+ length = nativeMin(indexes.length, arrLength),
6656
+ oldArray = copyArray(array);
6605
6657
 
6606
6658
  while (length--) {
6607
6659
  var index = indexes[length];
@@ -6610,6 +6662,26 @@
6610
6662
  return array;
6611
6663
  }
6612
6664
 
6665
+ /**
6666
+ * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
6667
+ *
6668
+ * @private
6669
+ * @param {Object} object The object to query.
6670
+ * @param {string} key The key of the property to get.
6671
+ * @returns {*} Returns the property value.
6672
+ */
6673
+ function safeGet(object, key) {
6674
+ if (key === 'constructor' && typeof object[key] === 'function') {
6675
+ return;
6676
+ }
6677
+
6678
+ if (key == '__proto__') {
6679
+ return;
6680
+ }
6681
+
6682
+ return object[key];
6683
+ }
6684
+
6613
6685
  /**
6614
6686
  * Sets metadata for `func`.
6615
6687
  *
@@ -6674,11 +6746,11 @@
6674
6746
  */
6675
6747
  function shortOut(func) {
6676
6748
  var count = 0,
6677
- lastCalled = 0;
6749
+ lastCalled = 0;
6678
6750
 
6679
6751
  return function() {
6680
6752
  var stamp = nativeNow(),
6681
- remaining = HOT_SPAN - (stamp - lastCalled);
6753
+ remaining = HOT_SPAN - (stamp - lastCalled);
6682
6754
 
6683
6755
  lastCalled = stamp;
6684
6756
  if (remaining > 0) {
@@ -6702,13 +6774,13 @@
6702
6774
  */
6703
6775
  function shuffleSelf(array, size) {
6704
6776
  var index = -1,
6705
- length = array.length,
6706
- lastIndex = length - 1;
6777
+ length = array.length,
6778
+ lastIndex = length - 1;
6707
6779
 
6708
6780
  size = size === undefined ? length : size;
6709
6781
  while (++index < size) {
6710
6782
  var rand = baseRandom(index, lastIndex),
6711
- value = array[rand];
6783
+ value = array[rand];
6712
6784
 
6713
6785
  array[rand] = array[index];
6714
6786
  array[index] = value;
@@ -6839,8 +6911,8 @@
6839
6911
  return [];
6840
6912
  }
6841
6913
  var index = 0,
6842
- resIndex = 0,
6843
- result = Array(nativeCeil(length / size));
6914
+ resIndex = 0,
6915
+ result = Array(nativeCeil(length / size));
6844
6916
 
6845
6917
  while (index < length) {
6846
6918
  result[resIndex++] = baseSlice(array, index, (index += size));
@@ -6865,9 +6937,9 @@
6865
6937
  */
6866
6938
  function compact(array) {
6867
6939
  var index = -1,
6868
- length = array == null ? 0 : array.length,
6869
- resIndex = 0,
6870
- result = [];
6940
+ length = array == null ? 0 : array.length,
6941
+ resIndex = 0,
6942
+ result = [];
6871
6943
 
6872
6944
  while (++index < length) {
6873
6945
  var value = array[index];
@@ -6906,8 +6978,8 @@
6906
6978
  return [];
6907
6979
  }
6908
6980
  var args = Array(length - 1),
6909
- array = arguments[0],
6910
- index = length;
6981
+ array = arguments[0],
6982
+ index = length;
6911
6983
 
6912
6984
  while (index--) {
6913
6985
  args[index - 1] = arguments[index];
@@ -7384,8 +7456,8 @@
7384
7456
  */
7385
7457
  function fromPairs(pairs) {
7386
7458
  var index = -1,
7387
- length = pairs == null ? 0 : pairs.length,
7388
- result = {};
7459
+ length = pairs == null ? 0 : pairs.length,
7460
+ result = {};
7389
7461
 
7390
7462
  while (++index < length) {
7391
7463
  var pair = pairs[index];
@@ -7519,7 +7591,7 @@
7519
7591
  */
7520
7592
  var intersectionBy = baseRest(function(arrays) {
7521
7593
  var iteratee = last(arrays),
7522
- mapped = arrayMap(arrays, castArrayLikeObject);
7594
+ mapped = arrayMap(arrays, castArrayLikeObject);
7523
7595
 
7524
7596
  if (iteratee === last(mapped)) {
7525
7597
  iteratee = undefined;
@@ -7554,7 +7626,7 @@
7554
7626
  */
7555
7627
  var intersectionWith = baseRest(function(arrays) {
7556
7628
  var comparator = last(arrays),
7557
- mapped = arrayMap(arrays, castArrayLikeObject);
7629
+ mapped = arrayMap(arrays, castArrayLikeObject);
7558
7630
 
7559
7631
  comparator = typeof comparator == 'function' ? comparator : undefined;
7560
7632
  if (comparator) {
@@ -7799,7 +7871,7 @@
7799
7871
  */
7800
7872
  var pullAt = flatRest(function(array, indexes) {
7801
7873
  var length = array == null ? 0 : array.length,
7802
- result = baseAt(array, indexes);
7874
+ result = baseAt(array, indexes);
7803
7875
 
7804
7876
  basePullAt(array, arrayMap(indexes, function(index) {
7805
7877
  return isIndex(index, length) ? +index : index;
@@ -7842,8 +7914,8 @@
7842
7914
  return result;
7843
7915
  }
7844
7916
  var index = -1,
7845
- indexes = [],
7846
- length = array.length;
7917
+ indexes = [],
7918
+ length = array.length;
7847
7919
 
7848
7920
  predicate = getIteratee(predicate, 3);
7849
7921
  while (++index < length) {
@@ -8689,7 +8761,7 @@
8689
8761
  */
8690
8762
  var zipWith = baseRest(function(arrays) {
8691
8763
  var length = arrays.length,
8692
- iteratee = length > 1 ? arrays[length - 1] : undefined;
8764
+ iteratee = length > 1 ? arrays[length - 1] : undefined;
8693
8765
 
8694
8766
  iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
8695
8767
  return unzipWith(arrays, iteratee);
@@ -8805,12 +8877,12 @@
8805
8877
  */
8806
8878
  var wrapperAt = flatRest(function(paths) {
8807
8879
  var length = paths.length,
8808
- start = length ? paths[0] : 0,
8809
- value = this.__wrapped__,
8810
- interceptor = function(object) { return baseAt(object, paths); };
8880
+ start = length ? paths[0] : 0,
8881
+ value = this.__wrapped__,
8882
+ interceptor = function(object) { return baseAt(object, paths); };
8811
8883
 
8812
8884
  if (length > 1 || this.__actions__.length ||
8813
- !(value instanceof LazyWrapper) || !isIndex(start)) {
8885
+ !(value instanceof LazyWrapper) || !isIndex(start)) {
8814
8886
  return this.thru(interceptor);
8815
8887
  }
8816
8888
  value = value.slice(start, +start + (length ? 1 : 0));
@@ -8915,7 +8987,7 @@
8915
8987
  this.__values__ = toArray(this.value());
8916
8988
  }
8917
8989
  var done = this.__index__ >= this.__values__.length,
8918
- value = done ? undefined : this.__values__[this.__index__++];
8990
+ value = done ? undefined : this.__values__[this.__index__++];
8919
8991
 
8920
8992
  return { 'done': done, 'value': value };
8921
8993
  }
@@ -8968,7 +9040,7 @@
8968
9040
  */
8969
9041
  function wrapperPlant(value) {
8970
9042
  var result,
8971
- parent = this;
9043
+ parent = this;
8972
9044
 
8973
9045
  while (parent instanceof baseLodash) {
8974
9046
  var clone = wrapperClone(parent);
@@ -9159,6 +9231,10 @@
9159
9231
  * // The `_.property` iteratee shorthand.
9160
9232
  * _.filter(users, 'active');
9161
9233
  * // => objects for ['barney']
9234
+ *
9235
+ * // Combining several predicates using `_.overEvery` or `_.overSome`.
9236
+ * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
9237
+ * // => objects for ['fred', 'barney']
9162
9238
  */
9163
9239
  function filter(collection, predicate) {
9164
9240
  var func = isArray(collection) ? arrayFilter : baseFilter;
@@ -9458,8 +9534,8 @@
9458
9534
  */
9459
9535
  var invokeMap = baseRest(function(collection, path, args) {
9460
9536
  var index = -1,
9461
- isFunc = typeof path == 'function',
9462
- result = isArrayLike(collection) ? Array(collection.length) : [];
9537
+ isFunc = typeof path == 'function',
9538
+ result = isArrayLike(collection) ? Array(collection.length) : [];
9463
9539
 
9464
9540
  baseEach(collection, function(value) {
9465
9541
  result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
@@ -9668,7 +9744,7 @@
9668
9744
  */
9669
9745
  function reduce(collection, iteratee, accumulator) {
9670
9746
  var func = isArray(collection) ? arrayReduce : baseReduce,
9671
- initAccum = arguments.length < 3;
9747
+ initAccum = arguments.length < 3;
9672
9748
 
9673
9749
  return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
9674
9750
  }
@@ -9697,7 +9773,7 @@
9697
9773
  */
9698
9774
  function reduceRight(collection, iteratee, accumulator) {
9699
9775
  var func = isArray(collection) ? arrayReduceRight : baseReduce,
9700
- initAccum = arguments.length < 3;
9776
+ initAccum = arguments.length < 3;
9701
9777
 
9702
9778
  return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
9703
9779
  }
@@ -9908,15 +9984,15 @@
9908
9984
  * var users = [
9909
9985
  * { 'user': 'fred', 'age': 48 },
9910
9986
  * { 'user': 'barney', 'age': 36 },
9911
- * { 'user': 'fred', 'age': 40 },
9987
+ * { 'user': 'fred', 'age': 30 },
9912
9988
  * { 'user': 'barney', 'age': 34 }
9913
9989
  * ];
9914
9990
  *
9915
9991
  * _.sortBy(users, [function(o) { return o.user; }]);
9916
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
9992
+ * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
9917
9993
  *
9918
9994
  * _.sortBy(users, ['user', 'age']);
9919
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
9995
+ * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
9920
9996
  */
9921
9997
  var sortBy = baseRest(function(collection, iteratees) {
9922
9998
  if (collection == null) {
@@ -10295,15 +10371,15 @@
10295
10371
  */
10296
10372
  function debounce(func, wait, options) {
10297
10373
  var lastArgs,
10298
- lastThis,
10299
- maxWait,
10300
- result,
10301
- timerId,
10302
- lastCallTime,
10303
- lastInvokeTime = 0,
10304
- leading = false,
10305
- maxing = false,
10306
- trailing = true;
10374
+ lastThis,
10375
+ maxWait,
10376
+ result,
10377
+ timerId,
10378
+ lastCallTime,
10379
+ lastInvokeTime = 0,
10380
+ leading = false,
10381
+ maxing = false,
10382
+ trailing = true;
10307
10383
 
10308
10384
  if (typeof func != 'function') {
10309
10385
  throw new TypeError(FUNC_ERROR_TEXT);
@@ -10318,7 +10394,7 @@
10318
10394
 
10319
10395
  function invokeFunc(time) {
10320
10396
  var args = lastArgs,
10321
- thisArg = lastThis;
10397
+ thisArg = lastThis;
10322
10398
 
10323
10399
  lastArgs = lastThis = undefined;
10324
10400
  lastInvokeTime = time;
@@ -10337,8 +10413,8 @@
10337
10413
 
10338
10414
  function remainingWait(time) {
10339
10415
  var timeSinceLastCall = time - lastCallTime,
10340
- timeSinceLastInvoke = time - lastInvokeTime,
10341
- timeWaiting = wait - timeSinceLastCall;
10416
+ timeSinceLastInvoke = time - lastInvokeTime,
10417
+ timeWaiting = wait - timeSinceLastCall;
10342
10418
 
10343
10419
  return maxing
10344
10420
  ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
@@ -10347,7 +10423,7 @@
10347
10423
 
10348
10424
  function shouldInvoke(time) {
10349
10425
  var timeSinceLastCall = time - lastCallTime,
10350
- timeSinceLastInvoke = time - lastInvokeTime;
10426
+ timeSinceLastInvoke = time - lastInvokeTime;
10351
10427
 
10352
10428
  // Either this is the first call, activity has stopped and we're at the
10353
10429
  // trailing edge, the system time has gone backwards and we're treating
@@ -10391,7 +10467,7 @@
10391
10467
 
10392
10468
  function debounced() {
10393
10469
  var time = now(),
10394
- isInvoking = shouldInvoke(time);
10470
+ isInvoking = shouldInvoke(time);
10395
10471
 
10396
10472
  lastArgs = arguments;
10397
10473
  lastThis = this;
@@ -10403,6 +10479,7 @@
10403
10479
  }
10404
10480
  if (maxing) {
10405
10481
  // Handle invocations in a tight loop.
10482
+ clearTimeout(timerId);
10406
10483
  timerId = setTimeout(timerExpired, wait);
10407
10484
  return invokeFunc(lastCallTime);
10408
10485
  }
@@ -10534,8 +10611,8 @@
10534
10611
  }
10535
10612
  var memoized = function() {
10536
10613
  var args = arguments,
10537
- key = resolver ? resolver.apply(this, args) : args[0],
10538
- cache = memoized.cache;
10614
+ key = resolver ? resolver.apply(this, args) : args[0],
10615
+ cache = memoized.cache;
10539
10616
 
10540
10617
  if (cache.has(key)) {
10541
10618
  return cache.get(key);
@@ -10648,7 +10725,7 @@
10648
10725
  var funcsLength = transforms.length;
10649
10726
  return baseRest(function(args) {
10650
10727
  var index = -1,
10651
- length = nativeMin(args.length, funcsLength);
10728
+ length = nativeMin(args.length, funcsLength);
10652
10729
 
10653
10730
  while (++index < length) {
10654
10731
  args[index] = transforms[index].call(this, args[index]);
@@ -10832,7 +10909,7 @@
10832
10909
  start = start == null ? 0 : nativeMax(toInteger(start), 0);
10833
10910
  return baseRest(function(args) {
10834
10911
  var array = args[start],
10835
- otherArgs = castSlice(args, 0, start);
10912
+ otherArgs = castSlice(args, 0, start);
10836
10913
 
10837
10914
  if (array) {
10838
10915
  arrayPush(otherArgs, array);
@@ -10887,7 +10964,7 @@
10887
10964
  */
10888
10965
  function throttle(func, wait, options) {
10889
10966
  var leading = true,
10890
- trailing = true;
10967
+ trailing = true;
10891
10968
 
10892
10969
  if (typeof func != 'function') {
10893
10970
  throw new TypeError(FUNC_ERROR_TEXT);
@@ -11472,8 +11549,8 @@
11472
11549
  return true;
11473
11550
  }
11474
11551
  if (isArrayLike(value) &&
11475
- (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
11476
- isBuffer(value) || isTypedArray(value) || isArguments(value))) {
11552
+ (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
11553
+ isBuffer(value) || isTypedArray(value) || isArguments(value))) {
11477
11554
  return !value.length;
11478
11555
  }
11479
11556
  var tag = getTag(value);
@@ -12318,7 +12395,7 @@
12318
12395
  return iteratorToArray(value[symIterator]());
12319
12396
  }
12320
12397
  var tag = getTag(value),
12321
- func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
12398
+ func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
12322
12399
 
12323
12400
  return func(value);
12324
12401
  }
@@ -12386,7 +12463,7 @@
12386
12463
  */
12387
12464
  function toInteger(value) {
12388
12465
  var result = toFinite(value),
12389
- remainder = result % 1;
12466
+ remainder = result % 1;
12390
12467
 
12391
12468
  return result === result ? (remainder ? result - remainder : result) : 0;
12392
12469
  }
@@ -12459,7 +12536,7 @@
12459
12536
  if (typeof value != 'string') {
12460
12537
  return value === 0 ? value : +value;
12461
12538
  }
12462
- value = value.replace(reTrim, '');
12539
+ value = baseTrim(value);
12463
12540
  var isBinary = reIsBinary.test(value);
12464
12541
  return (isBinary || reIsOctal.test(value))
12465
12542
  ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
@@ -12796,7 +12873,7 @@
12796
12873
  var value = object[key];
12797
12874
 
12798
12875
  if (value === undefined ||
12799
- (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
12876
+ (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
12800
12877
  object[key] = source[key];
12801
12878
  }
12802
12879
  }
@@ -13200,7 +13277,7 @@
13200
13277
  */
13201
13278
  var invert = createInverter(function(result, value, key) {
13202
13279
  if (value != null &&
13203
- typeof value.toString != 'function') {
13280
+ typeof value.toString != 'function') {
13204
13281
  value = nativeObjectToString.call(value);
13205
13282
  }
13206
13283
 
@@ -13235,7 +13312,7 @@
13235
13312
  */
13236
13313
  var invertBy = createInverter(function(result, value, key) {
13237
13314
  if (value != null &&
13238
- typeof value.toString != 'function') {
13315
+ typeof value.toString != 'function') {
13239
13316
  value = nativeObjectToString.call(value);
13240
13317
  }
13241
13318
 
@@ -13615,7 +13692,7 @@
13615
13692
  path = castPath(path, object);
13616
13693
 
13617
13694
  var index = -1,
13618
- length = path.length;
13695
+ length = path.length;
13619
13696
 
13620
13697
  // Ensure the loop is entered when path is empty.
13621
13698
  if (!length) {
@@ -13778,7 +13855,7 @@
13778
13855
  */
13779
13856
  function transform(object, iteratee, accumulator) {
13780
13857
  var isArr = isArray(object),
13781
- isArrLike = isArr || isBuffer(object) || isTypedArray(object);
13858
+ isArrLike = isArr || isBuffer(object) || isTypedArray(object);
13782
13859
 
13783
13860
  iteratee = getIteratee(iteratee, 4);
13784
13861
  if (accumulator == null) {
@@ -14526,7 +14603,7 @@
14526
14603
  */
14527
14604
  function replace() {
14528
14605
  var args = arguments,
14529
- string = toString(args[0]);
14606
+ string = toString(args[0]);
14530
14607
 
14531
14608
  return args.length < 3 ? string : string.replace(args[1], args[2]);
14532
14609
  }
@@ -14585,9 +14662,9 @@
14585
14662
  }
14586
14663
  string = toString(string);
14587
14664
  if (string && (
14588
- typeof separator == 'string' ||
14589
- (separator != null && !isRegExp(separator))
14590
- )) {
14665
+ typeof separator == 'string' ||
14666
+ (separator != null && !isRegExp(separator))
14667
+ )) {
14591
14668
  separator = baseToString(separator);
14592
14669
  if (!separator && hasUnicode(string)) {
14593
14670
  return castSlice(stringToArray(string), 0, limit);
@@ -14771,14 +14848,14 @@
14771
14848
  options = assignInWith({}, options, settings, customDefaultsAssignIn);
14772
14849
 
14773
14850
  var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
14774
- importsKeys = keys(imports),
14775
- importsValues = baseValues(imports, importsKeys);
14851
+ importsKeys = keys(imports),
14852
+ importsValues = baseValues(imports, importsKeys);
14776
14853
 
14777
14854
  var isEscaping,
14778
- isEvaluating,
14779
- index = 0,
14780
- interpolate = options.interpolate || reNoMatch,
14781
- source = "__p += '";
14855
+ isEvaluating,
14856
+ index = 0,
14857
+ interpolate = options.interpolate || reNoMatch,
14858
+ source = "__p += '";
14782
14859
 
14783
14860
  // Compile the regexp to match each delimiter.
14784
14861
  var reDelimiters = RegExp(
@@ -14786,13 +14863,16 @@
14786
14863
  interpolate.source + '|' +
14787
14864
  (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
14788
14865
  (options.evaluate || reNoMatch).source + '|$'
14789
- , 'g');
14866
+ , 'g');
14790
14867
 
14791
14868
  // Use a sourceURL for easier debugging.
14869
+ // The sourceURL gets injected into the source that's eval-ed, so be careful
14870
+ // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
14871
+ // and escape the comment, thus injecting code that gets evaled.
14792
14872
  var sourceURL = '//# sourceURL=' +
14793
- ('sourceURL' in options
14794
- ? options.sourceURL
14795
- : ('lodash.templateSources[' + (++templateCounter) + ']')
14873
+ (hasOwnProperty.call(options, 'sourceURL')
14874
+ ? (options.sourceURL + '').replace(/\s/g, ' ')
14875
+ : ('lodash.templateSources[' + (++templateCounter) + ']')
14796
14876
  ) + '\n';
14797
14877
 
14798
14878
  string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
@@ -14824,10 +14904,16 @@
14824
14904
 
14825
14905
  // If `variable` is not specified wrap a with-statement around the generated
14826
14906
  // code to add the data object to the top of the scope chain.
14827
- var variable = options.variable;
14907
+ var variable = hasOwnProperty.call(options, 'variable') && options.variable;
14828
14908
  if (!variable) {
14829
14909
  source = 'with (obj) {\n' + source + '\n}\n';
14830
14910
  }
14911
+ // Throw an error if a forbidden character was found in `variable`, to prevent
14912
+ // potential command injection attacks.
14913
+ else if (reForbiddenIdentifierChars.test(variable)) {
14914
+ throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
14915
+ }
14916
+
14831
14917
  // Cleanup code by stripping empty strings.
14832
14918
  source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
14833
14919
  .replace(reEmptyStringMiddle, '$1')
@@ -14836,18 +14922,18 @@
14836
14922
  // Frame code as the function body.
14837
14923
  source = 'function(' + (variable || 'obj') + ') {\n' +
14838
14924
  (variable
14839
- ? ''
14840
- : 'obj || (obj = {});\n'
14925
+ ? ''
14926
+ : 'obj || (obj = {});\n'
14841
14927
  ) +
14842
14928
  "var __t, __p = ''" +
14843
14929
  (isEscaping
14844
- ? ', __e = _.escape'
14845
- : ''
14930
+ ? ', __e = _.escape'
14931
+ : ''
14846
14932
  ) +
14847
14933
  (isEvaluating
14848
- ? ', __j = Array.prototype.join;\n' +
14934
+ ? ', __j = Array.prototype.join;\n' +
14849
14935
  "function print() { __p += __j.call(arguments, '') }\n"
14850
- : ';\n'
14936
+ : ';\n'
14851
14937
  ) +
14852
14938
  source +
14853
14939
  'return __p\n}';
@@ -14941,15 +15027,15 @@
14941
15027
  function trim(string, chars, guard) {
14942
15028
  string = toString(string);
14943
15029
  if (string && (guard || chars === undefined)) {
14944
- return string.replace(reTrim, '');
15030
+ return baseTrim(string);
14945
15031
  }
14946
15032
  if (!string || !(chars = baseToString(chars))) {
14947
15033
  return string;
14948
15034
  }
14949
15035
  var strSymbols = stringToArray(string),
14950
- chrSymbols = stringToArray(chars),
14951
- start = charsStartIndex(strSymbols, chrSymbols),
14952
- end = charsEndIndex(strSymbols, chrSymbols) + 1;
15036
+ chrSymbols = stringToArray(chars),
15037
+ start = charsStartIndex(strSymbols, chrSymbols),
15038
+ end = charsEndIndex(strSymbols, chrSymbols) + 1;
14953
15039
 
14954
15040
  return castSlice(strSymbols, start, end).join('');
14955
15041
  }
@@ -14976,13 +15062,13 @@
14976
15062
  function trimEnd(string, chars, guard) {
14977
15063
  string = toString(string);
14978
15064
  if (string && (guard || chars === undefined)) {
14979
- return string.replace(reTrimEnd, '');
15065
+ return string.slice(0, trimmedEndIndex(string) + 1);
14980
15066
  }
14981
15067
  if (!string || !(chars = baseToString(chars))) {
14982
15068
  return string;
14983
15069
  }
14984
15070
  var strSymbols = stringToArray(string),
14985
- end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
15071
+ end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
14986
15072
 
14987
15073
  return castSlice(strSymbols, 0, end).join('');
14988
15074
  }
@@ -15015,7 +15101,7 @@
15015
15101
  return string;
15016
15102
  }
15017
15103
  var strSymbols = stringToArray(string),
15018
- start = charsStartIndex(strSymbols, stringToArray(chars));
15104
+ start = charsStartIndex(strSymbols, stringToArray(chars));
15019
15105
 
15020
15106
  return castSlice(strSymbols, start).join('');
15021
15107
  }
@@ -15059,7 +15145,7 @@
15059
15145
  */
15060
15146
  function truncate(string, options) {
15061
15147
  var length = DEFAULT_TRUNC_LENGTH,
15062
- omission = DEFAULT_TRUNC_OMISSION;
15148
+ omission = DEFAULT_TRUNC_OMISSION;
15063
15149
 
15064
15150
  if (isObject(options)) {
15065
15151
  var separator = 'separator' in options ? options.separator : separator;
@@ -15093,7 +15179,7 @@
15093
15179
  if (isRegExp(separator)) {
15094
15180
  if (string.slice(end).search(separator)) {
15095
15181
  var match,
15096
- substring = result;
15182
+ substring = result;
15097
15183
 
15098
15184
  if (!separator.global) {
15099
15185
  separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
@@ -15308,7 +15394,7 @@
15308
15394
  */
15309
15395
  function cond(pairs) {
15310
15396
  var length = pairs == null ? 0 : pairs.length,
15311
- toIteratee = getIteratee();
15397
+ toIteratee = getIteratee();
15312
15398
 
15313
15399
  pairs = !length ? [] : arrayMap(pairs, function(pair) {
15314
15400
  if (typeof pair[1] != 'function') {
@@ -15530,6 +15616,9 @@
15530
15616
  * values against any array or object value, respectively. See `_.isEqual`
15531
15617
  * for a list of supported value comparisons.
15532
15618
  *
15619
+ * **Note:** Multiple values can be checked by combining several matchers
15620
+ * using `_.overSome`
15621
+ *
15533
15622
  * @static
15534
15623
  * @memberOf _
15535
15624
  * @since 3.0.0
@@ -15545,6 +15634,10 @@
15545
15634
  *
15546
15635
  * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
15547
15636
  * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
15637
+ *
15638
+ * // Checking for several possible values
15639
+ * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
15640
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
15548
15641
  */
15549
15642
  function matches(source) {
15550
15643
  return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
@@ -15559,6 +15652,9 @@
15559
15652
  * `srcValue` values against any array or object value, respectively. See
15560
15653
  * `_.isEqual` for a list of supported value comparisons.
15561
15654
  *
15655
+ * **Note:** Multiple values can be checked by combining several matchers
15656
+ * using `_.overSome`
15657
+ *
15562
15658
  * @static
15563
15659
  * @memberOf _
15564
15660
  * @since 3.2.0
@@ -15575,6 +15671,10 @@
15575
15671
  *
15576
15672
  * _.find(objects, _.matchesProperty('a', 4));
15577
15673
  * // => { 'a': 4, 'b': 5, 'c': 6 }
15674
+ *
15675
+ * // Checking for several possible values
15676
+ * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
15677
+ * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
15578
15678
  */
15579
15679
  function matchesProperty(path, srcValue) {
15580
15680
  return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
@@ -15677,17 +15777,17 @@
15677
15777
  */
15678
15778
  function mixin(object, source, options) {
15679
15779
  var props = keys(source),
15680
- methodNames = baseFunctions(source, props);
15780
+ methodNames = baseFunctions(source, props);
15681
15781
 
15682
15782
  if (options == null &&
15683
- !(isObject(source) && (methodNames.length || !props.length))) {
15783
+ !(isObject(source) && (methodNames.length || !props.length))) {
15684
15784
  options = source;
15685
15785
  source = object;
15686
15786
  object = this;
15687
15787
  methodNames = baseFunctions(source, keys(source));
15688
15788
  }
15689
15789
  var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
15690
- isFunc = isFunction(object);
15790
+ isFunc = isFunction(object);
15691
15791
 
15692
15792
  arrayEach(methodNames, function(methodName) {
15693
15793
  var func = source[methodName];
@@ -15697,7 +15797,7 @@
15697
15797
  var chainAll = this.__chain__;
15698
15798
  if (chain || chainAll) {
15699
15799
  var result = object(this.__wrapped__),
15700
- actions = result.__actions__ = copyArray(this.__actions__);
15800
+ actions = result.__actions__ = copyArray(this.__actions__);
15701
15801
 
15702
15802
  actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
15703
15803
  result.__chain__ = chainAll;
@@ -15798,6 +15898,10 @@
15798
15898
  * Creates a function that checks if **all** of the `predicates` return
15799
15899
  * truthy when invoked with the arguments it receives.
15800
15900
  *
15901
+ * Following shorthands are possible for providing predicates.
15902
+ * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
15903
+ * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
15904
+ *
15801
15905
  * @static
15802
15906
  * @memberOf _
15803
15907
  * @since 4.0.0
@@ -15824,6 +15928,10 @@
15824
15928
  * Creates a function that checks if **any** of the `predicates` return
15825
15929
  * truthy when invoked with the arguments it receives.
15826
15930
  *
15931
+ * Following shorthands are possible for providing predicates.
15932
+ * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
15933
+ * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
15934
+ *
15827
15935
  * @static
15828
15936
  * @memberOf _
15829
15937
  * @since 4.0.0
@@ -15843,6 +15951,9 @@
15843
15951
  *
15844
15952
  * func(NaN);
15845
15953
  * // => false
15954
+ *
15955
+ * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
15956
+ * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
15846
15957
  */
15847
15958
  var overSome = createOver(arraySome);
15848
15959
 
@@ -16100,7 +16211,7 @@
16100
16211
  return [];
16101
16212
  }
16102
16213
  var index = MAX_ARRAY_LENGTH,
16103
- length = nativeMin(n, MAX_ARRAY_LENGTH);
16214
+ length = nativeMin(n, MAX_ARRAY_LENGTH);
16104
16215
 
16105
16216
  iteratee = getIteratee(iteratee);
16106
16217
  n -= MAX_ARRAY_LENGTH;
@@ -16879,7 +16990,7 @@
16879
16990
  // Add `LazyWrapper` methods that accept an `iteratee` value.
16880
16991
  arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
16881
16992
  var type = index + 1,
16882
- isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
16993
+ isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
16883
16994
 
16884
16995
  LazyWrapper.prototype[methodName] = function(iteratee) {
16885
16996
  var result = this.clone();
@@ -16965,19 +17076,19 @@
16965
17076
  // Add `LazyWrapper` methods to `lodash.prototype`.
16966
17077
  baseForOwn(LazyWrapper.prototype, function(func, methodName) {
16967
17078
  var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
16968
- isTaker = /^(?:head|last)$/.test(methodName),
16969
- lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
16970
- retUnwrapped = isTaker || /^find/.test(methodName);
17079
+ isTaker = /^(?:head|last)$/.test(methodName),
17080
+ lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
17081
+ retUnwrapped = isTaker || /^find/.test(methodName);
16971
17082
 
16972
17083
  if (!lodashFunc) {
16973
17084
  return;
16974
17085
  }
16975
17086
  lodash.prototype[methodName] = function() {
16976
17087
  var value = this.__wrapped__,
16977
- args = isTaker ? [1] : arguments,
16978
- isLazy = value instanceof LazyWrapper,
16979
- iteratee = args[0],
16980
- useLazy = isLazy || isArray(value);
17088
+ args = isTaker ? [1] : arguments,
17089
+ isLazy = value instanceof LazyWrapper,
17090
+ iteratee = args[0],
17091
+ useLazy = isLazy || isArray(value);
16981
17092
 
16982
17093
  var interceptor = function(value) {
16983
17094
  var result = lodashFunc.apply(lodash, arrayPush([value], args));
@@ -16989,9 +17100,9 @@
16989
17100
  isLazy = useLazy = false;
16990
17101
  }
16991
17102
  var chainAll = this.__chain__,
16992
- isHybrid = !!this.__actions__.length,
16993
- isUnwrapped = retUnwrapped && !chainAll,
16994
- onlyLazy = isLazy && !isHybrid;
17103
+ isHybrid = !!this.__actions__.length,
17104
+ isUnwrapped = retUnwrapped && !chainAll,
17105
+ onlyLazy = isLazy && !isHybrid;
16995
17106
 
16996
17107
  if (!retUnwrapped && useLazy) {
16997
17108
  value = onlyLazy ? value : new LazyWrapper(this);
@@ -17010,8 +17121,8 @@
17010
17121
  // Add `Array` methods to `lodash.prototype`.
17011
17122
  arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
17012
17123
  var func = arrayProto[methodName],
17013
- chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
17014
- retUnwrapped = /^(?:pop|shift)$/.test(methodName);
17124
+ chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
17125
+ retUnwrapped = /^(?:pop|shift)$/.test(methodName);
17015
17126
 
17016
17127
  lodash.prototype[methodName] = function() {
17017
17128
  var args = arguments;
@@ -17029,10 +17140,11 @@
17029
17140
  baseForOwn(LazyWrapper.prototype, function(func, methodName) {
17030
17141
  var lodashFunc = lodash[methodName];
17031
17142
  if (lodashFunc) {
17032
- var key = (lodashFunc.name + ''),
17033
- names = realNames[key] || (realNames[key] = []);
17034
-
17035
- names.push({ 'name': methodName, 'func': lodashFunc });
17143
+ var key = lodashFunc.name + '';
17144
+ if (!hasOwnProperty.call(realNames, key)) {
17145
+ realNames[key] = [];
17146
+ }
17147
+ realNames[key].push({ 'name': methodName, 'func': lodashFunc });
17036
17148
  }
17037
17149
  });
17038
17150