{"version":3,"file":"2403.dde9a5eb.js","mappings":"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","sources":["webpack://@finviz/website/../node_modules/@finviz/spine/index.js","webpack://@finviz/website/../node_modules/@finviz/spine/lib/spine.js","webpack://@finviz/website/../node_modules/date-fns/esm/addBusinessDays/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isSaturday/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isSunday/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isSameDay/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isSameMonth/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isSameWeek/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isWeekend/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/isWithinInterval/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/setMonth/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/getDaysInMonth/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/set/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/startOfMonth/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/startOfWeek/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/startOfYear/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/subYears/index.js","webpack://@finviz/website/../node_modules/date-fns/esm/addYears/index.js","webpack://@finviz/website/../node_modules/decode-uri-component/index.js","webpack://@finviz/website/../node_modules/filter-obj/index.js","webpack://@finviz/website/../node_modules/lodash.flowright/index.js","webpack://@finviz/website/../node_modules/lodash.merge/index.js","webpack://@finviz/website/../node_modules/lodash.mergewith/index.js","webpack://@finviz/website/../node_modules/lodash.omit/index.js","webpack://@finviz/website/../node_modules/query-string/index.js","webpack://@finviz/website/../node_modules/re-resizable/lib/resizer.js","webpack://@finviz/website/../node_modules/re-resizable/lib/index.js","webpack://@finviz/website/../node_modules/split-on-first/index.js","webpack://@finviz/website/../node_modules/strict-uri-encode/index.js","webpack://@finviz/website/../node_modules/core-js/internals/delete-property-or-throw.js","webpack://@finviz/website/../node_modules/core-js/modules/es.array.find-last-index.js","webpack://@finviz/website/../node_modules/core-js/modules/es.array.unshift.js","webpack://@finviz/website/../node_modules/bezier-js/src/utils.js","webpack://@finviz/website/../node_modules/bezier-js/src/poly-bezier.js","webpack://@finviz/website/../node_modules/bezier-js/src/bezier.js"],"sourcesContent":["module.exports = require('./lib/spine');","// Generated by CoffeeScript 1.11.1\n\n/*\nSpine.js MVC library\nReleased under the MIT License\n */\n\n(function() {\n var Collection, Events, Instance, Log, Model, Module, Singleton, Spine, association, createObject, makeArray, moduleKeywords, singularize, underscore,\n slice = [].slice,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n Events = {\n on: function(ev, callback) {\n var base, evs, j, len, name;\n evs = ev.split(' ');\n if (!this.hasOwnProperty('_callbacks')) {\n this._callbacks || (this._callbacks = {});\n }\n for (j = 0, len = evs.length; j < len; j++) {\n name = evs[j];\n (base = this._callbacks)[name] || (base[name] = []);\n this._callbacks[name].push(callback);\n }\n return this;\n },\n one: function(ev, callback) {\n var handler;\n return this.on(ev, handler = function() {\n this.off(ev, handler);\n return callback.apply(this, arguments);\n });\n },\n trigger: function() {\n var args, callback, ev, j, len, list, ref;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n ev = args.shift();\n list = (ref = this._callbacks) != null ? ref[ev] : void 0;\n if (!list) {\n return;\n }\n for (j = 0, len = list.length; j < len; j++) {\n callback = list[j];\n if (callback.apply(this, args) === false) {\n break;\n }\n }\n return true;\n },\n listenTo: function(obj, ev, callback) {\n obj.on(ev, callback);\n this.listeningTo || (this.listeningTo = []);\n this.listeningTo.push({\n obj: obj,\n ev: ev,\n callback: callback\n });\n return this;\n },\n listenToOnce: function(obj, ev, callback) {\n var handler, listeningToOnce;\n listeningToOnce = this.listeningToOnce || (this.listeningToOnce = []);\n obj.on(ev, handler = function() {\n var i, idx, j, len, lt;\n idx = -1;\n for (i = j = 0, len = listeningToOnce.length; j < len; i = ++j) {\n lt = listeningToOnce[i];\n if (lt.obj === obj) {\n if (lt.ev === ev && lt.callback === handler) {\n idx = i;\n }\n }\n }\n obj.off(ev, handler);\n if (idx !== -1) {\n listeningToOnce.splice(idx, 1);\n }\n return callback.apply(this, arguments);\n });\n listeningToOnce.push({\n obj: obj,\n ev: ev,\n callback: handler\n });\n return this;\n },\n stopListening: function(obj, events, callback) {\n var e, ev, evts, idx, j, k, l, len, len1, len2, len3, listeningTo, lt, m, n, ref, ref1, ref2;\n if (arguments.length === 0) {\n ref = [this.listeningTo, this.listeningToOnce];\n for (j = 0, len = ref.length; j < len; j++) {\n listeningTo = ref[j];\n if (!(listeningTo != null ? listeningTo.length : void 0)) {\n continue;\n }\n for (k = 0, len1 = listeningTo.length; k < len1; k++) {\n lt = listeningTo[k];\n lt.obj.off(lt.ev, lt.callback);\n }\n }\n this.listeningTo = void 0;\n this.listeningToOnce = void 0;\n } else if (obj) {\n events = events ? events.split(' ') : [void 0];\n ref1 = [this.listeningTo, this.listeningToOnce];\n for (l = 0, len2 = ref1.length; l < len2; l++) {\n listeningTo = ref1[l];\n if (!listeningTo) {\n continue;\n }\n for (m = 0, len3 = events.length; m < len3; m++) {\n ev = events[m];\n for (idx = n = ref2 = listeningTo.length - 1; ref2 <= 0 ? n <= 0 : n >= 0; idx = ref2 <= 0 ? ++n : --n) {\n lt = listeningTo[idx];\n if (lt.obj !== obj) {\n continue;\n }\n if (callback && lt.callback !== callback) {\n continue;\n }\n if ((!ev) || (ev === lt.ev)) {\n lt.obj.off(lt.ev, lt.callback);\n if (idx !== -1) {\n listeningTo.splice(idx, 1);\n }\n } else if (ev) {\n evts = lt.ev.split(' ');\n if (indexOf.call(evts, ev) >= 0) {\n evts = (function() {\n var len4, p, results;\n results = [];\n for (p = 0, len4 = evts.length; p < len4; p++) {\n e = evts[p];\n if (e !== ev) {\n results.push(e);\n }\n }\n return results;\n })();\n lt.ev = evts.join(' ').trim();\n lt.obj.off(ev, lt.callback);\n }\n }\n }\n }\n }\n }\n return this;\n },\n off: function(ev, callback) {\n var cb, evs, i, j, k, len, len1, list, name, ref;\n if (arguments.length === 0) {\n this._callbacks = {};\n return this;\n }\n if (!ev) {\n return this;\n }\n evs = ev.split(' ');\n for (j = 0, len = evs.length; j < len; j++) {\n name = evs[j];\n list = (ref = this._callbacks) != null ? ref[name] : void 0;\n if (!list) {\n continue;\n }\n if (!callback) {\n delete this._callbacks[name];\n continue;\n }\n for (i = k = 0, len1 = list.length; k < len1; i = ++k) {\n cb = list[i];\n if (!(cb === callback)) {\n continue;\n }\n list = list.slice();\n list.splice(i, 1);\n this._callbacks[name] = list;\n break;\n }\n }\n return this;\n }\n };\n\n Events.bind = Events.on;\n\n Events.unbind = Events.off;\n\n Log = {\n trace: true,\n logPrefix: '(App)',\n log: function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n if (!this.trace) {\n return;\n }\n if (this.logPrefix) {\n args.unshift(this.logPrefix);\n }\n if (typeof console !== \"undefined\" && console !== null) {\n if (typeof console.log === \"function\") {\n console.log.apply(console, args);\n }\n }\n return this;\n }\n };\n\n moduleKeywords = ['included', 'extended'];\n\n Module = (function() {\n Module.include = function(obj) {\n var key, ref, value;\n if (!obj) {\n throw new Error('include(obj) requires obj');\n }\n for (key in obj) {\n value = obj[key];\n if (indexOf.call(moduleKeywords, key) < 0) {\n this.prototype[key] = value;\n }\n }\n if ((ref = obj.included) != null) {\n ref.apply(this);\n }\n return this;\n };\n\n Module.extend = function(obj) {\n var key, ref, value;\n if (!obj) {\n throw new Error('extend(obj) requires obj');\n }\n for (key in obj) {\n value = obj[key];\n if (indexOf.call(moduleKeywords, key) < 0) {\n this[key] = value;\n }\n }\n if ((ref = obj.extended) != null) {\n ref.apply(this);\n }\n return this;\n };\n\n Module.extend(Events);\n\n Module.include(Events);\n\n Module.proxy = function(func) {\n return (function(_this) {\n return function() {\n return func.apply(_this, arguments);\n };\n })(this);\n };\n\n Module.prototype.proxy = function(func) {\n return (function(_this) {\n return function() {\n return func.apply(_this, arguments);\n };\n })(this);\n };\n\n function Module() {\n if (typeof this.init === \"function\") {\n this.init.apply(this, arguments);\n }\n }\n\n return Module;\n\n })();\n\n Model = (function(superClass) {\n extend(Model, superClass);\n\n Model.records = [];\n\n Model.irecords = {};\n\n Model.attributes = [];\n\n Model.configure = function() {\n var attributes, name;\n name = arguments[0], attributes = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n this.className = name;\n this.deleteAll();\n if (attributes.length) {\n this.attributes = attributes;\n }\n this.attributes && (this.attributes = makeArray(this.attributes));\n this.attributes || (this.attributes = []);\n this.off();\n return this;\n };\n\n Model.toString = function() {\n return this.className + \"(\" + (this.attributes.join(\", \")) + \")\";\n };\n\n Model.find = function(id, notFound) {\n var ref;\n if (notFound == null) {\n notFound = this.notFound;\n }\n return ((ref = this.irecords[id]) != null ? ref.clone() : void 0) || (notFound != null ? notFound.call(this, id) : void 0);\n };\n\n Model.findAll = function(ids, notFound) {\n var id, j, len, results;\n results = [];\n for (j = 0, len = ids.length; j < len; j++) {\n id = ids[j];\n if (this.find(id, notFound)) {\n results.push(this.find(id));\n }\n }\n return results;\n };\n\n Model.notFound = function(id) {\n return null;\n };\n\n Model.exists = function(id) {\n return Boolean(this.irecords[id]);\n };\n\n Model.addRecord = function(record, idx) {\n var root;\n if (root = this.irecords[record.id || record.cid]) {\n root.refresh(record);\n } else {\n record.id || (record.id = record.cid);\n this.irecords[record.id] = this.irecords[record.cid] = record;\n if (idx !== void 0) {\n this.records.splice(idx, 0, record);\n } else {\n this.records.push(record);\n }\n }\n return record;\n };\n\n Model.refresh = function(values, options) {\n var j, len, record, records, result;\n if (options == null) {\n options = {};\n }\n if (options.clear) {\n this.deleteAll();\n }\n records = this.fromJSON(values);\n if (!Array.isArray(records)) {\n records = [records];\n }\n for (j = 0, len = records.length; j < len; j++) {\n record = records[j];\n this.addRecord(record);\n }\n this.sort();\n result = this.cloneArray(records);\n this.trigger('refresh', result, options);\n return result;\n };\n\n Model.select = function(callback) {\n var j, len, record, ref, results;\n ref = this.records;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n record = ref[j];\n if (callback(record)) {\n results.push(record.clone());\n }\n }\n return results;\n };\n\n Model.findByAttribute = function(name, value) {\n var j, len, record, ref;\n ref = this.records;\n for (j = 0, len = ref.length; j < len; j++) {\n record = ref[j];\n if (record[name] === value) {\n return record.clone();\n }\n }\n return null;\n };\n\n Model.findAllByAttribute = function(name, value) {\n return this.select(function(item) {\n return item[name] === value;\n });\n };\n\n Model.each = function(callback) {\n var j, len, record, ref, results;\n ref = this.records;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n record = ref[j];\n results.push(callback(record.clone()));\n }\n return results;\n };\n\n Model.all = function() {\n return this.cloneArray(this.records);\n };\n\n Model.slice = function(begin, end) {\n if (begin == null) {\n begin = 0;\n }\n return this.cloneArray(this.records.slice(begin, end));\n };\n\n Model.first = function(end) {\n var ref;\n if (end == null) {\n end = 1;\n }\n if (end > 1) {\n return this.cloneArray(this.records.slice(0, end));\n } else {\n return (ref = this.records[0]) != null ? ref.clone() : void 0;\n }\n };\n\n Model.last = function(begin) {\n var ref;\n if (typeof begin === 'number') {\n return this.cloneArray(this.records.slice(-begin));\n } else {\n return (ref = this.records[this.records.length - 1]) != null ? ref.clone() : void 0;\n }\n };\n\n Model.count = function() {\n return this.records.length;\n };\n\n Model.deleteAll = function() {\n this.records = [];\n return this.irecords = {};\n };\n\n Model.destroyAll = function(options) {\n var j, len, record, ref, results;\n ref = this.records;\n results = [];\n for (j = 0, len = ref.length; j < len; j++) {\n record = ref[j];\n results.push(record.destroy(options));\n }\n return results;\n };\n\n Model.update = function(id, atts, options) {\n return this.find(id).updateAttributes(atts, options);\n };\n\n Model.create = function(atts, options) {\n var record;\n record = new this(atts);\n return record.save(options);\n };\n\n Model.destroy = function(id, options) {\n var ref;\n return (ref = this.find(id)) != null ? ref.destroy(options) : void 0;\n };\n\n Model.change = function(callbackOrParams) {\n if (typeof callbackOrParams === 'function') {\n return this.on('change', callbackOrParams);\n } else {\n return this.trigger.apply(this, ['change'].concat(slice.call(arguments)));\n }\n };\n\n Model.fetch = function(callbackOrParams) {\n if (typeof callbackOrParams === 'function') {\n return this.on('fetch', callbackOrParams);\n } else {\n return this.trigger.apply(this, ['fetch'].concat(slice.call(arguments)));\n }\n };\n\n Model.toJSON = function() {\n return this.records;\n };\n\n Model.beforeFromJSON = function(objects) {\n return objects;\n };\n\n Model.fromJSON = function(objects) {\n var j, len, results, value;\n if (!objects) {\n return;\n }\n if (typeof objects === 'string') {\n objects = JSON.parse(objects);\n }\n objects = this.beforeFromJSON(objects);\n if (Array.isArray(objects)) {\n results = [];\n for (j = 0, len = objects.length; j < len; j++) {\n value = objects[j];\n if (value instanceof this) {\n results.push(value);\n } else {\n results.push(new this(value));\n }\n }\n return results;\n } else {\n if (objects instanceof this) {\n return objects;\n }\n return new this(objects);\n }\n };\n\n Model.sort = function() {\n if (this.comparator) {\n this.records.sort(this.comparator);\n }\n return this;\n };\n\n Model.cloneArray = function(array) {\n var j, len, results, value;\n results = [];\n for (j = 0, len = array.length; j < len; j++) {\n value = array[j];\n results.push(value.clone());\n }\n return results;\n };\n\n Model.idCounter = 0;\n\n Model.uid = function(prefix) {\n var uid;\n if (prefix == null) {\n prefix = '';\n }\n uid = prefix + this.idCounter++;\n if (this.exists(uid)) {\n uid = this.uid(prefix);\n }\n return uid;\n };\n\n function Model(atts) {\n Model.__super__.constructor.apply(this, arguments);\n if ((this.constructor.uuid != null) && typeof this.constructor.uuid === 'function') {\n this.cid = this.constructor.uuid();\n if (!this.id) {\n this.id = this.cid;\n }\n } else {\n this.cid = (atts != null ? atts.cid : void 0) || this.constructor.uid('c-');\n }\n if (atts) {\n this.load(atts);\n }\n }\n\n Model.prototype.isNew = function() {\n return !this.exists();\n };\n\n Model.prototype.isValid = function() {\n return !this.validate();\n };\n\n Model.prototype.validate = function() {};\n\n Model.prototype.load = function(atts) {\n var key, value;\n if (atts.id) {\n this.id = atts.id;\n }\n for (key in atts) {\n value = atts[key];\n if (key === '_callbacks') {\n continue;\n }\n if (typeof this[key] === 'function') {\n if (typeof value === 'function') {\n continue;\n }\n this[key](value);\n } else {\n this[key] = value;\n }\n }\n return this;\n };\n\n Model.prototype.attributes = function() {\n var j, key, len, ref, result;\n result = {};\n ref = this.constructor.attributes;\n for (j = 0, len = ref.length; j < len; j++) {\n key = ref[j];\n if (key in this) {\n if (typeof this[key] === 'function') {\n result[key] = this[key]();\n } else {\n result[key] = this[key];\n }\n }\n }\n if (this.id) {\n result.id = this.id;\n }\n return result;\n };\n\n Model.prototype.eql = function(rec) {\n return rec && rec.constructor === this.constructor && ((rec.cid === this.cid) || (rec.id && rec.id === this.id));\n };\n\n Model.prototype.save = function(options) {\n var error, record;\n if (options == null) {\n options = {};\n }\n if (options.validate !== false) {\n error = this.validate();\n if (error) {\n this.trigger('error', this, error);\n return false;\n }\n }\n this.trigger('beforeSave', this, options);\n record = this.isNew() ? this.create(options) : this.update(options);\n this.stripCloneAttrs();\n this.trigger('save', record, options);\n return record;\n };\n\n Model.prototype.stripCloneAttrs = function() {\n var key, ref, value;\n if (this.hasOwnProperty('cid')) {\n return;\n }\n ref = this;\n for (key in ref) {\n if (!hasProp.call(ref, key)) continue;\n value = ref[key];\n if (indexOf.call(this.constructor.attributes, key) >= 0) {\n delete this[key];\n }\n }\n return this;\n };\n\n Model.prototype.updateAttribute = function(name, value, options) {\n var atts;\n atts = {};\n atts[name] = value;\n return this.updateAttributes(atts, options);\n };\n\n Model.prototype.updateAttributes = function(atts, options) {\n this.load(atts);\n return this.save(options);\n };\n\n Model.prototype.changeID = function(id) {\n var records;\n if (id === this.id) {\n return;\n }\n records = this.constructor.irecords;\n records[id] = records[this.id];\n if (this.cid !== this.id) {\n delete records[this.id];\n }\n return this.id = id;\n };\n\n Model.prototype.remove = function(options) {\n var i, j, len, record, records;\n if (options == null) {\n options = {};\n }\n records = this.constructor.records.slice(0);\n for (i = j = 0, len = records.length; j < len; i = ++j) {\n record = records[i];\n if (!(this.eql(record))) {\n continue;\n }\n records.splice(i, 1);\n break;\n }\n this.constructor.records = records;\n if (options.clear) {\n delete this.constructor.irecords[this.id];\n return delete this.constructor.irecords[this.cid];\n }\n };\n\n Model.prototype.destroy = function(options) {\n if (options == null) {\n options = {};\n }\n if (options.clear == null) {\n options.clear = true;\n }\n this.trigger('beforeDestroy', this, options);\n this.remove(options);\n this.destroyed = true;\n this.trigger('destroy', this, options);\n this.trigger('change', this, 'destroy', options);\n if (this.listeningTo) {\n this.stopListening();\n }\n this.off();\n return this;\n };\n\n Model.prototype.dup = function(newRecord) {\n var atts, record;\n if (newRecord == null) {\n newRecord = true;\n }\n atts = this.attributes();\n if (newRecord) {\n delete atts.id;\n } else {\n atts.cid = this.cid;\n }\n record = new this.constructor(atts);\n if (!newRecord) {\n this._callbacks && (record._callbacks = this._callbacks);\n }\n return record;\n };\n\n Model.prototype.clone = function() {\n return createObject(this);\n };\n\n Model.prototype.reload = function() {\n var original;\n if (this.isNew()) {\n return this;\n }\n original = this.constructor.find(this.id);\n this.load(original.attributes());\n return original;\n };\n\n Model.prototype.refresh = function(atts) {\n atts = this.constructor.fromJSON(atts);\n if (atts.id && this.id !== atts.id) {\n this.changeID(atts.id);\n }\n this.constructor.irecords[this.id].load(atts);\n this.trigger('refresh', this);\n this.trigger('change', this, 'refresh');\n return this;\n };\n\n Model.prototype.toJSON = function() {\n return this.attributes();\n };\n\n Model.prototype.toString = function() {\n return \"<\" + this.constructor.className + \" (\" + (JSON.stringify(this)) + \")>\";\n };\n\n Model.prototype.exists = function() {\n return this.constructor.exists(this.id);\n };\n\n Model.prototype.update = function(options) {\n var clone, records;\n this.trigger('beforeUpdate', this, options);\n records = this.constructor.irecords;\n records[this.id].load(this.attributes());\n this.constructor.sort();\n clone = records[this.id].clone();\n clone.trigger('update', clone, options);\n clone.trigger('change', clone, 'update', options);\n return clone;\n };\n\n Model.prototype.create = function(options) {\n var clone, record;\n this.trigger('beforeCreate', this, options);\n this.id || (this.id = this.cid);\n record = this.dup(false);\n this.constructor.addRecord(record, options.idx);\n this.constructor.sort();\n clone = record.clone();\n clone.trigger('create', clone, options);\n clone.trigger('change', clone, 'create', options);\n return clone;\n };\n\n Model.prototype.on = function() {\n var record;\n record = this.constructor.irecords[this.id] || this;\n return Events.on.apply(record, arguments);\n };\n\n Model.prototype.one = function() {\n var record;\n record = this.constructor.irecords[this.id] || this;\n return Events.one.apply(record, arguments);\n };\n\n Model.prototype.off = function() {\n var record;\n record = this.constructor.irecords[this.id] || this;\n return Events.off.apply(record, arguments);\n };\n\n Model.prototype.trigger = function() {\n var ref;\n Events.trigger.apply(this, arguments);\n if (arguments[0] === 'refresh') {\n return true;\n }\n return (ref = this.constructor).trigger.apply(ref, arguments);\n };\n\n return Model;\n\n })(Module);\n\n Model.prototype.bind = Model.prototype.on;\n\n Model.prototype.unbind = Model.prototype.off;\n\n createObject = Object.create || function(o) {\n var Func;\n Func = function() {};\n Func.prototype = o;\n return new Func();\n };\n\n makeArray = function(args) {\n return Array.prototype.slice.call(args, 0);\n };\n\n Spine = this.Spine = {};\n\n if (typeof module !== \"undefined\" && module !== null) {\n module.exports = Spine;\n }\n\n Spine.version = '2.1.0';\n\n Spine.Events = Events;\n\n Spine.Log = Log;\n\n Spine.Module = Module;\n\n Spine.Model = Model;\n\n Module.extend.call(Spine, Events);\n\n Module.create = Module.sub = Model.sub = function(instances, statics) {\n var Result;\n Result = (function(superClass) {\n extend(Result, superClass);\n\n function Result() {\n return Result.__super__.constructor.apply(this, arguments);\n }\n\n return Result;\n\n })(this);\n if (instances) {\n Result.include(instances);\n }\n if (statics) {\n Result.extend(statics);\n }\n if (typeof Result.off === \"function\") {\n Result.off();\n }\n return Result;\n };\n\n Model.setup = function(name, attributes) {\n var Instance;\n if (attributes == null) {\n attributes = [];\n }\n Instance = (function(superClass) {\n extend(Instance, superClass);\n\n function Instance() {\n return Instance.__super__.constructor.apply(this, arguments);\n }\n\n return Instance;\n\n })(this);\n Instance.configure.apply(Instance, [name].concat(slice.call(attributes)));\n return Instance;\n };\n\n Spine.Class = Module;\n\n Collection = (function(superClass) {\n extend(Collection, superClass);\n\n function Collection(options) {\n var key, value;\n if (options == null) {\n options = {};\n }\n for (key in options) {\n value = options[key];\n this[key] = value;\n }\n }\n\n Collection.prototype.all = function() {\n return this.model.select((function(_this) {\n return function(rec) {\n return _this.associated(rec);\n };\n })(this));\n };\n\n Collection.prototype.first = function() {\n return this.all()[0];\n };\n\n Collection.prototype.last = function() {\n var values;\n values = this.all();\n return values[values.length - 1];\n };\n\n Collection.prototype.count = function() {\n return this.all().length;\n };\n\n Collection.prototype.find = function(id, notFound) {\n var records;\n if (notFound == null) {\n notFound = this.model.notFound;\n }\n records = this.select((function(_this) {\n return function(rec) {\n return (\"\" + rec.id) === (\"\" + id);\n };\n })(this));\n return records[0] || (typeof notFound === \"function\" ? notFound(id) : void 0);\n };\n\n Collection.prototype.findAllByAttribute = function(name, value) {\n return this.model.select((function(_this) {\n return function(rec) {\n return _this.associated(rec) && rec[name] === value;\n };\n })(this));\n };\n\n Collection.prototype.findByAttribute = function(name, value) {\n return this.findAllByAttribute(name, value)[0];\n };\n\n Collection.prototype.select = function(cb) {\n return this.model.select((function(_this) {\n return function(rec) {\n return _this.associated(rec) && cb(rec);\n };\n })(this));\n };\n\n Collection.prototype.refresh = function(values) {\n var i, j, k, l, len, len1, len2, match, record, ref, ref1;\n if (values == null) {\n return this;\n }\n ref = this.all();\n for (j = 0, len = ref.length; j < len; j++) {\n record = ref[j];\n delete this.model.irecords[record.id];\n ref1 = this.model.records;\n for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) {\n match = ref1[i];\n if (!(match.id === record.id)) {\n continue;\n }\n this.model.records.splice(i, 1);\n break;\n }\n }\n if (!Array.isArray(values)) {\n values = [values];\n }\n for (l = 0, len2 = values.length; l < len2; l++) {\n record = values[l];\n record.newRecord = false;\n record[this.fkey] = this.record.id;\n }\n this.model.refresh(values);\n return this;\n };\n\n Collection.prototype.create = function(record, options) {\n record[this.fkey] = this.record.id;\n return this.model.create(record, options);\n };\n\n Collection.prototype.add = function(record, options) {\n return record.updateAttribute(this.fkey, this.record.id, options);\n };\n\n Collection.prototype.remove = function(record, options) {\n return record.updateAttribute(this.fkey, null, options);\n };\n\n Collection.prototype.associated = function(record) {\n return record[this.fkey] === this.record.id;\n };\n\n return Collection;\n\n })(Spine.Module);\n\n Instance = (function(superClass) {\n extend(Instance, superClass);\n\n function Instance(options) {\n var key, value;\n if (options == null) {\n options = {};\n }\n for (key in options) {\n value = options[key];\n this[key] = value;\n }\n }\n\n Instance.prototype.find = function() {\n return this.model.find(this.record[this.fkey]);\n };\n\n Instance.prototype.update = function(value) {\n if (value == null) {\n return this;\n }\n value = this.model.refresh(value)[0];\n this.record[this.fkey] = value && value.id;\n return this;\n };\n\n return Instance;\n\n })(Spine.Module);\n\n Singleton = (function(superClass) {\n extend(Singleton, superClass);\n\n function Singleton(options) {\n var key, value;\n if (options == null) {\n options = {};\n }\n for (key in options) {\n value = options[key];\n this[key] = value;\n }\n }\n\n Singleton.prototype.find = function() {\n return this.record.id && this.model.findByAttribute(this.fkey, this.record.id);\n };\n\n Singleton.prototype.update = function(value) {\n if (value == null) {\n return this;\n }\n value[this.fkey] = this.record.id;\n this.model.refresh(value);\n return this;\n };\n\n return Singleton;\n\n })(Spine.Module);\n\n singularize = function(str) {\n return str.replace(/s$/, '');\n };\n\n underscore = function(str) {\n return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/(-|\\.)/g, '_').toLowerCase();\n };\n\n association = function(name, model, record, fkey, Ctor) {\n return new Ctor({\n name: name,\n model: model,\n record: record,\n fkey: fkey\n });\n };\n\n Spine.Model.extend({\n hasMany: function(name, model, fkey) {\n if (fkey == null) {\n fkey = (underscore(this.className)) + \"_id\";\n }\n return this.prototype[name] = function(value) {\n return association(name, model, this, fkey, Collection).refresh(value);\n };\n },\n belongsTo: function(name, model, fkey) {\n if (fkey == null) {\n fkey = (underscore(singularize(name))) + \"_id\";\n }\n this.prototype[name] = function(value) {\n return association(name, model, this, fkey, Instance).update(value).find();\n };\n return this.attributes.push(fkey);\n },\n hasOne: function(name, model, fkey) {\n if (fkey == null) {\n fkey = (underscore(this.className)) + \"_id\";\n }\n return this.prototype[name] = function(value) {\n return association(name, model, this, fkey, Singleton).update(value).find();\n };\n }\n });\n\n Spine.Collection = Collection;\n\n Spine.Singleton = Singleton;\n\n Spine.Instance = Instance;\n\n}).call(this);\n\n//# sourceMappingURL=spine.js.map\n","import isWeekend from \"../isWeekend/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport isSunday from \"../isSunday/index.js\";\nimport isSaturday from \"../isSaturday/index.js\";\n/**\n * @name addBusinessDays\n * @category Day Helpers\n * @summary Add the specified number of business days (mon - fri) to the given date.\n *\n * @description\n * Add the specified number of business days (mon - fri) to the given date, ignoring weekends.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of business days to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the business days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 business days to 1 September 2014:\n * const result = addBusinessDays(new Date(2014, 8, 1), 10)\n * //=> Mon Sep 15 2014 00:00:00 (skipped weekend days)\n */\nexport default function addBusinessDays(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var startedOnWeekend = isWeekend(date);\n var amount = toInteger(dirtyAmount);\n if (isNaN(amount)) return new Date(NaN);\n var hours = date.getHours();\n var sign = amount < 0 ? -1 : 1;\n var fullWeeks = toInteger(amount / 5);\n date.setDate(date.getDate() + fullWeeks * 7);\n\n // Get remaining days not part of a full week\n var restDays = Math.abs(amount % 5);\n\n // Loops over remaining days\n while (restDays > 0) {\n date.setDate(date.getDate() + sign);\n if (!isWeekend(date)) restDays -= 1;\n }\n\n // If the date is a weekend day and we reduce a dividable of\n // 5 from it, we land on a weekend date.\n // To counter this, we add days accordingly to land on the next business day\n if (startedOnWeekend && isWeekend(date) && amount !== 0) {\n // If we're reducing days, we want to add days until we land on a weekday\n // If we're adding days we want to reduce days until we land on a weekday\n if (isSaturday(date)) date.setDate(date.getDate() + (sign < 0 ? 2 : -1));\n if (isSunday(date)) date.setDate(date.getDate() + (sign < 0 ? 1 : -2));\n }\n\n // Restore hours to avoid DST lag\n date.setHours(hours);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * const result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getDay() === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * const result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n requiredArgs(1, arguments);\n return toDate(dirtyDate).getDay() === 0;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @param {Interval} interval - the interval. See [Interval]{@link https://date-fns.org/docs/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n var _options$step;\n requiredArgs(1, arguments);\n var interval = dirtyInterval || {};\n var startDate = toDate(interval.start);\n var endDate = toDate(interval.end);\n var endTime = endDate.getTime();\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startDate.getTime() <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n var dates = [];\n var currentDate = startDate;\n currentDate.setHours(0, 0, 0, 0);\n var step = Number((_options$step = options === null || options === void 0 ? void 0 : options.step) !== null && _options$step !== void 0 ? _options$step : 1);\n if (step < 1 || isNaN(step)) throw new RangeError('`options.step` must be a number greater than 1');\n while (currentDate.getTime() <= endTime) {\n dates.push(toDate(currentDate));\n currentDate.setDate(currentDate.getDate() + step);\n currentDate.setHours(0, 0, 0, 0);\n }\n return dates;\n}","import startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day (and year and month)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeftStartOfDay = startOfDay(dirtyDateLeft);\n var dateRightStartOfDay = startOfDay(dirtyDateRight);\n return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month (and year)\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n return dateLeft.getFullYear() === dateRight.getFullYear() && dateLeft.getMonth() === dateRight.getMonth();\n}","import startOfWeek from \"../startOfWeek/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week (and month and year)?\n *\n * @description\n * Are the given dates in the same week (and month and year)?\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Boolean} the dates are in the same week (and month and year)\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * const result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n * weekStartsOn: 1\n * })\n * //=> false\n *\n * @example\n * // Are 1 January 2014 and 1 January 2015 in the same week?\n * const result = isSameWeek(new Date(2014, 0, 1), new Date(2015, 0, 1))\n * //=> false\n */\nexport default function isSameWeek(dirtyDateLeft, dirtyDateRight, options) {\n requiredArgs(2, arguments);\n var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, options);\n var dateRightStartOfWeek = startOfWeek(dirtyDateRight, options);\n return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime();\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * const result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var day = date.getDay();\n return day === 0 || day === 6;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval? (Including start and end.)\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n * start: new Date(2014, 0, 1),\n * end: new Date(2014, 0, 7)\n * })\n * //=> false\n *\n * @example\n * // For date equal to interval start:\n * isWithinInterval(date, { start, end: date }) // => true\n *\n * @example\n * // For date equal to interval end:\n * isWithinInterval(date, { start: date, end }) // => true\n */\nexport default function isWithinInterval(dirtyDate, interval) {\n requiredArgs(2, arguments);\n var time = toDate(dirtyDate).getTime();\n var startTime = toDate(interval.start).getTime();\n var endTime = toDate(interval.end).getTime();\n\n // Throw an exception if start date is after end date or if any date is `Invalid Date`\n if (!(startTime <= endTime)) {\n throw new RangeError('Invalid interval');\n }\n return time >= startTime && time <= endTime;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * const result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var month = date.getMonth();\n date.setFullYear(date.getFullYear(), month + 1, 0);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * const result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6');\n }\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn);\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + diff);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport getDaysInMonth from \"../getDaysInMonth/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * const result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n requiredArgs(2, arguments);\n var date = toDate(dirtyDate);\n var month = toInteger(dirtyMonth);\n var year = date.getFullYear();\n var day = date.getDate();\n var dateWithDesiredMonth = new Date(0);\n dateWithDesiredMonth.setFullYear(year, month, 15);\n dateWithDesiredMonth.setHours(0, 0, 0, 0);\n var daysInMonth = getDaysInMonth(dateWithDesiredMonth);\n // Set the last day of the new month\n // if the original date was the last day of the longer month\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * const result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getFullYear();\n var monthIndex = date.getMonth();\n var lastDayOfMonth = new Date(0);\n lastDayOfMonth.setFullYear(year, monthIndex + 1, 0);\n lastDayOfMonth.setHours(0, 0, 0, 0);\n return lastDayOfMonth.getDate();\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport toDate from \"../toDate/index.js\";\nimport setMonth from \"../setMonth/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name set\n * @category Common Helpers\n * @summary Set date values to a given date.\n *\n * @description\n * Set date values to a given date.\n *\n * Sets time values to date from object `values`.\n * A value is not set if it is undefined or null or doesn't exist in `values`.\n *\n * Note about bundle size: `set` does not internally use `setX` functions from date-fns but instead opts\n * to use native `Date#setX` methods. If you use this function, you may not want to include the\n * other `setX` functions that date-fns provides if you are concerned about the bundle size.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Object} values - an object with options\n * @param {Number} [values.year] - the number of years to be set\n * @param {Number} [values.month] - the number of months to be set\n * @param {Number} [values.date] - the number of days to be set\n * @param {Number} [values.hours] - the number of hours to be set\n * @param {Number} [values.minutes] - the number of minutes to be set\n * @param {Number} [values.seconds] - the number of seconds to be set\n * @param {Number} [values.milliseconds] - the number of milliseconds to be set\n * @returns {Date} the new date with options set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `values` must be an object\n *\n * @example\n * // Transform 1 September 2014 into 20 October 2015 in a single line:\n * const result = set(new Date(2014, 8, 20), { year: 2015, month: 9, date: 20 })\n * //=> Tue Oct 20 2015 00:00:00\n *\n * @example\n * // Set 12 PM to 1 September 2014 01:23:45 to 1 September 2014 12:00:00:\n * const result = set(new Date(2014, 8, 1, 1, 23, 45), { hours: 12 })\n * //=> Mon Sep 01 2014 12:23:45\n */\nexport default function set(dirtyDate, values) {\n requiredArgs(2, arguments);\n if (_typeof(values) !== 'object' || values === null) {\n throw new RangeError('values parameter must be an object');\n }\n var date = toDate(dirtyDate);\n\n // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n if (isNaN(date.getTime())) {\n return new Date(NaN);\n }\n if (values.year != null) {\n date.setFullYear(values.year);\n }\n if (values.month != null) {\n date = setMonth(date, values.month);\n }\n if (values.date != null) {\n date.setDate(toInteger(values.date));\n }\n if (values.hours != null) {\n date.setHours(toInteger(values.hours));\n }\n if (values.minutes != null) {\n date.setMinutes(toInteger(values.minutes));\n }\n if (values.seconds != null) {\n date.setSeconds(toInteger(values.seconds));\n }\n if (values.milliseconds != null) {\n date.setMilliseconds(toInteger(values.milliseconds));\n }\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nimport { getDefaultOptions } from \"../_lib/defaultOptions/index.js\";\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, options) {\n var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;\n requiredArgs(1, arguments);\n var defaultOptions = getDefaultOptions();\n var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);\n\n // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n var date = toDate(dirtyDate);\n var day = date.getDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var cleanDate = toDate(dirtyDate);\n var date = new Date(0);\n date.setFullYear(cleanDate.getFullYear(), 0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addYears from \"../addYears/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * const result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addYears(dirtyDate, -amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMonths from \"../addMonths/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * const result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMonths(dirtyDate, amount * 12);\n}","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \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 MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\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/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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/** Built-in value references. */\nvar Symbol = root.Symbol,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\nfunction createFlow(fromRight) {\n return baseRest(function(funcs) {\n funcs = baseFlatten(funcs, 1);\n\n var length = funcs.length,\n index = length;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n if (typeof funcs[index] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n }\n return function() {\n var index = 0,\n result = length ? funcs[index].apply(this, arguments) : arguments[0];\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\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 * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\nvar flowRight = createFlow(true);\n\nmodule.exports = flowRight;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \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 to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\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 nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\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/**\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 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 // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\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 * 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/** 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 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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\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 Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\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 == null ? 0 : entries.length;\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 this.size = 0;\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 var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\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 this.size += this.has(key) ? 0 : 1;\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 == null ? 0 : entries.length;\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 this.size = 0;\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 --this.size;\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 ++this.size;\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 == null ? 0 : entries.length;\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.size = 0;\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 var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\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 var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\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 * 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 var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\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 this.size = 0;\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 var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\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 data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\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 var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\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 `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\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 `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\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) ? 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[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` 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 baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\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 * 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 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 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\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 var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\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 * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\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 * 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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\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 a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\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 if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\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 != null && (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 != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\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 plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\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 * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = merge;\n","/**\n * Lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \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 to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\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 nullTag = '[object Null]',\n objectTag = '[object Object]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n undefinedTag = '[object Undefined]',\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/**\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 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 // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\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 * 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/** 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 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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\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 Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeMax = Math.max,\n nativeNow = Date.now;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\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 == null ? 0 : entries.length;\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 this.size = 0;\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 var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\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 this.size += this.has(key) ? 0 : 1;\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 == null ? 0 : entries.length;\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 this.size = 0;\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 --this.size;\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 ++this.size;\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 == null ? 0 : entries.length;\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.size = 0;\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 var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\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 var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\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 * 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 var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\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 this.size = 0;\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 var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\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 data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\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 var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\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 `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\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 `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\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) ? 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[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keysIn` 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 baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\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 * 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 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 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\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 var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\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 * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\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 safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\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 * 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 */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\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 a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\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 if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\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 != null && (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 != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\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 plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n});\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\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 * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = mergeWith;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \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 to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\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 detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array ? array.length : 0;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\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 * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\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 * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\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 cacheHas(cache, key) {\n return cache.has(key);\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 * 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/** 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 getPrototype = overArg(Object.getPrototypeOf, Object),\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\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 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 methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\nfunction baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\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 `_.keysIn` 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 baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, props) {\n object = Object(object);\n return basePickBy(object, props, function(value, key) {\n return key in object;\n });\n}\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, props, predicate) {\n var index = -1,\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index],\n value = object[key];\n\n if (predicate(value, key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\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 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 * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Creates an array of the own and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\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 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 * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\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 * 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 * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable string keyed properties of `object` that are\n * not omitted.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = baseRest(function(object, props) {\n if (object == null) {\n return {};\n }\n props = arrayMap(baseFlatten(props, 1), toKey);\n return basePick(object, baseDifference(getAllKeysIn(object), props));\n});\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = omit;\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (value === null || value === undefined || value.length === 0) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${encode(object.fragmentIdentifier, options)}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nvar rowSizeBase = {\n width: '100%',\n height: '10px',\n top: '0px',\n left: '0px',\n cursor: 'row-resize',\n};\nvar colSizeBase = {\n width: '10px',\n height: '100%',\n top: '0px',\n left: '0px',\n cursor: 'col-resize',\n};\nvar edgeBase = {\n width: '20px',\n height: '20px',\n position: 'absolute',\n};\nvar styles = {\n top: __assign(__assign({}, rowSizeBase), { top: '-5px' }),\n right: __assign(__assign({}, colSizeBase), { left: undefined, right: '-5px' }),\n bottom: __assign(__assign({}, rowSizeBase), { top: undefined, bottom: '-5px' }),\n left: __assign(__assign({}, colSizeBase), { left: '-5px' }),\n topRight: __assign(__assign({}, edgeBase), { right: '-10px', top: '-10px', cursor: 'ne-resize' }),\n bottomRight: __assign(__assign({}, edgeBase), { right: '-10px', bottom: '-10px', cursor: 'se-resize' }),\n bottomLeft: __assign(__assign({}, edgeBase), { left: '-10px', bottom: '-10px', cursor: 'sw-resize' }),\n topLeft: __assign(__assign({}, edgeBase), { left: '-10px', top: '-10px', cursor: 'nw-resize' }),\n};\nvar Resizer = /** @class */ (function (_super) {\n __extends(Resizer, _super);\n function Resizer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.onMouseDown = function (e) {\n _this.props.onResizeStart(e, _this.props.direction);\n };\n _this.onTouchStart = function (e) {\n _this.props.onResizeStart(e, _this.props.direction);\n };\n return _this;\n }\n Resizer.prototype.render = function () {\n return (React.createElement(\"div\", { className: this.props.className || '', style: __assign(__assign({ position: 'absolute', userSelect: 'none' }, styles[this.props.direction]), (this.props.replaceStyles || {})), onMouseDown: this.onMouseDown, onTouchStart: this.onTouchStart }, this.props.children));\n };\n return Resizer;\n}(React.PureComponent));\nexport { Resizer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport { Resizer } from './resizer';\nvar DEFAULT_SIZE = {\n width: 'auto',\n height: 'auto',\n};\nvar clamp = function (n, min, max) { return Math.max(Math.min(n, max), min); };\nvar snap = function (n, size) { return Math.round(n / size) * size; };\nvar hasDirection = function (dir, target) {\n return new RegExp(dir, 'i').test(target);\n};\n// INFO: In case of window is a Proxy and does not porxy Events correctly, use isTouchEvent & isMouseEvent to distinguish event type instead of `instanceof`.\nvar isTouchEvent = function (event) {\n return Boolean(event.touches && event.touches.length);\n};\nvar isMouseEvent = function (event) {\n return Boolean((event.clientX || event.clientX === 0) &&\n (event.clientY || event.clientY === 0));\n};\nvar findClosestSnap = function (n, snapArray, snapGap) {\n if (snapGap === void 0) { snapGap = 0; }\n var closestGapIndex = snapArray.reduce(function (prev, curr, index) { return (Math.abs(curr - n) < Math.abs(snapArray[prev] - n) ? index : prev); }, 0);\n var gap = Math.abs(snapArray[closestGapIndex] - n);\n return snapGap === 0 || gap < snapGap ? snapArray[closestGapIndex] : n;\n};\nvar getStringSize = function (n) {\n n = n.toString();\n if (n === 'auto') {\n return n;\n }\n if (n.endsWith('px')) {\n return n;\n }\n if (n.endsWith('%')) {\n return n;\n }\n if (n.endsWith('vh')) {\n return n;\n }\n if (n.endsWith('vw')) {\n return n;\n }\n if (n.endsWith('vmax')) {\n return n;\n }\n if (n.endsWith('vmin')) {\n return n;\n }\n return n + \"px\";\n};\nvar getPixelSize = function (size, parentSize, innerWidth, innerHeight) {\n if (size && typeof size === 'string') {\n if (size.endsWith('px')) {\n return Number(size.replace('px', ''));\n }\n if (size.endsWith('%')) {\n var ratio = Number(size.replace('%', '')) / 100;\n return parentSize * ratio;\n }\n if (size.endsWith('vw')) {\n var ratio = Number(size.replace('vw', '')) / 100;\n return innerWidth * ratio;\n }\n if (size.endsWith('vh')) {\n var ratio = Number(size.replace('vh', '')) / 100;\n return innerHeight * ratio;\n }\n }\n return size;\n};\nvar calculateNewMax = function (parentSize, innerWidth, innerHeight, maxWidth, maxHeight, minWidth, minHeight) {\n maxWidth = getPixelSize(maxWidth, parentSize.width, innerWidth, innerHeight);\n maxHeight = getPixelSize(maxHeight, parentSize.height, innerWidth, innerHeight);\n minWidth = getPixelSize(minWidth, parentSize.width, innerWidth, innerHeight);\n minHeight = getPixelSize(minHeight, parentSize.height, innerWidth, innerHeight);\n return {\n maxWidth: typeof maxWidth === 'undefined' ? undefined : Number(maxWidth),\n maxHeight: typeof maxHeight === 'undefined' ? undefined : Number(maxHeight),\n minWidth: typeof minWidth === 'undefined' ? undefined : Number(minWidth),\n minHeight: typeof minHeight === 'undefined' ? undefined : Number(minHeight),\n };\n};\nvar definedProps = [\n 'as',\n 'style',\n 'className',\n 'grid',\n 'snap',\n 'bounds',\n 'boundsByDirection',\n 'size',\n 'defaultSize',\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight',\n 'lockAspectRatio',\n 'lockAspectRatioExtraWidth',\n 'lockAspectRatioExtraHeight',\n 'enable',\n 'handleStyles',\n 'handleClasses',\n 'handleWrapperStyle',\n 'handleWrapperClass',\n 'children',\n 'onResizeStart',\n 'onResize',\n 'onResizeStop',\n 'handleComponent',\n 'scale',\n 'resizeRatio',\n 'snapGap',\n];\n// HACK: This class is used to calculate % size.\nvar baseClassName = '__resizable_base__';\nvar Resizable = /** @class */ (function (_super) {\n __extends(Resizable, _super);\n function Resizable(props) {\n var _this = _super.call(this, props) || this;\n _this.ratio = 1;\n _this.resizable = null;\n // For parent boundary\n _this.parentLeft = 0;\n _this.parentTop = 0;\n // For boundary\n _this.resizableLeft = 0;\n _this.resizableRight = 0;\n _this.resizableTop = 0;\n _this.resizableBottom = 0;\n // For target boundary\n _this.targetLeft = 0;\n _this.targetTop = 0;\n _this.appendBase = function () {\n if (!_this.resizable || !_this.window) {\n return null;\n }\n var parent = _this.parentNode;\n if (!parent) {\n return null;\n }\n var element = _this.window.document.createElement('div');\n element.style.width = '100%';\n element.style.height = '100%';\n element.style.position = 'absolute';\n element.style.transform = 'scale(0, 0)';\n element.style.left = '0';\n element.style.flex = '0 0 100%';\n if (element.classList) {\n element.classList.add(baseClassName);\n }\n else {\n element.className += baseClassName;\n }\n parent.appendChild(element);\n return element;\n };\n _this.removeBase = function (base) {\n var parent = _this.parentNode;\n if (!parent) {\n return;\n }\n parent.removeChild(base);\n };\n _this.ref = function (c) {\n if (c) {\n _this.resizable = c;\n }\n };\n _this.state = {\n isResizing: false,\n width: typeof (_this.propsSize && _this.propsSize.width) === 'undefined'\n ? 'auto'\n : _this.propsSize && _this.propsSize.width,\n height: typeof (_this.propsSize && _this.propsSize.height) === 'undefined'\n ? 'auto'\n : _this.propsSize && _this.propsSize.height,\n direction: 'right',\n original: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n backgroundStyle: {\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0)',\n cursor: 'auto',\n opacity: 0,\n position: 'fixed',\n zIndex: 9999,\n top: '0',\n left: '0',\n bottom: '0',\n right: '0',\n },\n flexBasis: undefined,\n };\n _this.onResizeStart = _this.onResizeStart.bind(_this);\n _this.onMouseMove = _this.onMouseMove.bind(_this);\n _this.onMouseUp = _this.onMouseUp.bind(_this);\n return _this;\n }\n Object.defineProperty(Resizable.prototype, \"parentNode\", {\n get: function () {\n if (!this.resizable) {\n return null;\n }\n return this.resizable.parentNode;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"window\", {\n get: function () {\n if (!this.resizable) {\n return null;\n }\n if (!this.resizable.ownerDocument) {\n return null;\n }\n return this.resizable.ownerDocument.defaultView;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"propsSize\", {\n get: function () {\n return this.props.size || this.props.defaultSize || DEFAULT_SIZE;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"size\", {\n get: function () {\n var width = 0;\n var height = 0;\n if (this.resizable && this.window) {\n var orgWidth = this.resizable.offsetWidth;\n var orgHeight = this.resizable.offsetHeight;\n // HACK: Set position `relative` to get parent size.\n // This is because when re-resizable set `absolute`, I can not get base width correctly.\n var orgPosition = this.resizable.style.position;\n if (orgPosition !== 'relative') {\n this.resizable.style.position = 'relative';\n }\n // INFO: Use original width or height if set auto.\n width = this.resizable.style.width !== 'auto' ? this.resizable.offsetWidth : orgWidth;\n height = this.resizable.style.height !== 'auto' ? this.resizable.offsetHeight : orgHeight;\n // Restore original position\n this.resizable.style.position = orgPosition;\n }\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Resizable.prototype, \"sizeStyle\", {\n get: function () {\n var _this = this;\n var size = this.props.size;\n var getSize = function (key) {\n if (typeof _this.state[key] === 'undefined' || _this.state[key] === 'auto') {\n return 'auto';\n }\n if (_this.propsSize && _this.propsSize[key] && _this.propsSize[key].toString().endsWith('%')) {\n if (_this.state[key].toString().endsWith('%')) {\n return _this.state[key].toString();\n }\n var parentSize = _this.getParentSize();\n var value = Number(_this.state[key].toString().replace('px', ''));\n var percent = (value / parentSize[key]) * 100;\n return percent + \"%\";\n }\n return getStringSize(_this.state[key]);\n };\n var width = size && typeof size.width !== 'undefined' && !this.state.isResizing\n ? getStringSize(size.width)\n : getSize('width');\n var height = size && typeof size.height !== 'undefined' && !this.state.isResizing\n ? getStringSize(size.height)\n : getSize('height');\n return { width: width, height: height };\n },\n enumerable: false,\n configurable: true\n });\n Resizable.prototype.getParentSize = function () {\n if (!this.parentNode) {\n if (!this.window) {\n return { width: 0, height: 0 };\n }\n return { width: this.window.innerWidth, height: this.window.innerHeight };\n }\n var base = this.appendBase();\n if (!base) {\n return { width: 0, height: 0 };\n }\n // INFO: To calculate parent width with flex layout\n var wrapChanged = false;\n var wrap = this.parentNode.style.flexWrap;\n if (wrap !== 'wrap') {\n wrapChanged = true;\n this.parentNode.style.flexWrap = 'wrap';\n // HACK: Use relative to get parent padding size\n }\n base.style.position = 'relative';\n base.style.minWidth = '100%';\n base.style.minHeight = '100%';\n var size = {\n width: base.offsetWidth,\n height: base.offsetHeight,\n };\n if (wrapChanged) {\n this.parentNode.style.flexWrap = wrap;\n }\n this.removeBase(base);\n return size;\n };\n Resizable.prototype.bindEvents = function () {\n if (this.window) {\n this.window.addEventListener('mouseup', this.onMouseUp);\n this.window.addEventListener('mousemove', this.onMouseMove);\n this.window.addEventListener('mouseleave', this.onMouseUp);\n this.window.addEventListener('touchmove', this.onMouseMove, {\n capture: true,\n passive: false,\n });\n this.window.addEventListener('touchend', this.onMouseUp);\n }\n };\n Resizable.prototype.unbindEvents = function () {\n if (this.window) {\n this.window.removeEventListener('mouseup', this.onMouseUp);\n this.window.removeEventListener('mousemove', this.onMouseMove);\n this.window.removeEventListener('mouseleave', this.onMouseUp);\n this.window.removeEventListener('touchmove', this.onMouseMove, true);\n this.window.removeEventListener('touchend', this.onMouseUp);\n }\n };\n Resizable.prototype.componentDidMount = function () {\n if (!this.resizable || !this.window) {\n return;\n }\n var computedStyle = this.window.getComputedStyle(this.resizable);\n this.setState({\n width: this.state.width || this.size.width,\n height: this.state.height || this.size.height,\n flexBasis: computedStyle.flexBasis !== 'auto' ? computedStyle.flexBasis : undefined,\n });\n };\n Resizable.prototype.componentWillUnmount = function () {\n if (this.window) {\n this.unbindEvents();\n }\n };\n Resizable.prototype.createSizeForCssProperty = function (newSize, kind) {\n var propsSize = this.propsSize && this.propsSize[kind];\n return this.state[kind] === 'auto' &&\n this.state.original[kind] === newSize &&\n (typeof propsSize === 'undefined' || propsSize === 'auto')\n ? 'auto'\n : newSize;\n };\n Resizable.prototype.calculateNewMaxFromBoundary = function (maxWidth, maxHeight) {\n var boundsByDirection = this.props.boundsByDirection;\n var direction = this.state.direction;\n var widthByDirection = boundsByDirection && hasDirection('left', direction);\n var heightByDirection = boundsByDirection && hasDirection('top', direction);\n var boundWidth;\n var boundHeight;\n if (this.props.bounds === 'parent') {\n var parent_1 = this.parentNode;\n if (parent_1) {\n boundWidth = widthByDirection\n ? this.resizableRight - this.parentLeft\n : parent_1.offsetWidth + (this.parentLeft - this.resizableLeft);\n boundHeight = heightByDirection\n ? this.resizableBottom - this.parentTop\n : parent_1.offsetHeight + (this.parentTop - this.resizableTop);\n }\n }\n else if (this.props.bounds === 'window') {\n if (this.window) {\n boundWidth = widthByDirection ? this.resizableRight : this.window.innerWidth - this.resizableLeft;\n boundHeight = heightByDirection ? this.resizableBottom : this.window.innerHeight - this.resizableTop;\n }\n }\n else if (this.props.bounds) {\n boundWidth = widthByDirection\n ? this.resizableRight - this.targetLeft\n : this.props.bounds.offsetWidth + (this.targetLeft - this.resizableLeft);\n boundHeight = heightByDirection\n ? this.resizableBottom - this.targetTop\n : this.props.bounds.offsetHeight + (this.targetTop - this.resizableTop);\n }\n if (boundWidth && Number.isFinite(boundWidth)) {\n maxWidth = maxWidth && maxWidth < boundWidth ? maxWidth : boundWidth;\n }\n if (boundHeight && Number.isFinite(boundHeight)) {\n maxHeight = maxHeight && maxHeight < boundHeight ? maxHeight : boundHeight;\n }\n return { maxWidth: maxWidth, maxHeight: maxHeight };\n };\n Resizable.prototype.calculateNewSizeFromDirection = function (clientX, clientY) {\n var scale = this.props.scale || 1;\n var resizeRatio = this.props.resizeRatio || 1;\n var _a = this.state, direction = _a.direction, original = _a.original;\n var _b = this.props, lockAspectRatio = _b.lockAspectRatio, lockAspectRatioExtraHeight = _b.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _b.lockAspectRatioExtraWidth;\n var newWidth = original.width;\n var newHeight = original.height;\n var extraHeight = lockAspectRatioExtraHeight || 0;\n var extraWidth = lockAspectRatioExtraWidth || 0;\n if (hasDirection('right', direction)) {\n newWidth = original.width + ((clientX - original.x) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n }\n }\n if (hasDirection('left', direction)) {\n newWidth = original.width - ((clientX - original.x) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newHeight = (newWidth - extraWidth) / this.ratio + extraHeight;\n }\n }\n if (hasDirection('bottom', direction)) {\n newHeight = original.height + ((clientY - original.y) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n }\n }\n if (hasDirection('top', direction)) {\n newHeight = original.height - ((clientY - original.y) * resizeRatio) / scale;\n if (lockAspectRatio) {\n newWidth = (newHeight - extraHeight) * this.ratio + extraWidth;\n }\n }\n return { newWidth: newWidth, newHeight: newHeight };\n };\n Resizable.prototype.calculateNewSizeFromAspectRatio = function (newWidth, newHeight, max, min) {\n var _a = this.props, lockAspectRatio = _a.lockAspectRatio, lockAspectRatioExtraHeight = _a.lockAspectRatioExtraHeight, lockAspectRatioExtraWidth = _a.lockAspectRatioExtraWidth;\n var computedMinWidth = typeof min.width === 'undefined' ? 10 : min.width;\n var computedMaxWidth = typeof max.width === 'undefined' || max.width < 0 ? newWidth : max.width;\n var computedMinHeight = typeof min.height === 'undefined' ? 10 : min.height;\n var computedMaxHeight = typeof max.height === 'undefined' || max.height < 0 ? newHeight : max.height;\n var extraHeight = lockAspectRatioExtraHeight || 0;\n var extraWidth = lockAspectRatioExtraWidth || 0;\n if (lockAspectRatio) {\n var extraMinWidth = (computedMinHeight - extraHeight) * this.ratio + extraWidth;\n var extraMaxWidth = (computedMaxHeight - extraHeight) * this.ratio + extraWidth;\n var extraMinHeight = (computedMinWidth - extraWidth) / this.ratio + extraHeight;\n var extraMaxHeight = (computedMaxWidth - extraWidth) / this.ratio + extraHeight;\n var lockedMinWidth = Math.max(computedMinWidth, extraMinWidth);\n var lockedMaxWidth = Math.min(computedMaxWidth, extraMaxWidth);\n var lockedMinHeight = Math.max(computedMinHeight, extraMinHeight);\n var lockedMaxHeight = Math.min(computedMaxHeight, extraMaxHeight);\n newWidth = clamp(newWidth, lockedMinWidth, lockedMaxWidth);\n newHeight = clamp(newHeight, lockedMinHeight, lockedMaxHeight);\n }\n else {\n newWidth = clamp(newWidth, computedMinWidth, computedMaxWidth);\n newHeight = clamp(newHeight, computedMinHeight, computedMaxHeight);\n }\n return { newWidth: newWidth, newHeight: newHeight };\n };\n Resizable.prototype.setBoundingClientRect = function () {\n // For parent boundary\n if (this.props.bounds === 'parent') {\n var parent_2 = this.parentNode;\n if (parent_2) {\n var parentRect = parent_2.getBoundingClientRect();\n this.parentLeft = parentRect.left;\n this.parentTop = parentRect.top;\n }\n }\n // For target(html element) boundary\n if (this.props.bounds && typeof this.props.bounds !== 'string') {\n var targetRect = this.props.bounds.getBoundingClientRect();\n this.targetLeft = targetRect.left;\n this.targetTop = targetRect.top;\n }\n // For boundary\n if (this.resizable) {\n var _a = this.resizable.getBoundingClientRect(), left = _a.left, top_1 = _a.top, right = _a.right, bottom = _a.bottom;\n this.resizableLeft = left;\n this.resizableRight = right;\n this.resizableTop = top_1;\n this.resizableBottom = bottom;\n }\n };\n Resizable.prototype.onResizeStart = function (event, direction) {\n if (!this.resizable || !this.window) {\n return;\n }\n var clientX = 0;\n var clientY = 0;\n if (event.nativeEvent && isMouseEvent(event.nativeEvent)) {\n clientX = event.nativeEvent.clientX;\n clientY = event.nativeEvent.clientY;\n }\n else if (event.nativeEvent && isTouchEvent(event.nativeEvent)) {\n clientX = event.nativeEvent.touches[0].clientX;\n clientY = event.nativeEvent.touches[0].clientY;\n }\n if (this.props.onResizeStart) {\n if (this.resizable) {\n var startResize = this.props.onResizeStart(event, direction, this.resizable);\n if (startResize === false) {\n return;\n }\n }\n }\n // Fix #168\n if (this.props.size) {\n if (typeof this.props.size.height !== 'undefined' && this.props.size.height !== this.state.height) {\n this.setState({ height: this.props.size.height });\n }\n if (typeof this.props.size.width !== 'undefined' && this.props.size.width !== this.state.width) {\n this.setState({ width: this.props.size.width });\n }\n }\n // For lockAspectRatio case\n this.ratio =\n typeof this.props.lockAspectRatio === 'number' ? this.props.lockAspectRatio : this.size.width / this.size.height;\n var flexBasis;\n var computedStyle = this.window.getComputedStyle(this.resizable);\n if (computedStyle.flexBasis !== 'auto') {\n var parent_3 = this.parentNode;\n if (parent_3) {\n var dir = this.window.getComputedStyle(parent_3).flexDirection;\n this.flexDir = dir.startsWith('row') ? 'row' : 'column';\n flexBasis = computedStyle.flexBasis;\n }\n }\n // For boundary\n this.setBoundingClientRect();\n this.bindEvents();\n var state = {\n original: {\n x: clientX,\n y: clientY,\n width: this.size.width,\n height: this.size.height,\n },\n isResizing: true,\n backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: this.window.getComputedStyle(event.target).cursor || 'auto' }),\n direction: direction,\n flexBasis: flexBasis,\n };\n this.setState(state);\n };\n Resizable.prototype.onMouseMove = function (event) {\n var _this = this;\n if (!this.state.isResizing || !this.resizable || !this.window) {\n return;\n }\n if (this.window.TouchEvent && isTouchEvent(event)) {\n try {\n event.preventDefault();\n event.stopPropagation();\n }\n catch (e) {\n // Ignore on fail\n }\n }\n var _a = this.props, maxWidth = _a.maxWidth, maxHeight = _a.maxHeight, minWidth = _a.minWidth, minHeight = _a.minHeight;\n var clientX = isTouchEvent(event) ? event.touches[0].clientX : event.clientX;\n var clientY = isTouchEvent(event) ? event.touches[0].clientY : event.clientY;\n var _b = this.state, direction = _b.direction, original = _b.original, width = _b.width, height = _b.height;\n var parentSize = this.getParentSize();\n var max = calculateNewMax(parentSize, this.window.innerWidth, this.window.innerHeight, maxWidth, maxHeight, minWidth, minHeight);\n maxWidth = max.maxWidth;\n maxHeight = max.maxHeight;\n minWidth = max.minWidth;\n minHeight = max.minHeight;\n // Calculate new size\n var _c = this.calculateNewSizeFromDirection(clientX, clientY), newHeight = _c.newHeight, newWidth = _c.newWidth;\n // Calculate max size from boundary settings\n var boundaryMax = this.calculateNewMaxFromBoundary(maxWidth, maxHeight);\n if (this.props.snap && this.props.snap.x) {\n newWidth = findClosestSnap(newWidth, this.props.snap.x, this.props.snapGap);\n }\n if (this.props.snap && this.props.snap.y) {\n newHeight = findClosestSnap(newHeight, this.props.snap.y, this.props.snapGap);\n }\n // Calculate new size from aspect ratio\n var newSize = this.calculateNewSizeFromAspectRatio(newWidth, newHeight, { width: boundaryMax.maxWidth, height: boundaryMax.maxHeight }, { width: minWidth, height: minHeight });\n newWidth = newSize.newWidth;\n newHeight = newSize.newHeight;\n if (this.props.grid) {\n var newGridWidth = snap(newWidth, this.props.grid[0]);\n var newGridHeight = snap(newHeight, this.props.grid[1]);\n var gap = this.props.snapGap || 0;\n newWidth = gap === 0 || Math.abs(newGridWidth - newWidth) <= gap ? newGridWidth : newWidth;\n newHeight = gap === 0 || Math.abs(newGridHeight - newHeight) <= gap ? newGridHeight : newHeight;\n }\n var delta = {\n width: newWidth - original.width,\n height: newHeight - original.height,\n };\n if (width && typeof width === 'string') {\n if (width.endsWith('%')) {\n var percent = (newWidth / parentSize.width) * 100;\n newWidth = percent + \"%\";\n }\n else if (width.endsWith('vw')) {\n var vw = (newWidth / this.window.innerWidth) * 100;\n newWidth = vw + \"vw\";\n }\n else if (width.endsWith('vh')) {\n var vh = (newWidth / this.window.innerHeight) * 100;\n newWidth = vh + \"vh\";\n }\n }\n if (height && typeof height === 'string') {\n if (height.endsWith('%')) {\n var percent = (newHeight / parentSize.height) * 100;\n newHeight = percent + \"%\";\n }\n else if (height.endsWith('vw')) {\n var vw = (newHeight / this.window.innerWidth) * 100;\n newHeight = vw + \"vw\";\n }\n else if (height.endsWith('vh')) {\n var vh = (newHeight / this.window.innerHeight) * 100;\n newHeight = vh + \"vh\";\n }\n }\n var newState = {\n width: this.createSizeForCssProperty(newWidth, 'width'),\n height: this.createSizeForCssProperty(newHeight, 'height'),\n };\n if (this.flexDir === 'row') {\n newState.flexBasis = newState.width;\n }\n else if (this.flexDir === 'column') {\n newState.flexBasis = newState.height;\n }\n // For v18, update state sync\n flushSync(function () {\n _this.setState(newState);\n });\n if (this.props.onResize) {\n this.props.onResize(event, direction, this.resizable, delta);\n }\n };\n Resizable.prototype.onMouseUp = function (event) {\n var _a = this.state, isResizing = _a.isResizing, direction = _a.direction, original = _a.original;\n if (!isResizing || !this.resizable) {\n return;\n }\n var delta = {\n width: this.size.width - original.width,\n height: this.size.height - original.height,\n };\n if (this.props.onResizeStop) {\n this.props.onResizeStop(event, direction, this.resizable, delta);\n }\n if (this.props.size) {\n this.setState(this.props.size);\n }\n this.unbindEvents();\n this.setState({\n isResizing: false,\n backgroundStyle: __assign(__assign({}, this.state.backgroundStyle), { cursor: 'auto' }),\n });\n };\n Resizable.prototype.updateSize = function (size) {\n this.setState({ width: size.width, height: size.height });\n };\n Resizable.prototype.renderResizer = function () {\n var _this = this;\n var _a = this.props, enable = _a.enable, handleStyles = _a.handleStyles, handleClasses = _a.handleClasses, handleWrapperStyle = _a.handleWrapperStyle, handleWrapperClass = _a.handleWrapperClass, handleComponent = _a.handleComponent;\n if (!enable) {\n return null;\n }\n var resizers = Object.keys(enable).map(function (dir) {\n if (enable[dir] !== false) {\n return (React.createElement(Resizer, { key: dir, direction: dir, onResizeStart: _this.onResizeStart, replaceStyles: handleStyles && handleStyles[dir], className: handleClasses && handleClasses[dir] }, handleComponent && handleComponent[dir] ? handleComponent[dir] : null));\n }\n return null;\n });\n // #93 Wrap the resize box in span (will not break 100% width/height)\n return (React.createElement(\"div\", { className: handleWrapperClass, style: handleWrapperStyle }, resizers));\n };\n Resizable.prototype.render = function () {\n var _this = this;\n var extendsProps = Object.keys(this.props).reduce(function (acc, key) {\n if (definedProps.indexOf(key) !== -1) {\n return acc;\n }\n acc[key] = _this.props[key];\n return acc;\n }, {});\n var style = __assign(__assign(__assign({ position: 'relative', userSelect: this.state.isResizing ? 'none' : 'auto' }, this.props.style), this.sizeStyle), { maxWidth: this.props.maxWidth, maxHeight: this.props.maxHeight, minWidth: this.props.minWidth, minHeight: this.props.minHeight, boxSizing: 'border-box', flexShrink: 0 });\n if (this.state.flexBasis) {\n style.flexBasis = this.state.flexBasis;\n }\n var Wrapper = this.props.as || 'div';\n return (React.createElement(Wrapper, __assign({ ref: this.ref, style: style, className: this.props.className }, extendsProps),\n this.state.isResizing && React.createElement(\"div\", { style: this.state.backgroundStyle }),\n this.props.children,\n this.renderResizer()));\n };\n Resizable.defaultProps = {\n as: 'div',\n onResizeStart: function () { },\n onResize: function () { },\n onResizeStop: function () { },\n enable: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n topRight: true,\n bottomRight: true,\n bottomLeft: true,\n topLeft: true,\n },\n style: {},\n grid: [1, 1],\n lockAspectRatio: false,\n lockAspectRatioExtraWidth: 0,\n lockAspectRatioExtraHeight: 0,\n scale: 1,\n resizeRatio: 1,\n snapGap: 0,\n };\n return Resizable;\n}(React.PureComponent));\nexport { Resizable };\n","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlastindex\n$({ target: 'Array', proto: true }, {\n findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {\n return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\naddToUnscopables('findLastIndex');\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\n\n// IE8-\nvar INCORRECT_RESULT = [].unshift(0) !== 1;\n\n// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).unshift();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();\n\n// `Array.prototype.unshift` method\n// https://tc39.es/ecma262/#sec-array.prototype.unshift\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n unshift: function unshift(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n if (argCount) {\n doesNotExceedSafeInteger(len + argCount);\n var k = len;\n while (k--) {\n var to = k + argCount;\n if (k in O) O[to] = O[k];\n else deletePropertyOrThrow(O, to);\n }\n for (var j = 0; j < argCount; j++) {\n O[j] = arguments[j];\n }\n } return setArrayLength(O, len + argCount);\n }\n});\n","import { Bezier } from \"./bezier.js\";\n\n// math-inlining.\nconst { abs, cos, sin, acos, atan2, sqrt, pow } = Math;\n\n// cube root function yielding real roots\nfunction crt(v) {\n return v < 0 ? -pow(-v, 1 / 3) : pow(v, 1 / 3);\n}\n\n// trig constants\nconst pi = Math.PI,\n tau = 2 * pi,\n quart = pi / 2,\n // float precision significant decimal\n epsilon = 0.000001,\n // extremas used in bbox calculation and similar algorithms\n nMax = Number.MAX_SAFE_INTEGER || 9007199254740991,\n nMin = Number.MIN_SAFE_INTEGER || -9007199254740991,\n // a zero coordinate, which is surprisingly useful\n ZERO = { x: 0, y: 0, z: 0 };\n\n// Bezier utility functions\nconst utils = {\n // Legendre-Gauss abscissae with n=24 (x_i values, defined at i=n as the roots of the nth order Legendre polynomial Pn(x))\n Tvalues: [\n -0.0640568928626056260850430826247450385909,\n 0.0640568928626056260850430826247450385909,\n -0.1911188674736163091586398207570696318404,\n 0.1911188674736163091586398207570696318404,\n -0.3150426796961633743867932913198102407864,\n 0.3150426796961633743867932913198102407864,\n -0.4337935076260451384870842319133497124524,\n 0.4337935076260451384870842319133497124524,\n -0.5454214713888395356583756172183723700107,\n 0.5454214713888395356583756172183723700107,\n -0.6480936519369755692524957869107476266696,\n 0.6480936519369755692524957869107476266696,\n -0.7401241915785543642438281030999784255232,\n 0.7401241915785543642438281030999784255232,\n -0.8200019859739029219539498726697452080761,\n 0.8200019859739029219539498726697452080761,\n -0.8864155270044010342131543419821967550873,\n 0.8864155270044010342131543419821967550873,\n -0.9382745520027327585236490017087214496548,\n 0.9382745520027327585236490017087214496548,\n -0.9747285559713094981983919930081690617411,\n 0.9747285559713094981983919930081690617411,\n -0.9951872199970213601799974097007368118745,\n 0.9951872199970213601799974097007368118745,\n ],\n\n // Legendre-Gauss weights with n=24 (w_i values, defined by a function linked to in the Bezier primer article)\n Cvalues: [\n 0.1279381953467521569740561652246953718517,\n 0.1279381953467521569740561652246953718517,\n 0.1258374563468282961213753825111836887264,\n 0.1258374563468282961213753825111836887264,\n 0.121670472927803391204463153476262425607,\n 0.121670472927803391204463153476262425607,\n 0.1155056680537256013533444839067835598622,\n 0.1155056680537256013533444839067835598622,\n 0.1074442701159656347825773424466062227946,\n 0.1074442701159656347825773424466062227946,\n 0.0976186521041138882698806644642471544279,\n 0.0976186521041138882698806644642471544279,\n 0.086190161531953275917185202983742667185,\n 0.086190161531953275917185202983742667185,\n 0.0733464814110803057340336152531165181193,\n 0.0733464814110803057340336152531165181193,\n 0.0592985849154367807463677585001085845412,\n 0.0592985849154367807463677585001085845412,\n 0.0442774388174198061686027482113382288593,\n 0.0442774388174198061686027482113382288593,\n 0.0285313886289336631813078159518782864491,\n 0.0285313886289336631813078159518782864491,\n 0.0123412297999871995468056670700372915759,\n 0.0123412297999871995468056670700372915759,\n ],\n\n arcfn: function (t, derivativeFn) {\n const d = derivativeFn(t);\n let l = d.x * d.x + d.y * d.y;\n if (typeof d.z !== \"undefined\") {\n l += d.z * d.z;\n }\n return sqrt(l);\n },\n\n compute: function (t, points, _3d) {\n // shortcuts\n if (t === 0) {\n points[0].t = 0;\n return points[0];\n }\n\n const order = points.length - 1;\n\n if (t === 1) {\n points[order].t = 1;\n return points[order];\n }\n\n const mt = 1 - t;\n let p = points;\n\n // constant?\n if (order === 0) {\n points[0].t = t;\n return points[0];\n }\n\n // linear?\n if (order === 1) {\n const ret = {\n x: mt * p[0].x + t * p[1].x,\n y: mt * p[0].y + t * p[1].y,\n t: t,\n };\n if (_3d) {\n ret.z = mt * p[0].z + t * p[1].z;\n }\n return ret;\n }\n\n // quadratic/cubic curve?\n if (order < 4) {\n let mt2 = mt * mt,\n t2 = t * t,\n a,\n b,\n c,\n d = 0;\n if (order === 2) {\n p = [p[0], p[1], p[2], ZERO];\n a = mt2;\n b = mt * t * 2;\n c = t2;\n } else if (order === 3) {\n a = mt2 * mt;\n b = mt2 * t * 3;\n c = mt * t2 * 3;\n d = t * t2;\n }\n const ret = {\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\n t: t,\n };\n if (_3d) {\n ret.z = a * p[0].z + b * p[1].z + c * p[2].z + d * p[3].z;\n }\n return ret;\n }\n\n // higher order curves: use de Casteljau's computation\n const dCpts = JSON.parse(JSON.stringify(points));\n while (dCpts.length > 1) {\n for (let i = 0; i < dCpts.length - 1; i++) {\n dCpts[i] = {\n x: dCpts[i].x + (dCpts[i + 1].x - dCpts[i].x) * t,\n y: dCpts[i].y + (dCpts[i + 1].y - dCpts[i].y) * t,\n };\n if (typeof dCpts[i].z !== \"undefined\") {\n dCpts[i] = dCpts[i].z + (dCpts[i + 1].z - dCpts[i].z) * t;\n }\n }\n dCpts.splice(dCpts.length - 1, 1);\n }\n dCpts[0].t = t;\n return dCpts[0];\n },\n\n computeWithRatios: function (t, points, ratios, _3d) {\n const mt = 1 - t,\n r = ratios,\n p = points;\n\n let f1 = r[0],\n f2 = r[1],\n f3 = r[2],\n f4 = r[3],\n d;\n\n // spec for linear\n f1 *= mt;\n f2 *= t;\n\n if (p.length === 2) {\n d = f1 + f2;\n return {\n x: (f1 * p[0].x + f2 * p[1].x) / d,\n y: (f1 * p[0].y + f2 * p[1].y) / d,\n z: !_3d ? false : (f1 * p[0].z + f2 * p[1].z) / d,\n t: t,\n };\n }\n\n // upgrade to quadratic\n f1 *= mt;\n f2 *= 2 * mt;\n f3 *= t * t;\n\n if (p.length === 3) {\n d = f1 + f2 + f3;\n return {\n x: (f1 * p[0].x + f2 * p[1].x + f3 * p[2].x) / d,\n y: (f1 * p[0].y + f2 * p[1].y + f3 * p[2].y) / d,\n z: !_3d ? false : (f1 * p[0].z + f2 * p[1].z + f3 * p[2].z) / d,\n t: t,\n };\n }\n\n // upgrade to cubic\n f1 *= mt;\n f2 *= 1.5 * mt;\n f3 *= 3 * mt;\n f4 *= t * t * t;\n\n if (p.length === 4) {\n d = f1 + f2 + f3 + f4;\n return {\n x: (f1 * p[0].x + f2 * p[1].x + f3 * p[2].x + f4 * p[3].x) / d,\n y: (f1 * p[0].y + f2 * p[1].y + f3 * p[2].y + f4 * p[3].y) / d,\n z: !_3d\n ? false\n : (f1 * p[0].z + f2 * p[1].z + f3 * p[2].z + f4 * p[3].z) / d,\n t: t,\n };\n }\n },\n\n derive: function (points, _3d) {\n const dpoints = [];\n for (let p = points, d = p.length, c = d - 1; d > 1; d--, c--) {\n const list = [];\n for (let j = 0, dpt; j < c; j++) {\n dpt = {\n x: c * (p[j + 1].x - p[j].x),\n y: c * (p[j + 1].y - p[j].y),\n };\n if (_3d) {\n dpt.z = c * (p[j + 1].z - p[j].z);\n }\n list.push(dpt);\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n },\n\n between: function (v, m, M) {\n return (\n (m <= v && v <= M) ||\n utils.approximately(v, m) ||\n utils.approximately(v, M)\n );\n },\n\n approximately: function (a, b, precision) {\n return abs(a - b) <= (precision || epsilon);\n },\n\n length: function (derivativeFn) {\n const z = 0.5,\n len = utils.Tvalues.length;\n\n let sum = 0;\n\n for (let i = 0, t; i < len; i++) {\n t = z * utils.Tvalues[i] + z;\n sum += utils.Cvalues[i] * utils.arcfn(t, derivativeFn);\n }\n return z * sum;\n },\n\n map: function (v, ds, de, ts, te) {\n const d1 = de - ds,\n d2 = te - ts,\n v2 = v - ds,\n r = v2 / d1;\n return ts + d2 * r;\n },\n\n lerp: function (r, v1, v2) {\n const ret = {\n x: v1.x + r * (v2.x - v1.x),\n y: v1.y + r * (v2.y - v1.y),\n };\n if (v1.z !== undefined && v2.z !== undefined) {\n ret.z = v1.z + r * (v2.z - v1.z);\n }\n return ret;\n },\n\n pointToString: function (p) {\n let s = p.x + \"/\" + p.y;\n if (typeof p.z !== \"undefined\") {\n s += \"/\" + p.z;\n }\n return s;\n },\n\n pointsToString: function (points) {\n return \"[\" + points.map(utils.pointToString).join(\", \") + \"]\";\n },\n\n copy: function (obj) {\n return JSON.parse(JSON.stringify(obj));\n },\n\n angle: function (o, v1, v2) {\n const dx1 = v1.x - o.x,\n dy1 = v1.y - o.y,\n dx2 = v2.x - o.x,\n dy2 = v2.y - o.y,\n cross = dx1 * dy2 - dy1 * dx2,\n dot = dx1 * dx2 + dy1 * dy2;\n return atan2(cross, dot);\n },\n\n // round as string, to avoid rounding errors\n round: function (v, d) {\n const s = \"\" + v;\n const pos = s.indexOf(\".\");\n return parseFloat(s.substring(0, pos + 1 + d));\n },\n\n dist: function (p1, p2) {\n const dx = p1.x - p2.x,\n dy = p1.y - p2.y;\n return sqrt(dx * dx + dy * dy);\n },\n\n closest: function (LUT, point) {\n let mdist = pow(2, 63),\n mpos,\n d;\n LUT.forEach(function (p, idx) {\n d = utils.dist(point, p);\n if (d < mdist) {\n mdist = d;\n mpos = idx;\n }\n });\n return { mdist: mdist, mpos: mpos };\n },\n\n abcratio: function (t, n) {\n // see ratio(t) note on http://pomax.github.io/bezierinfo/#abc\n if (n !== 2 && n !== 3) {\n return false;\n }\n if (typeof t === \"undefined\") {\n t = 0.5;\n } else if (t === 0 || t === 1) {\n return t;\n }\n const bottom = pow(t, n) + pow(1 - t, n),\n top = bottom - 1;\n return abs(top / bottom);\n },\n\n projectionratio: function (t, n) {\n // see u(t) note on http://pomax.github.io/bezierinfo/#abc\n if (n !== 2 && n !== 3) {\n return false;\n }\n if (typeof t === \"undefined\") {\n t = 0.5;\n } else if (t === 0 || t === 1) {\n return t;\n }\n const top = pow(1 - t, n),\n bottom = pow(t, n) + top;\n return top / bottom;\n },\n\n lli8: function (x1, y1, x2, y2, x3, y3, x4, y4) {\n const nx =\n (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4),\n ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4),\n d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (d == 0) {\n return false;\n }\n return { x: nx / d, y: ny / d };\n },\n\n lli4: function (p1, p2, p3, p4) {\n const x1 = p1.x,\n y1 = p1.y,\n x2 = p2.x,\n y2 = p2.y,\n x3 = p3.x,\n y3 = p3.y,\n x4 = p4.x,\n y4 = p4.y;\n return utils.lli8(x1, y1, x2, y2, x3, y3, x4, y4);\n },\n\n lli: function (v1, v2) {\n return utils.lli4(v1, v1.c, v2, v2.c);\n },\n\n makeline: function (p1, p2) {\n const x1 = p1.x,\n y1 = p1.y,\n x2 = p2.x,\n y2 = p2.y,\n dx = (x2 - x1) / 3,\n dy = (y2 - y1) / 3;\n return new Bezier(\n x1,\n y1,\n x1 + dx,\n y1 + dy,\n x1 + 2 * dx,\n y1 + 2 * dy,\n x2,\n y2\n );\n },\n\n findbbox: function (sections) {\n let mx = nMax,\n my = nMax,\n MX = nMin,\n MY = nMin;\n sections.forEach(function (s) {\n const bbox = s.bbox();\n if (mx > bbox.x.min) mx = bbox.x.min;\n if (my > bbox.y.min) my = bbox.y.min;\n if (MX < bbox.x.max) MX = bbox.x.max;\n if (MY < bbox.y.max) MY = bbox.y.max;\n });\n return {\n x: { min: mx, mid: (mx + MX) / 2, max: MX, size: MX - mx },\n y: { min: my, mid: (my + MY) / 2, max: MY, size: MY - my },\n };\n },\n\n shapeintersections: function (\n s1,\n bbox1,\n s2,\n bbox2,\n curveIntersectionThreshold\n ) {\n if (!utils.bboxoverlap(bbox1, bbox2)) return [];\n const intersections = [];\n const a1 = [s1.startcap, s1.forward, s1.back, s1.endcap];\n const a2 = [s2.startcap, s2.forward, s2.back, s2.endcap];\n a1.forEach(function (l1) {\n if (l1.virtual) return;\n a2.forEach(function (l2) {\n if (l2.virtual) return;\n const iss = l1.intersects(l2, curveIntersectionThreshold);\n if (iss.length > 0) {\n iss.c1 = l1;\n iss.c2 = l2;\n iss.s1 = s1;\n iss.s2 = s2;\n intersections.push(iss);\n }\n });\n });\n return intersections;\n },\n\n makeshape: function (forward, back, curveIntersectionThreshold) {\n const bpl = back.points.length;\n const fpl = forward.points.length;\n const start = utils.makeline(back.points[bpl - 1], forward.points[0]);\n const end = utils.makeline(forward.points[fpl - 1], back.points[0]);\n const shape = {\n startcap: start,\n forward: forward,\n back: back,\n endcap: end,\n bbox: utils.findbbox([start, forward, back, end]),\n };\n shape.intersections = function (s2) {\n return utils.shapeintersections(\n shape,\n shape.bbox,\n s2,\n s2.bbox,\n curveIntersectionThreshold\n );\n };\n return shape;\n },\n\n getminmax: function (curve, d, list) {\n if (!list) return { min: 0, max: 0 };\n let min = nMax,\n max = nMin,\n t,\n c;\n if (list.indexOf(0) === -1) {\n list = [0].concat(list);\n }\n if (list.indexOf(1) === -1) {\n list.push(1);\n }\n for (let i = 0, len = list.length; i < len; i++) {\n t = list[i];\n c = curve.get(t);\n if (c[d] < min) {\n min = c[d];\n }\n if (c[d] > max) {\n max = c[d];\n }\n }\n return { min: min, mid: (min + max) / 2, max: max, size: max - min };\n },\n\n align: function (points, line) {\n const tx = line.p1.x,\n ty = line.p1.y,\n a = -atan2(line.p2.y - ty, line.p2.x - tx),\n d = function (v) {\n return {\n x: (v.x - tx) * cos(a) - (v.y - ty) * sin(a),\n y: (v.x - tx) * sin(a) + (v.y - ty) * cos(a),\n };\n };\n return points.map(d);\n },\n\n roots: function (points, line) {\n line = line || { p1: { x: 0, y: 0 }, p2: { x: 1, y: 0 } };\n\n const order = points.length - 1;\n const aligned = utils.align(points, line);\n const reduce = function (t) {\n return 0 <= t && t <= 1;\n };\n\n if (order === 2) {\n const a = aligned[0].y,\n b = aligned[1].y,\n c = aligned[2].y,\n d = a - 2 * b + c;\n if (d !== 0) {\n const m1 = -sqrt(b * b - a * c),\n m2 = -a + b,\n v1 = -(m1 + m2) / d,\n v2 = -(-m1 + m2) / d;\n return [v1, v2].filter(reduce);\n } else if (b !== c && d === 0) {\n return [(2 * b - c) / (2 * b - 2 * c)].filter(reduce);\n }\n return [];\n }\n\n // see http://www.trans4mind.com/personal_development/mathematics/polynomials/cubicAlgebra.htm\n const pa = aligned[0].y,\n pb = aligned[1].y,\n pc = aligned[2].y,\n pd = aligned[3].y;\n\n let d = -pa + 3 * pb - 3 * pc + pd,\n a = 3 * pa - 6 * pb + 3 * pc,\n b = -3 * pa + 3 * pb,\n c = pa;\n\n if (utils.approximately(d, 0)) {\n // this is not a cubic curve.\n if (utils.approximately(a, 0)) {\n // in fact, this is not a quadratic curve either.\n if (utils.approximately(b, 0)) {\n // in fact in fact, there are no solutions.\n return [];\n }\n // linear solution:\n return [-c / b].filter(reduce);\n }\n // quadratic solution:\n const q = sqrt(b * b - 4 * a * c),\n a2 = 2 * a;\n return [(q - b) / a2, (-b - q) / a2].filter(reduce);\n }\n\n // at this point, we know we need a cubic solution:\n\n a /= d;\n b /= d;\n c /= d;\n\n const p = (3 * b - a * a) / 3,\n p3 = p / 3,\n q = (2 * a * a * a - 9 * a * b + 27 * c) / 27,\n q2 = q / 2,\n discriminant = q2 * q2 + p3 * p3 * p3;\n\n let u1, v1, x1, x2, x3;\n if (discriminant < 0) {\n const mp3 = -p / 3,\n mp33 = mp3 * mp3 * mp3,\n r = sqrt(mp33),\n t = -q / (2 * r),\n cosphi = t < -1 ? -1 : t > 1 ? 1 : t,\n phi = acos(cosphi),\n crtr = crt(r),\n t1 = 2 * crtr;\n x1 = t1 * cos(phi / 3) - a / 3;\n x2 = t1 * cos((phi + tau) / 3) - a / 3;\n x3 = t1 * cos((phi + 2 * tau) / 3) - a / 3;\n return [x1, x2, x3].filter(reduce);\n } else if (discriminant === 0) {\n u1 = q2 < 0 ? crt(-q2) : -crt(q2);\n x1 = 2 * u1 - a / 3;\n x2 = -u1 - a / 3;\n return [x1, x2].filter(reduce);\n } else {\n const sd = sqrt(discriminant);\n u1 = crt(-q2 + sd);\n v1 = crt(q2 + sd);\n return [u1 - v1 - a / 3].filter(reduce);\n }\n },\n\n droots: function (p) {\n // quadratic roots are easy\n if (p.length === 3) {\n const a = p[0],\n b = p[1],\n c = p[2],\n d = a - 2 * b + c;\n if (d !== 0) {\n const m1 = -sqrt(b * b - a * c),\n m2 = -a + b,\n v1 = -(m1 + m2) / d,\n v2 = -(-m1 + m2) / d;\n return [v1, v2];\n } else if (b !== c && d === 0) {\n return [(2 * b - c) / (2 * (b - c))];\n }\n return [];\n }\n\n // linear roots are even easier\n if (p.length === 2) {\n const a = p[0],\n b = p[1];\n if (a !== b) {\n return [a / (a - b)];\n }\n return [];\n }\n\n return [];\n },\n\n curvature: function (t, d1, d2, _3d, kOnly) {\n let num,\n dnm,\n adk,\n dk,\n k = 0,\n r = 0;\n\n //\n // We're using the following formula for curvature:\n //\n // x'y\" - y'x\"\n // k(t) = ------------------\n // (x'² + y'²)^(3/2)\n //\n // from https://en.wikipedia.org/wiki/Radius_of_curvature#Definition\n //\n // With it corresponding 3D counterpart:\n //\n // sqrt( (y'z\" - y\"z')² + (z'x\" - z\"x')² + (x'y\" - x\"y')²)\n // k(t) = -------------------------------------------------------\n // (x'² + y'² + z'²)^(3/2)\n //\n\n const d = utils.compute(t, d1);\n const dd = utils.compute(t, d2);\n const qdsum = d.x * d.x + d.y * d.y;\n\n if (_3d) {\n num = sqrt(\n pow(d.y * dd.z - dd.y * d.z, 2) +\n pow(d.z * dd.x - dd.z * d.x, 2) +\n pow(d.x * dd.y - dd.x * d.y, 2)\n );\n dnm = pow(qdsum + d.z * d.z, 3 / 2);\n } else {\n num = d.x * dd.y - d.y * dd.x;\n dnm = pow(qdsum, 3 / 2);\n }\n\n if (num === 0 || dnm === 0) {\n return { k: 0, r: 0 };\n }\n\n k = num / dnm;\n r = dnm / num;\n\n // We're also computing the derivative of kappa, because\n // there is value in knowing the rate of change for the\n // curvature along the curve. And we're just going to\n // ballpark it based on an epsilon.\n if (!kOnly) {\n // compute k'(t) based on the interval before, and after it,\n // to at least try to not introduce forward/backward pass bias.\n const pk = utils.curvature(t - 0.001, d1, d2, _3d, true).k;\n const nk = utils.curvature(t + 0.001, d1, d2, _3d, true).k;\n dk = (nk - k + (k - pk)) / 2;\n adk = (abs(nk - k) + abs(k - pk)) / 2;\n }\n\n return { k: k, r: r, dk: dk, adk: adk };\n },\n\n inflections: function (points) {\n if (points.length < 4) return [];\n\n // FIXME: TODO: add in inflection abstraction for quartic+ curves?\n\n const p = utils.align(points, { p1: points[0], p2: points.slice(-1)[0] }),\n a = p[2].x * p[1].y,\n b = p[3].x * p[1].y,\n c = p[1].x * p[2].y,\n d = p[3].x * p[2].y,\n v1 = 18 * (-3 * a + 2 * b + 3 * c - d),\n v2 = 18 * (3 * a - b - 3 * c),\n v3 = 18 * (c - a);\n\n if (utils.approximately(v1, 0)) {\n if (!utils.approximately(v2, 0)) {\n let t = -v3 / v2;\n if (0 <= t && t <= 1) return [t];\n }\n return [];\n }\n\n const trm = v2 * v2 - 4 * v1 * v3,\n sq = Math.sqrt(trm),\n d2 = 2 * v1;\n\n if (utils.approximately(d2, 0)) return [];\n\n return [(sq - v2) / d2, -(v2 + sq) / d2].filter(function (r) {\n return 0 <= r && r <= 1;\n });\n },\n\n bboxoverlap: function (b1, b2) {\n const dims = [\"x\", \"y\"],\n len = dims.length;\n\n for (let i = 0, dim, l, t, d; i < len; i++) {\n dim = dims[i];\n l = b1[dim].mid;\n t = b2[dim].mid;\n d = (b1[dim].size + b2[dim].size) / 2;\n if (abs(l - t) >= d) return false;\n }\n return true;\n },\n\n expandbox: function (bbox, _bbox) {\n if (_bbox.x.min < bbox.x.min) {\n bbox.x.min = _bbox.x.min;\n }\n if (_bbox.y.min < bbox.y.min) {\n bbox.y.min = _bbox.y.min;\n }\n if (_bbox.z && _bbox.z.min < bbox.z.min) {\n bbox.z.min = _bbox.z.min;\n }\n if (_bbox.x.max > bbox.x.max) {\n bbox.x.max = _bbox.x.max;\n }\n if (_bbox.y.max > bbox.y.max) {\n bbox.y.max = _bbox.y.max;\n }\n if (_bbox.z && _bbox.z.max > bbox.z.max) {\n bbox.z.max = _bbox.z.max;\n }\n bbox.x.mid = (bbox.x.min + bbox.x.max) / 2;\n bbox.y.mid = (bbox.y.min + bbox.y.max) / 2;\n if (bbox.z) {\n bbox.z.mid = (bbox.z.min + bbox.z.max) / 2;\n }\n bbox.x.size = bbox.x.max - bbox.x.min;\n bbox.y.size = bbox.y.max - bbox.y.min;\n if (bbox.z) {\n bbox.z.size = bbox.z.max - bbox.z.min;\n }\n },\n\n pairiteration: function (c1, c2, curveIntersectionThreshold) {\n const c1b = c1.bbox(),\n c2b = c2.bbox(),\n r = 100000,\n threshold = curveIntersectionThreshold || 0.5;\n\n if (\n c1b.x.size + c1b.y.size < threshold &&\n c2b.x.size + c2b.y.size < threshold\n ) {\n return [\n (((r * (c1._t1 + c1._t2)) / 2) | 0) / r +\n \"/\" +\n (((r * (c2._t1 + c2._t2)) / 2) | 0) / r,\n ];\n }\n\n let cc1 = c1.split(0.5),\n cc2 = c2.split(0.5),\n pairs = [\n { left: cc1.left, right: cc2.left },\n { left: cc1.left, right: cc2.right },\n { left: cc1.right, right: cc2.right },\n { left: cc1.right, right: cc2.left },\n ];\n\n pairs = pairs.filter(function (pair) {\n return utils.bboxoverlap(pair.left.bbox(), pair.right.bbox());\n });\n\n let results = [];\n\n if (pairs.length === 0) return results;\n\n pairs.forEach(function (pair) {\n results = results.concat(\n utils.pairiteration(pair.left, pair.right, threshold)\n );\n });\n\n results = results.filter(function (v, i) {\n return results.indexOf(v) === i;\n });\n\n return results;\n },\n\n getccenter: function (p1, p2, p3) {\n const dx1 = p2.x - p1.x,\n dy1 = p2.y - p1.y,\n dx2 = p3.x - p2.x,\n dy2 = p3.y - p2.y,\n dx1p = dx1 * cos(quart) - dy1 * sin(quart),\n dy1p = dx1 * sin(quart) + dy1 * cos(quart),\n dx2p = dx2 * cos(quart) - dy2 * sin(quart),\n dy2p = dx2 * sin(quart) + dy2 * cos(quart),\n // chord midpoints\n mx1 = (p1.x + p2.x) / 2,\n my1 = (p1.y + p2.y) / 2,\n mx2 = (p2.x + p3.x) / 2,\n my2 = (p2.y + p3.y) / 2,\n // midpoint offsets\n mx1n = mx1 + dx1p,\n my1n = my1 + dy1p,\n mx2n = mx2 + dx2p,\n my2n = my2 + dy2p,\n // intersection of these lines:\n arc = utils.lli8(mx1, my1, mx1n, my1n, mx2, my2, mx2n, my2n),\n r = utils.dist(arc, p1);\n\n // arc start/end values, over mid point:\n let s = atan2(p1.y - arc.y, p1.x - arc.x),\n m = atan2(p2.y - arc.y, p2.x - arc.x),\n e = atan2(p3.y - arc.y, p3.x - arc.x),\n _;\n\n // determine arc direction (cw/ccw correction)\n if (s < e) {\n // if s m || m > e) {\n s += tau;\n }\n if (s > e) {\n _ = e;\n e = s;\n s = _;\n }\n } else {\n // if e 4) {\n if (arguments.length !== 1) {\n throw new Error(\n \"Only new Bezier(point[]) is accepted for 4th and higher order curves\"\n );\n }\n higher = true;\n }\n } else {\n if (len !== 6 && len !== 8 && len !== 9 && len !== 12) {\n if (arguments.length !== 1) {\n throw new Error(\n \"Only new Bezier(point[]) is accepted for 4th and higher order curves\"\n );\n }\n }\n }\n\n const _3d = (this._3d =\n (!higher && (len === 9 || len === 12)) ||\n (coords && coords[0] && typeof coords[0].z !== \"undefined\"));\n\n const points = (this.points = []);\n for (let idx = 0, step = _3d ? 3 : 2; idx < len; idx += step) {\n var point = {\n x: args[idx],\n y: args[idx + 1],\n };\n if (_3d) {\n point.z = args[idx + 2];\n }\n points.push(point);\n }\n const order = (this.order = points.length - 1);\n\n const dims = (this.dims = [\"x\", \"y\"]);\n if (_3d) dims.push(\"z\");\n this.dimlen = dims.length;\n\n const aligned = utils.align(points, { p1: points[0], p2: points[order] });\n this._linear = !aligned.some((p) => abs(p.y) > 0.0001);\n\n this._lut = [];\n\n this._t1 = 0;\n this._t2 = 1;\n this.update();\n }\n\n static quadraticFromPoints(p1, p2, p3, t) {\n if (typeof t === \"undefined\") {\n t = 0.5;\n }\n // shortcuts, although they're really dumb\n if (t === 0) {\n return new Bezier(p2, p2, p3);\n }\n if (t === 1) {\n return new Bezier(p1, p2, p2);\n }\n // real fitting.\n const abc = Bezier.getABC(2, p1, p2, p3, t);\n return new Bezier(p1, abc.A, p3);\n }\n\n static cubicFromPoints(S, B, E, t, d1) {\n if (typeof t === \"undefined\") {\n t = 0.5;\n }\n const abc = Bezier.getABC(3, S, B, E, t);\n if (typeof d1 === \"undefined\") {\n d1 = utils.dist(B, abc.C);\n }\n const d2 = (d1 * (1 - t)) / t;\n\n const selen = utils.dist(S, E),\n lx = (E.x - S.x) / selen,\n ly = (E.y - S.y) / selen,\n bx1 = d1 * lx,\n by1 = d1 * ly,\n bx2 = d2 * lx,\n by2 = d2 * ly;\n // derivation of new hull coordinates\n const e1 = { x: B.x - bx1, y: B.y - by1 },\n e2 = { x: B.x + bx2, y: B.y + by2 },\n A = abc.A,\n v1 = { x: A.x + (e1.x - A.x) / (1 - t), y: A.y + (e1.y - A.y) / (1 - t) },\n v2 = { x: A.x + (e2.x - A.x) / t, y: A.y + (e2.y - A.y) / t },\n nc1 = { x: S.x + (v1.x - S.x) / t, y: S.y + (v1.y - S.y) / t },\n nc2 = {\n x: E.x + (v2.x - E.x) / (1 - t),\n y: E.y + (v2.y - E.y) / (1 - t),\n };\n // ...done\n return new Bezier(S, nc1, nc2, E);\n }\n\n static getUtils() {\n return utils;\n }\n\n getUtils() {\n return Bezier.getUtils();\n }\n\n static get PolyBezier() {\n return PolyBezier;\n }\n\n valueOf() {\n return this.toString();\n }\n\n toString() {\n return utils.pointsToString(this.points);\n }\n\n toSVG() {\n if (this._3d) return false;\n const p = this.points,\n x = p[0].x,\n y = p[0].y,\n s = [\"M\", x, y, this.order === 2 ? \"Q\" : \"C\"];\n for (let i = 1, last = p.length; i < last; i++) {\n s.push(p[i].x);\n s.push(p[i].y);\n }\n return s.join(\" \");\n }\n\n setRatios(ratios) {\n if (ratios.length !== this.points.length) {\n throw new Error(\"incorrect number of ratio values\");\n }\n this.ratios = ratios;\n this._lut = []; // invalidate any precomputed LUT\n }\n\n verify() {\n const print = this.coordDigest();\n if (print !== this._print) {\n this._print = print;\n this.update();\n }\n }\n\n coordDigest() {\n return this.points\n .map(function (c, pos) {\n return \"\" + pos + c.x + c.y + (c.z ? c.z : 0);\n })\n .join(\"\");\n }\n\n update() {\n // invalidate any precomputed LUT\n this._lut = [];\n this.dpoints = utils.derive(this.points, this._3d);\n this.computedirection();\n }\n\n computedirection() {\n const points = this.points;\n const angle = utils.angle(points[0], points[this.order], points[1]);\n this.clockwise = angle > 0;\n }\n\n length() {\n return utils.length(this.derivative.bind(this));\n }\n\n static getABC(order = 2, S, B, E, t = 0.5) {\n const u = utils.projectionratio(t, order),\n um = 1 - u,\n C = {\n x: u * S.x + um * E.x,\n y: u * S.y + um * E.y,\n },\n s = utils.abcratio(t, order),\n A = {\n x: B.x + (B.x - C.x) / s,\n y: B.y + (B.y - C.y) / s,\n };\n return { A, B, C, S, E };\n }\n\n getABC(t, B) {\n B = B || this.get(t);\n let S = this.points[0];\n let E = this.points[this.order];\n return Bezier.getABC(this.order, S, B, E, t);\n }\n\n getLUT(steps) {\n this.verify();\n steps = steps || 100;\n if (this._lut.length === steps) {\n return this._lut;\n }\n this._lut = [];\n // We want a range from 0 to 1 inclusive, so\n // we decrement and then use <= rather than <:\n steps--;\n for (let i = 0, p, t; i < steps; i++) {\n t = i / (steps - 1);\n p = this.compute(t);\n p.t = t;\n this._lut.push(p);\n }\n return this._lut;\n }\n\n on(point, error) {\n error = error || 5;\n const lut = this.getLUT(),\n hits = [];\n for (let i = 0, c, t = 0; i < lut.length; i++) {\n c = lut[i];\n if (utils.dist(c, point) < error) {\n hits.push(c);\n t += i / lut.length;\n }\n }\n if (!hits.length) return false;\n return (t /= hits.length);\n }\n\n project(point) {\n // step 1: coarse check\n const LUT = this.getLUT(),\n l = LUT.length - 1,\n closest = utils.closest(LUT, point),\n mpos = closest.mpos,\n t1 = (mpos - 1) / l,\n t2 = (mpos + 1) / l,\n step = 0.1 / l;\n\n // step 2: fine check\n let mdist = closest.mdist,\n t = t1,\n ft = t,\n p;\n mdist += 1;\n for (let d; t < t2 + step; t += step) {\n p = this.compute(t);\n d = utils.dist(point, p);\n if (d < mdist) {\n mdist = d;\n ft = t;\n }\n }\n ft = ft < 0 ? 0 : ft > 1 ? 1 : ft;\n p = this.compute(ft);\n p.t = ft;\n p.d = mdist;\n return p;\n }\n\n get(t) {\n return this.compute(t);\n }\n\n point(idx) {\n return this.points[idx];\n }\n\n compute(t) {\n if (this.ratios) {\n return utils.computeWithRatios(t, this.points, this.ratios, this._3d);\n }\n return utils.compute(t, this.points, this._3d, this.ratios);\n }\n\n raise() {\n const p = this.points,\n np = [p[0]],\n k = p.length;\n for (let i = 1, pi, pim; i < k; i++) {\n pi = p[i];\n pim = p[i - 1];\n np[i] = {\n x: ((k - i) / k) * pi.x + (i / k) * pim.x,\n y: ((k - i) / k) * pi.y + (i / k) * pim.y,\n };\n }\n np[k] = p[k - 1];\n return new Bezier(np);\n }\n\n derivative(t) {\n return utils.compute(t, this.dpoints[0], this._3d);\n }\n\n dderivative(t) {\n return utils.compute(t, this.dpoints[1], this._3d);\n }\n\n align() {\n let p = this.points;\n return new Bezier(utils.align(p, { p1: p[0], p2: p[p.length - 1] }));\n }\n\n curvature(t) {\n return utils.curvature(t, this.dpoints[0], this.dpoints[1], this._3d);\n }\n\n inflections() {\n return utils.inflections(this.points);\n }\n\n normal(t) {\n return this._3d ? this.__normal3(t) : this.__normal2(t);\n }\n\n __normal2(t) {\n const d = this.derivative(t);\n const q = sqrt(d.x * d.x + d.y * d.y);\n return { x: -d.y / q, y: d.x / q };\n }\n\n __normal3(t) {\n // see http://stackoverflow.com/questions/25453159\n const r1 = this.derivative(t),\n r2 = this.derivative(t + 0.01),\n q1 = sqrt(r1.x * r1.x + r1.y * r1.y + r1.z * r1.z),\n q2 = sqrt(r2.x * r2.x + r2.y * r2.y + r2.z * r2.z);\n r1.x /= q1;\n r1.y /= q1;\n r1.z /= q1;\n r2.x /= q2;\n r2.y /= q2;\n r2.z /= q2;\n // cross product\n const c = {\n x: r2.y * r1.z - r2.z * r1.y,\n y: r2.z * r1.x - r2.x * r1.z,\n z: r2.x * r1.y - r2.y * r1.x,\n };\n const m = sqrt(c.x * c.x + c.y * c.y + c.z * c.z);\n c.x /= m;\n c.y /= m;\n c.z /= m;\n // rotation matrix\n const R = [\n c.x * c.x,\n c.x * c.y - c.z,\n c.x * c.z + c.y,\n c.x * c.y + c.z,\n c.y * c.y,\n c.y * c.z - c.x,\n c.x * c.z - c.y,\n c.y * c.z + c.x,\n c.z * c.z,\n ];\n // normal vector:\n const n = {\n x: R[0] * r1.x + R[1] * r1.y + R[2] * r1.z,\n y: R[3] * r1.x + R[4] * r1.y + R[5] * r1.z,\n z: R[6] * r1.x + R[7] * r1.y + R[8] * r1.z,\n };\n return n;\n }\n\n hull(t) {\n let p = this.points,\n _p = [],\n q = [],\n idx = 0;\n q[idx++] = p[0];\n q[idx++] = p[1];\n q[idx++] = p[2];\n if (this.order === 3) {\n q[idx++] = p[3];\n }\n // we lerp between all points at each iteration, until we have 1 point left.\n while (p.length > 1) {\n _p = [];\n for (let i = 0, pt, l = p.length - 1; i < l; i++) {\n pt = utils.lerp(t, p[i], p[i + 1]);\n q[idx++] = pt;\n _p.push(pt);\n }\n p = _p;\n }\n return q;\n }\n\n split(t1, t2) {\n // shortcuts\n if (t1 === 0 && !!t2) {\n return this.split(t2).left;\n }\n if (t2 === 1) {\n return this.split(t1).right;\n }\n\n // no shortcut: use \"de Casteljau\" iteration.\n const q = this.hull(t1);\n const result = {\n left:\n this.order === 2\n ? new Bezier([q[0], q[3], q[5]])\n : new Bezier([q[0], q[4], q[7], q[9]]),\n right:\n this.order === 2\n ? new Bezier([q[5], q[4], q[2]])\n : new Bezier([q[9], q[8], q[6], q[3]]),\n span: q,\n };\n\n // make sure we bind _t1/_t2 information!\n result.left._t1 = utils.map(0, 0, 1, this._t1, this._t2);\n result.left._t2 = utils.map(t1, 0, 1, this._t1, this._t2);\n result.right._t1 = utils.map(t1, 0, 1, this._t1, this._t2);\n result.right._t2 = utils.map(1, 0, 1, this._t1, this._t2);\n\n // if we have no t2, we're done\n if (!t2) {\n return result;\n }\n\n // if we have a t2, split again:\n t2 = utils.map(t2, t1, 1, 0, 1);\n return result.right.split(t2).left;\n }\n\n extrema() {\n const result = {};\n let roots = [];\n\n this.dims.forEach(\n function (dim) {\n let mfn = function (v) {\n return v[dim];\n };\n let p = this.dpoints[0].map(mfn);\n result[dim] = utils.droots(p);\n if (this.order === 3) {\n p = this.dpoints[1].map(mfn);\n result[dim] = result[dim].concat(utils.droots(p));\n }\n result[dim] = result[dim].filter(function (t) {\n return t >= 0 && t <= 1;\n });\n roots = roots.concat(result[dim].sort(utils.numberSort));\n }.bind(this)\n );\n\n result.values = roots.sort(utils.numberSort).filter(function (v, idx) {\n return roots.indexOf(v) === idx;\n });\n\n return result;\n }\n\n bbox() {\n const extrema = this.extrema(),\n result = {};\n this.dims.forEach(\n function (d) {\n result[d] = utils.getminmax(this, d, extrema[d]);\n }.bind(this)\n );\n return result;\n }\n\n overlaps(curve) {\n const lbbox = this.bbox(),\n tbbox = curve.bbox();\n return utils.bboxoverlap(lbbox, tbbox);\n }\n\n offset(t, d) {\n if (typeof d !== \"undefined\") {\n const c = this.get(t),\n n = this.normal(t);\n const ret = {\n c: c,\n n: n,\n x: c.x + n.x * d,\n y: c.y + n.y * d,\n };\n if (this._3d) {\n ret.z = c.z + n.z * d;\n }\n return ret;\n }\n if (this._linear) {\n const nv = this.normal(0),\n coords = this.points.map(function (p) {\n const ret = {\n x: p.x + t * nv.x,\n y: p.y + t * nv.y,\n };\n if (p.z && nv.z) {\n ret.z = p.z + t * nv.z;\n }\n return ret;\n });\n return [new Bezier(coords)];\n }\n return this.reduce().map(function (s) {\n if (s._linear) {\n return s.offset(t)[0];\n }\n return s.scale(t);\n });\n }\n\n simple() {\n if (this.order === 3) {\n const a1 = utils.angle(this.points[0], this.points[3], this.points[1]);\n const a2 = utils.angle(this.points[0], this.points[3], this.points[2]);\n if ((a1 > 0 && a2 < 0) || (a1 < 0 && a2 > 0)) return false;\n }\n const n1 = this.normal(0);\n const n2 = this.normal(1);\n let s = n1.x * n2.x + n1.y * n2.y;\n if (this._3d) {\n s += n1.z * n2.z;\n }\n return abs(acos(s)) < pi / 3;\n }\n\n reduce() {\n // TODO: examine these var types in more detail...\n let i,\n t1 = 0,\n t2 = 0,\n step = 0.01,\n segment,\n pass1 = [],\n pass2 = [];\n // first pass: split on extrema\n let extrema = this.extrema().values;\n if (extrema.indexOf(0) === -1) {\n extrema = [0].concat(extrema);\n }\n if (extrema.indexOf(1) === -1) {\n extrema.push(1);\n }\n\n for (t1 = extrema[0], i = 1; i < extrema.length; i++) {\n t2 = extrema[i];\n segment = this.split(t1, t2);\n segment._t1 = t1;\n segment._t2 = t2;\n pass1.push(segment);\n t1 = t2;\n }\n\n // second pass: further reduce these segments to simple segments\n pass1.forEach(function (p1) {\n t1 = 0;\n t2 = 0;\n while (t2 <= 1) {\n for (t2 = t1 + step; t2 <= 1 + step; t2 += step) {\n segment = p1.split(t1, t2);\n if (!segment.simple()) {\n t2 -= step;\n if (abs(t1 - t2) < step) {\n // we can never form a reduction\n return [];\n }\n segment = p1.split(t1, t2);\n segment._t1 = utils.map(t1, 0, 1, p1._t1, p1._t2);\n segment._t2 = utils.map(t2, 0, 1, p1._t1, p1._t2);\n pass2.push(segment);\n t1 = t2;\n break;\n }\n }\n }\n if (t1 < 1) {\n segment = p1.split(t1, 1);\n segment._t1 = utils.map(t1, 0, 1, p1._t1, p1._t2);\n segment._t2 = p1._t2;\n pass2.push(segment);\n }\n });\n return pass2;\n }\n\n scale(d) {\n const order = this.order;\n let distanceFn = false;\n if (typeof d === \"function\") {\n distanceFn = d;\n }\n if (distanceFn && order === 2) {\n return this.raise().scale(distanceFn);\n }\n\n // TODO: add special handling for degenerate (=linear) curves.\n const clockwise = this.clockwise;\n const r1 = distanceFn ? distanceFn(0) : d;\n const r2 = distanceFn ? distanceFn(1) : d;\n const v = [this.offset(0, 10), this.offset(1, 10)];\n const points = this.points;\n const np = [];\n const o = utils.lli4(v[0], v[0].c, v[1], v[1].c);\n\n if (!o) {\n throw new Error(\"cannot scale this curve. Try reducing it first.\");\n }\n // move all points by distance 'd' wrt the origin 'o'\n\n // move end points by fixed distance along normal.\n [0, 1].forEach(function (t) {\n const p = (np[t * order] = utils.copy(points[t * order]));\n p.x += (t ? r2 : r1) * v[t].n.x;\n p.y += (t ? r2 : r1) * v[t].n.y;\n });\n\n if (!distanceFn) {\n // move control points to lie on the intersection of the offset\n // derivative vector, and the origin-through-control vector\n [0, 1].forEach((t) => {\n if (order === 2 && !!t) return;\n const p = np[t * order];\n const d = this.derivative(t);\n const p2 = { x: p.x + d.x, y: p.y + d.y };\n np[t + 1] = utils.lli4(p, p2, o, points[t + 1]);\n });\n return new Bezier(np);\n }\n\n // move control points by \"however much necessary to\n // ensure the correct tangent to endpoint\".\n [0, 1].forEach(function (t) {\n if (order === 2 && !!t) return;\n var p = points[t + 1];\n var ov = {\n x: p.x - o.x,\n y: p.y - o.y,\n };\n var rc = distanceFn ? distanceFn((t + 1) / order) : d;\n if (distanceFn && !clockwise) rc = -rc;\n var m = sqrt(ov.x * ov.x + ov.y * ov.y);\n ov.x /= m;\n ov.y /= m;\n np[t + 1] = {\n x: p.x + rc * ov.x,\n y: p.y + rc * ov.y,\n };\n });\n return new Bezier(np);\n }\n\n outline(d1, d2, d3, d4) {\n d2 = typeof d2 === \"undefined\" ? d1 : d2;\n const reduced = this.reduce(),\n len = reduced.length,\n fcurves = [];\n\n let bcurves = [],\n p,\n alen = 0,\n tlen = this.length();\n\n const graduated = typeof d3 !== \"undefined\" && typeof d4 !== \"undefined\";\n\n function linearDistanceFunction(s, e, tlen, alen, slen) {\n return function (v) {\n const f1 = alen / tlen,\n f2 = (alen + slen) / tlen,\n d = e - s;\n return utils.map(v, 0, 1, s + f1 * d, s + f2 * d);\n };\n }\n\n // form curve oulines\n reduced.forEach(function (segment) {\n const slen = segment.length();\n if (graduated) {\n fcurves.push(\n segment.scale(linearDistanceFunction(d1, d3, tlen, alen, slen))\n );\n bcurves.push(\n segment.scale(linearDistanceFunction(-d2, -d4, tlen, alen, slen))\n );\n } else {\n fcurves.push(segment.scale(d1));\n bcurves.push(segment.scale(-d2));\n }\n alen += slen;\n });\n\n // reverse the \"return\" outline\n bcurves = bcurves\n .map(function (s) {\n p = s.points;\n if (p[3]) {\n s.points = [p[3], p[2], p[1], p[0]];\n } else {\n s.points = [p[2], p[1], p[0]];\n }\n return s;\n })\n .reverse();\n\n // form the endcaps as lines\n const fs = fcurves[0].points[0],\n fe = fcurves[len - 1].points[fcurves[len - 1].points.length - 1],\n bs = bcurves[len - 1].points[bcurves[len - 1].points.length - 1],\n be = bcurves[0].points[0],\n ls = utils.makeline(bs, fs),\n le = utils.makeline(fe, be),\n segments = [ls].concat(fcurves).concat([le]).concat(bcurves),\n slen = segments.length;\n\n return new PolyBezier(segments);\n }\n\n outlineshapes(d1, d2, curveIntersectionThreshold) {\n d2 = d2 || d1;\n const outline = this.outline(d1, d2).curves;\n const shapes = [];\n for (let i = 1, len = outline.length; i < len / 2; i++) {\n const shape = utils.makeshape(\n outline[i],\n outline[len - i],\n curveIntersectionThreshold\n );\n shape.startcap.virtual = i > 1;\n shape.endcap.virtual = i < len / 2 - 1;\n shapes.push(shape);\n }\n return shapes;\n }\n\n intersects(curve, curveIntersectionThreshold) {\n if (!curve) return this.selfintersects(curveIntersectionThreshold);\n if (curve.p1 && curve.p2) {\n return this.lineIntersects(curve);\n }\n if (curve instanceof Bezier) {\n curve = curve.reduce();\n }\n return this.curveintersects(\n this.reduce(),\n curve,\n curveIntersectionThreshold\n );\n }\n\n lineIntersects(line) {\n const mx = min(line.p1.x, line.p2.x),\n my = min(line.p1.y, line.p2.y),\n MX = max(line.p1.x, line.p2.x),\n MY = max(line.p1.y, line.p2.y);\n return utils.roots(this.points, line).filter((t) => {\n var p = this.get(t);\n return utils.between(p.x, mx, MX) && utils.between(p.y, my, MY);\n });\n }\n\n selfintersects(curveIntersectionThreshold) {\n // \"simple\" curves cannot intersect with their direct\n // neighbour, so for each segment X we check whether\n // it intersects [0:x-2][x+2:last].\n\n const reduced = this.reduce(),\n len = reduced.length - 2,\n results = [];\n\n for (let i = 0, result, left, right; i < len; i++) {\n left = reduced.slice(i, i + 1);\n right = reduced.slice(i + 2);\n result = this.curveintersects(left, right, curveIntersectionThreshold);\n results.push(...result);\n }\n return results;\n }\n\n curveintersects(c1, c2, curveIntersectionThreshold) {\n const pairs = [];\n // step 1: pair off any overlapping segments\n c1.forEach(function (l) {\n c2.forEach(function (r) {\n if (l.overlaps(r)) {\n pairs.push({ left: l, right: r });\n }\n });\n });\n // step 2: for each pairing, run through the convergence algorithm.\n let intersections = [];\n pairs.forEach(function (pair) {\n const result = utils.pairiteration(\n pair.left,\n pair.right,\n curveIntersectionThreshold\n );\n if (result.length > 0) {\n intersections = intersections.concat(result);\n }\n });\n return intersections;\n }\n\n arcs(errorThreshold) {\n errorThreshold = errorThreshold || 0.5;\n return this._iterate(errorThreshold, []);\n }\n\n _error(pc, np1, s, e) {\n const q = (e - s) / 4,\n c1 = this.get(s + q),\n c2 = this.get(e - q),\n ref = utils.dist(pc, np1),\n d1 = utils.dist(pc, c1),\n d2 = utils.dist(pc, c2);\n return abs(d1 - ref) + abs(d2 - ref);\n }\n\n _iterate(errorThreshold, circles) {\n let t_s = 0,\n t_e = 1,\n safety;\n // we do a binary search to find the \"good `t` closest to no-longer-good\"\n do {\n safety = 0;\n\n // step 1: start with the maximum possible arc\n t_e = 1;\n\n // points:\n let np1 = this.get(t_s),\n np2,\n np3,\n arc,\n prev_arc;\n\n // booleans:\n let curr_good = false,\n prev_good = false,\n done;\n\n // numbers:\n let t_m = t_e,\n prev_e = 1,\n step = 0;\n\n // step 2: find the best possible arc\n do {\n prev_good = curr_good;\n prev_arc = arc;\n t_m = (t_s + t_e) / 2;\n step++;\n\n np2 = this.get(t_m);\n np3 = this.get(t_e);\n\n arc = utils.getccenter(np1, np2, np3);\n\n //also save the t values\n arc.interval = {\n start: t_s,\n end: t_e,\n };\n\n let error = this._error(arc, np1, t_s, t_e);\n curr_good = error <= errorThreshold;\n\n done = prev_good && !curr_good;\n if (!done) prev_e = t_e;\n\n // this arc is fine: we can move 'e' up to see if we can find a wider arc\n if (curr_good) {\n // if e is already at max, then we're done for this arc.\n if (t_e >= 1) {\n // make sure we cap at t=1\n arc.interval.end = prev_e = 1;\n prev_arc = arc;\n // if we capped the arc segment to t=1 we also need to make sure that\n // the arc's end angle is correct with respect to the bezier end point.\n if (t_e > 1) {\n let d = {\n x: arc.x + arc.r * cos(arc.e),\n y: arc.y + arc.r * sin(arc.e),\n };\n arc.e += utils.angle({ x: arc.x, y: arc.y }, d, this.get(1));\n }\n break;\n }\n // if not, move it up by half the iteration distance\n t_e = t_e + (t_e - t_s) / 2;\n } else {\n // this is a bad arc: we need to move 'e' down to find a good arc\n t_e = t_m;\n }\n } while (!done && safety++ < 100);\n\n if (safety >= 100) {\n break;\n }\n\n // console.log(\"L835: [F] arc found\", t_s, prev_e, prev_arc.x, prev_arc.y, prev_arc.s, prev_arc.e);\n\n prev_arc = prev_arc ? prev_arc : arc;\n circles.push(prev_arc);\n t_s = prev_e;\n } while (t_e < 1);\n return circles;\n }\n}\n\nexport { Bezier };\n"],"names":["module","exports","Collection","Events","Instance","Log","Model","Module","Singleton","Spine","association","createObject","makeArray","moduleKeywords","singularize","underscore","slice","indexOf","item","i","l","this","length","extend","child","parent","key","hasProp","call","ctor","constructor","prototype","__super__","hasOwnProperty","on","ev","callback","base","evs","j","len","name","split","_callbacks","push","one","handler","off","apply","arguments","trigger","args","list","ref","shift","listenTo","obj","listeningTo","listenToOnce","listeningToOnce","idx","lt","splice","stopListening","events","e","evts","k","len1","len2","len3","m","n","ref1","ref2","len4","p","results","join","trim","bind","unbind","trace","logPrefix","log","unshift","console","init","include","value","Error","included","extended","proxy","func","_this","superClass","atts","uuid","cid","id","uid","load","records","irecords","attributes","configure","className","deleteAll","toString","find","notFound","clone","findAll","ids","exists","Boolean","addRecord","record","root","refresh","values","options","result","clear","fromJSON","Array","isArray","sort","cloneArray","select","findByAttribute","findAllByAttribute","each","all","begin","end","first","last","count","destroyAll","destroy","update","updateAttributes","create","save","change","callbackOrParams","concat","fetch","toJSON","beforeFromJSON","objects","JSON","parse","comparator","array","idCounter","prefix","isNew","isValid","validate","eql","rec","error","stripCloneAttrs","updateAttribute","changeID","remove","destroyed","dup","newRecord","reload","original","stringify","Object","o","Func","version","sub","instances","statics","Result","setup","Class","model","associated","cb","fkey","add","str","replace","toLowerCase","Ctor","hasMany","belongsTo","hasOne","addBusinessDays","dirtyDate","dirtyAmount","requiredArgs","date","toDate","startedOnWeekend","isWeekend","amount","toInteger","isNaN","Date","NaN","hours","getHours","sign","fullWeeks","setDate","getDate","restDays","Math","abs","getDay","isSaturday","isSunday","setHours","eachDayOfInterval","dirtyInterval","_options$step","interval","startDate","start","endTime","getTime","RangeError","dates","currentDate","step","Number","isSameDay","dirtyDateLeft","dirtyDateRight","dateLeftStartOfDay","dateRightStartOfDay","isSameMonth","dateLeft","dateRight","getFullYear","getMonth","isSameWeek","dateLeftStartOfWeek","dateRightStartOfWeek","day","isWithinInterval","time","startTime","lastDayOfMonth","month","setFullYear","lastDayOfWeek","_ref","_ref2","_ref3","_options$weekStartsOn","_options$locale","_options$locale$optio","_defaultOptions$local","_defaultOptions$local2","defaultOptions","weekStartsOn","locale","diff","setMonth","dirtyMonth","year","dateWithDesiredMonth","daysInMonth","monthIndex","getDaysInMonth","min","set","minutes","setMinutes","seconds","setSeconds","milliseconds","setMilliseconds","startOfMonth","startOfWeek","startOfYear","cleanDate","subYears","addMonths","addYears","token","singleMatcher","RegExp","multiMatcher","decodeComponents","components","decodeURIComponent","err","left","right","decode","input","tokens","match","encodedURI","TypeError","replaceMap","exec","entries","keys","customDecodeURIComponent","predicate","ret","isArr","val","MAX_SAFE_INTEGER","argsTag","funcTag","genTag","freeGlobal","g","freeSelf","self","Function","arrayPush","index","offset","objectProto","objectToString","Symbol","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","undefined","nativeMax","max","baseFlatten","depth","isStrict","isFlattenable","isObjectLike","isLength","tag","type","isObject","isFunction","isArrayLike","isArrayLikeObject","isArguments","fromRight","flowRight","funcs","reverse","otherArgs","thisArg","HASH_UNDEFINED","asyncTag","nullTag","objectTag","proxyTag","undefinedTag","reIsHostCtor","reIsUint","typedArrayTags","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","transform","arrayProto","funcProto","coreJsData","funcToString","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","arg","objectCreate","symToStringTag","toStringTag","defineProperty","getNative","nativeIsBuffer","isBuffer","nativeNow","now","Map","nativeCreate","baseCreate","object","proto","Hash","entry","ListCache","MapCache","Stack","data","__data__","size","arrayLikeKeys","inherited","isArg","isBuff","isType","skipIndexes","iteratee","baseTimes","String","isIndex","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","has","get","pop","getMapData","pairs","LARGE_ARRAY_SIZE","baseFor","keysFunc","iterable","props","baseGetTag","isOwn","unmasked","getRawTag","baseIsArguments","baseIsNative","isMasked","test","toSource","baseKeysIn","nativeKeysIn","isProto","isPrototype","baseMerge","source","srcIndex","customizer","stack","srcValue","mergeFunc","safeGet","stacked","newValue","isCommon","isTyped","copyArray","buffer","isDeep","copy","cloneBuffer","typedArray","arrayBuffer","byteLength","byteOffset","isPlainObject","copyObject","keysIn","toPlainObject","initCloneObject","baseMergeDeep","baseRest","setToString","overRest","identity","baseSetToString","string","map","getValue","lastCalled","stamp","remaining","shortOut","other","baseUnary","assigner","merge","sources","guard","isIterateeCall","mergeWith","symbolTag","arrayIncludes","fromIndex","baseFindIndex","baseIsNaN","baseIndexOf","arrayIncludesWith","arrayMap","cacheHas","cache","overArg","nativeGetSymbols","getOwnPropertySymbols","SetCache","pattern","isHostObject","getAllKeysIn","symbolsFunc","baseGetAllKeys","getSymbolsIn","getSymbols","stubArray","toKey","isSymbol","omit","basePickBy","basePick","includes","valuesLength","outer","computed","valuesIndex","baseDifference","strictUriEncode","decodeComponent","splitOnFirst","filterObject","validateArrayFormatSeparator","encode","strict","encodeURIComponent","keysSorter","a","b","removeHash","hashStart","extract","queryStart","parseValue","parseNumbers","parseBooleans","query","assign","arrayFormat","arrayFormatSeparator","formatter","accumulator","isEncodedArray","parserForArrayFormat","param","reduce","shouldFilter","skipNull","skipEmptyString","encoderForArrayFormat","objectCopy","filter","x","parseUrl","url","url_","hash","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","queryFromUrl","parsedQueryFromUrl","queryString","getHash","pick","exclude","exclusionFilter","extendStatics","__extends","d","setPrototypeOf","__proto__","__","__assign","t","s","rowSizeBase","width","height","top","cursor","colSizeBase","edgeBase","position","styles","bottom","topRight","bottomRight","bottomLeft","topLeft","Resizer","_super","onMouseDown","onResizeStart","direction","onTouchStart","render","style","userSelect","replaceStyles","children","DEFAULT_SIZE","clamp","snap","round","hasDirection","dir","target","isTouchEvent","event","touches","findClosestSnap","snapArray","snapGap","closestGapIndex","prev","curr","gap","getStringSize","endsWith","getPixelSize","parentSize","innerWidth","innerHeight","definedProps","baseClassName","Resizable","ratio","resizable","parentLeft","parentTop","resizableLeft","resizableRight","resizableTop","resizableBottom","targetLeft","targetTop","appendBase","window","parentNode","element","document","createElement","flex","classList","appendChild","removeBase","removeChild","c","state","isResizing","propsSize","y","backgroundStyle","backgroundColor","opacity","zIndex","flexBasis","onMouseMove","onMouseUp","enumerable","configurable","ownerDocument","defaultView","defaultSize","orgWidth","offsetWidth","orgHeight","offsetHeight","orgPosition","getSize","getParentSize","wrapChanged","wrap","flexWrap","minWidth","minHeight","bindEvents","addEventListener","capture","passive","unbindEvents","removeEventListener","componentDidMount","computedStyle","getComputedStyle","setState","componentWillUnmount","createSizeForCssProperty","newSize","kind","calculateNewMaxFromBoundary","maxWidth","maxHeight","boundWidth","boundHeight","boundsByDirection","widthByDirection","heightByDirection","bounds","parent_1","isFinite","calculateNewSizeFromDirection","clientX","clientY","scale","resizeRatio","_a","_b","lockAspectRatio","lockAspectRatioExtraHeight","lockAspectRatioExtraWidth","newWidth","newHeight","extraHeight","extraWidth","calculateNewSizeFromAspectRatio","computedMinWidth","computedMaxWidth","computedMinHeight","computedMaxHeight","extraMinWidth","extraMaxWidth","extraMinHeight","extraMaxHeight","lockedMinWidth","lockedMaxWidth","lockedMinHeight","lockedMaxHeight","setBoundingClientRect","parent_2","parentRect","getBoundingClientRect","targetRect","top_1","nativeEvent","isMouseEvent","parent_3","flexDirection","flexDir","startsWith","TouchEvent","preventDefault","stopPropagation","calculateNewMax","_c","boundaryMax","grid","newGridWidth","newGridHeight","delta","newState","flushSync","onResize","onResizeStop","updateSize","renderResizer","enable","handleStyles","handleClasses","handleWrapperStyle","handleWrapperClass","handleComponent","resizers","extendsProps","acc","sizeStyle","boxSizing","flexShrink","Wrapper","as","defaultProps","separator","separatorIndex","charCodeAt","toUpperCase","tryToString","$TypeError","O","P","$","$findLastIndex","addToUnscopables","findLastIndex","callbackfn","toObject","lengthOfArrayLike","setArrayLength","deletePropertyOrThrow","doesNotExceedSafeInteger","arity","forced","writable","properErrorOnNonWritableLength","argCount","to","cos","sin","acos","atan2","sqrt","pow","crt","v","pi","PI","tau","quart","nMax","nMin","MIN_SAFE_INTEGER","ZERO","z","utils","Tvalues","Cvalues","arcfn","derivativeFn","compute","points","_3d","order","mt","mt2","t2","dCpts","computeWithRatios","ratios","r","f1","f2","f3","f4","derive","dpoints","dpt","between","M","approximately","precision","sum","ds","de","ts","te","lerp","v1","v2","pointToString","pointsToString","angle","dx1","dy1","dx2","dy2","pos","parseFloat","substring","dist","p1","p2","dx","dy","closest","LUT","point","mpos","mdist","forEach","abcratio","projectionratio","lli8","x1","y1","x2","y2","x3","y3","x4","y4","lli4","p3","p4","lli","makeline","Bezier","findbbox","sections","mx","my","MX","MY","bbox","mid","shapeintersections","s1","bbox1","s2","bbox2","curveIntersectionThreshold","bboxoverlap","intersections","a1","startcap","forward","back","endcap","a2","l1","virtual","l2","iss","intersects","c1","c2","makeshape","bpl","fpl","shape","getminmax","curve","align","line","tx","ty","roots","aligned","m1","m2","pa","pb","pc","q","q2","discriminant","u1","mp3","phi","t1","sd","droots","curvature","d1","d2","kOnly","num","dnm","adk","dk","dd","qdsum","pk","nk","inflections","v3","trm","sq","b1","b2","dims","dim","expandbox","_bbox","pairiteration","c1b","c2b","threshold","_t1","_t2","cc1","cc2","pair","getccenter","dx1p","dy1p","dx2p","dy2p","mx1","my1","mx2","my2","mx1n","my1n","mx2n","my2n","arc","_","numberSort","PolyBezier","curves","valueOf","addCurve","coords","from","coordlen","newargs","higher","dimlen","_linear","some","_lut","quadraticFromPoints","abc","getABC","A","cubicFromPoints","S","B","E","C","selen","lx","ly","bx1","by1","bx2","by2","e1","e2","nc1","nc2","getUtils","toSVG","setRatios","verify","print","coordDigest","_print","computedirection","clockwise","derivative","u","um","getLUT","steps","lut","hits","project","ft","raise","np","pim","dderivative","normal","__normal3","__normal2","r1","r2","q1","R","hull","_p","pt","span","extrema","mfn","overlaps","lbbox","tbbox","nv","simple","n1","n2","segment","pass1","pass2","distanceFn","ov","rc","outline","d3","d4","reduced","fcurves","bcurves","alen","tlen","graduated","linearDistanceFunction","slen","fs","fe","bs","be","ls","le","segments","outlineshapes","shapes","lineIntersects","curveintersects","selfintersects","arcs","errorThreshold","_iterate","_error","np1","circles","safety","t_s","t_e","np2","np3","prev_arc","done","curr_good","prev_good","t_m","prev_e"],"sourceRoot":""}