{"version":3,"sources":["jsdelivr-header.js","/npm/query-it@1.3.1/src/utils.ts","/npm/query-it@1.3.1/node_modules/lodash.orderby/index.js","/npm/query-it@1.3.1/node_modules/lodash.debounce/index.js","/npm/query-it@1.3.1/src/query-it.ts"],"names":[],"mappings":"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","file":"/npm/query-it@1.3.1/dist/query-it.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/query-it@1.3.1/dist/query-it.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { FilterQuery } from \"./types\";\n\nfunction isEqual(target: any, expect: any): boolean {\n  if (typeof expect === \"function\") {\n    return expect(target);\n  } else {\n    return expect === target;\n  }\n}\n\nexport function filterData(data: any[], query: FilterQuery<any>) {\n  return data.filter(item =>\n    Object.keys(query).every(field => {\n      if (item.hasOwnProperty(field)) {\n        const target = item[field];\n        const expect = query[field];\n        if (expect instanceof Array) {\n          if (!expect.length) {\n            return true;\n          }\n          return expect.some(expect => isEqual(target, expect));\n        } else {\n          if (!expect) {\n            return true;\n          }\n          return isEqual(target, expect);\n        }\n      } else {\n        return false;\n      }\n    })\n  );\n}\n\nexport function searchData(data: any[], text: string, columns?: any[]) {\n  if(!text) {\n    return [...data];\n  }\n  const regexp = new RegExp(text, \"i\");\n  if (columns) {\n    return data.filter(item =>\n      columns.some(column => item[column].toString().search(regexp) > -1)\n    );\n  } else {\n    return data.filter(item =>\n      Object.keys(item).some(\n        column => item[column].toString().search(regexp) > -1\n      )\n    );\n  }\n}\n\nexport function paginateData(data: any[], current: number, size?: number) {\n  if (size === undefined || size < 0) {\n    return [...data];\n  }\n  if (current < 1) {\n    current = 1;\n  }\n  return data.slice((current - 1) * size, current * size);\n}\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n    PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    reLeadingDot = /^\\./,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array ? array.length : 0,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values ? values.length : 0;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var cache = this.__data__;\n  if (cache instanceof ListCache) {\n    var pairs = cache.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      return this;\n    }\n    cache = this.__data__ = new MapCache(pairs);\n  }\n  cache.set(key, value);\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n *  The bitmask may be composed of the following flags:\n *     1 - Unordered comparison\n *     2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = getTag(object);\n    objTag = objTag == argsTag ? objectTag : objTag;\n  }\n  if (!othIsArr) {\n    othTag = getTag(other);\n    othTag = othTag == argsTag ? objectTag : othTag;\n  }\n  var objIsObj = objTag == objectTag && !isHostObject(object),\n      othIsObj = othTag == objectTag && !isHostObject(other),\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n      : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n  }\n  if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n  };\n}\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  var index = -1;\n  iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n  return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!seen.has(othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n              return seen.add(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, customizer, bitmask, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= UNORDERED_COMPARE_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = objectToString.call(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : undefined;\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var result,\n      index = -1,\n      length = path.length;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result) {\n    return result;\n  }\n  var length = object ? object.length : 0;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n  string = toString(string);\n\n  var result = [];\n  if (reLeadingDot.test(string)) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 34 },\n *   { 'user': 'fred',   'age': 40 },\n *   { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nfunction orderBy(collection, iteratees, orders, guard) {\n  if (collection == null) {\n    return [];\n  }\n  if (!isArray(iteratees)) {\n    iteratees = iteratees == null ? [] : [iteratees];\n  }\n  orders = guard ? undefined : orders;\n  if (!isArray(orders)) {\n    orders = orders == null ? [] : [orders];\n  }\n  return baseOrderBy(collection, iteratees, orders);\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result);\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = orderBy;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import {\n  FilterQuery,\n  FilterFunction,\n  SearchFunction,\n  SortFunction,\n  SortOrder\n} from \"./types\";\nimport { filterData, searchData, paginateData } from \"./utils\";\nimport orderBy from \"lodash.orderby\";\nimport debounce from \"lodash.debounce\";\n\nexport default class QueryIt<T = any> {\n  /**\n   *\n   * @param onChange On Update\n   * @param wait Hooks debounce waiting time\n   */\n  constructor(onChange?: () => void, wait: number = 0) {\n    function onUpdate() {\n      onChange && onChange();\n    }\n    this.onUpdate = debounce(onUpdate, wait);\n  }\n\n  onUpdate: () => void;\n\n  get items(): T[] {\n    return paginateData(\n      this._paginationCache,\n      this._currentPage,\n      this._pageSize\n    );\n  }\n  /**\n   * 未分页的记录总数\n   */\n  get total(): number {\n    return this._paginationCache.length;\n  }\n\n  /**\n   * 总页数\n   */\n  get pageCount() {\n    return this._pageSize > 0 ? Math.ceil(this.total / this._pageSize) : 1;\n  }\n\n  get currentPage() {\n    return this._currentPage;\n  }\n\n  get pageSize() {\n    return this._pageSize;\n  }\n\n  setPageSize(pageSize: number) {\n    this._pageSize = pageSize;\n    this.onUpdate();\n  }\n\n  setCurrentPage(currentPage: number) {\n    this._currentPage = currentPage;\n    this._fixPageException();\n    this.onUpdate();\n  }\n\n  load(source: T[]) {\n    this._source = source;\n    this._filterArgs = null;\n    this._sortArgs = null;\n    this._currentPage = 1;\n    this.onUpdate();\n  }\n\n  sort(columns: string | string[], order: SortOrder | SortOrder[]): void;\n  sort(callbackFn: SortFunction<T>): void;\n  sort(callbackOrColumns: any, order?: any) {\n    this._sortArgs = arguments;\n    this._currentPage = 1;\n    this._fixPageException();\n    this.onUpdate();\n  }\n\n  search(text: string, columns?: string[]): void;\n  search(callbackFn: SearchFunction<T>): void;\n  search(callbackOrText: SearchFunction<T> | string, columns?: string[]) {\n    this._searchArgs = arguments;\n    this._currentPage = 1;\n    this._fixPageException();\n    this.onUpdate();\n  }\n\n  filter(query: FilterQuery<T>): void;\n  filter(callbackFn: FilterFunction<T>): void;\n  filter(callbackOrQuery: FilterQuery<T> | FilterFunction<T>) {\n    this._filterArgs = arguments;\n    this._currentPage = 1;\n    this._fixPageException();\n    this.onUpdate();\n  }\n\n  // Data\n  private _source: T[] = [];\n\n  // Param\n  private _filterArgs: any;\n  private _sortArgs: any;\n  private _searchArgs: any;\n  private _currentPage: number = 0;\n  private _pageSize: number = -1;\n\n  // Cache\n  private get _sortingCache() {\n    let result = this._source;\n    if (this._filterArgs) {\n      // @ts-ignore\n      result = this._filter(result, ...this._filterArgs);\n    }\n    if (this._searchArgs) {\n      // @ts-ignore\n      result = this._search(result, ...this._searchArgs);\n    }\n    return result;\n  }\n  private get _paginationCache() {\n    let result = this._sortingCache;\n    if (this._sortArgs) {\n      // @ts-ignore\n      return this._sort(result, ...this._sortArgs);\n    }\n    return result;\n  }\n\n  private _search(data: T[], callbackFn: SearchFunction<T>): void;\n  private _search(data: T[], text: string, columns?: string[]): void;\n  private _search(\n    data: T[],\n    callbackOrText: SearchFunction<T> | string,\n    columns?: string[]\n  ) {\n    // text\n    if (typeof callbackOrText === \"string\") {\n      return searchData(data, callbackOrText, columns);\n      //callback\n    } else {\n      return [...callbackOrText(data)];\n    }\n  }\n  private _filter(data: T[], query: FilterQuery<T>): T[];\n  private _filter(data: T[], callbackFn: FilterFunction<T>): T[];\n  private _filter(\n    data: T[],\n    callbackOrQuery: FilterQuery<T> | FilterFunction<T>\n  ) {\n    // query\n    if (typeof callbackOrQuery === \"function\") {\n      return data.filter(callbackOrQuery);\n      // callback\n    } else {\n      return filterData(data, callbackOrQuery);\n    }\n  }\n\n  private _sort(data: T[], callbackFn: SortFunction<T>): void;\n  private _sort(\n    data: T[],\n    columns: string | string[],\n    order: SortOrder | SortOrder[]\n  ): void;\n  private _sort(\n    data: T[],\n    callbackOrColumns: SortFunction<T> | string | string[],\n    order?: SortOrder | SortOrder[]\n  ) {\n    // callback\n    if (typeof callbackOrColumns === \"function\") {\n      return data.sort(callbackOrColumns);\n    } else {\n      // columns\n      return orderBy(data, callbackOrColumns, order);\n    }\n  }\n\n  private _fixPageException() {\n    if (this._currentPage > this.pageCount) {\n      this._currentPage = this.pageCount;\n    }\n    if (this._currentPage < 1) {\n      this._currentPage = 1;\n    }\n  }\n}\n"]}