UNPKG

1.93 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack://Blockv/webpack/bootstrap","webpack://Blockv/./node_modules/core-js/modules/_export.js","webpack://Blockv/./src/internal/DataPool/DataObject.js","webpack://Blockv/./node_modules/core-js/modules/_global.js","webpack://Blockv/./node_modules/core-js/modules/_fails.js","webpack://Blockv/./node_modules/core-js/modules/_an-object.js","webpack://Blockv/./node_modules/core-js/modules/_is-object.js","webpack://Blockv/./node_modules/core-js/modules/_wks.js","webpack://Blockv/./node_modules/core-js/modules/_to-length.js","webpack://Blockv/./node_modules/core-js/modules/_core.js","webpack://Blockv/./node_modules/console-browserify/index.js","webpack://Blockv/./node_modules/core-js/modules/_descriptors.js","webpack://Blockv/./node_modules/core-js/modules/_object-dp.js","webpack://Blockv/./node_modules/core-js/modules/_to-object.js","webpack://Blockv/./node_modules/core-js/modules/_redefine.js","webpack://Blockv/./node_modules/core-js/modules/_string-html.js","webpack://Blockv/./node_modules/core-js/modules/_has.js","webpack://Blockv/./node_modules/core-js/modules/_hide.js","webpack://Blockv/./node_modules/core-js/modules/_to-iobject.js","webpack://Blockv/./src/internal/DataPool/Delayer.js","webpack://Blockv/(webpack)/buildin/global.js","webpack://Blockv/./node_modules/core-js/modules/_strict-method.js","webpack://Blockv/./node_modules/core-js/modules/_ctx.js","webpack://Blockv/./node_modules/core-js/modules/_a-function.js","webpack://Blockv/./node_modules/core-js/modules/_to-integer.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopd.js","webpack://Blockv/./node_modules/core-js/modules/_object-sap.js","webpack://Blockv/./node_modules/core-js/modules/_array-methods.js","webpack://Blockv/./node_modules/process/browser.js","webpack://Blockv/./node_modules/core-js/modules/_cof.js","webpack://Blockv/./node_modules/core-js/modules/_defined.js","webpack://Blockv/./node_modules/core-js/modules/_typed-array.js","webpack://Blockv/./node_modules/lodash/lodash.js","webpack://Blockv/./src/model/Vatom.js","webpack://Blockv/./node_modules/core-js/modules/_to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/_meta.js","webpack://Blockv/./src/internal/DataPool/plugins/BLOCKvRegion.js","webpack://Blockv/./src/internal/EventEmitter.js","webpack://Blockv/./node_modules/core-js/modules/_property-desc.js","webpack://Blockv/./node_modules/core-js/modules/_uid.js","webpack://Blockv/./node_modules/core-js/modules/_library.js","webpack://Blockv/./node_modules/core-js/modules/_object-keys.js","webpack://Blockv/./node_modules/core-js/modules/_to-absolute-index.js","webpack://Blockv/./node_modules/core-js/modules/_object-create.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopn.js","webpack://Blockv/./node_modules/core-js/modules/_object-gpo.js","webpack://Blockv/./node_modules/core-js/modules/_add-to-unscopables.js","webpack://Blockv/./node_modules/core-js/modules/_validate-collection.js","webpack://Blockv/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://Blockv/./node_modules/core-js/modules/_set-to-string-tag.js","webpack://Blockv/./node_modules/core-js/modules/_string-trim.js","webpack://Blockv/./node_modules/core-js/modules/_iterators.js","webpack://Blockv/./node_modules/core-js/modules/_set-species.js","webpack://Blockv/./node_modules/core-js/modules/_an-instance.js","webpack://Blockv/./node_modules/core-js/modules/_redefine-all.js","webpack://Blockv/./node_modules/inherits/inherits_browser.js","webpack://Blockv/./node_modules/jwt-decode/lib/index.js","webpack://Blockv/./node_modules/core-js/modules/_iobject.js","webpack://Blockv/./node_modules/core-js/modules/_object-pie.js","webpack://Blockv/./node_modules/core-js/modules/_classof.js","webpack://Blockv/./node_modules/core-js/modules/_species-constructor.js","webpack://Blockv/./node_modules/core-util-is/lib/util.js","webpack://Blockv/./src/client/Discover.js","webpack://Blockv/./src/model/User.js","webpack://Blockv/./node_modules/util/util.js","webpack://Blockv/./node_modules/core-js/modules/_shared.js","webpack://Blockv/./node_modules/core-js/modules/_array-includes.js","webpack://Blockv/./node_modules/core-js/modules/_object-gops.js","webpack://Blockv/./node_modules/core-js/modules/_is-array.js","webpack://Blockv/./node_modules/core-js/modules/_iter-detect.js","webpack://Blockv/./node_modules/core-js/modules/_flags.js","webpack://Blockv/./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack://Blockv/./node_modules/core-js/modules/_fix-re-wks.js","webpack://Blockv/./node_modules/core-js/modules/_for-of.js","webpack://Blockv/./node_modules/core-js/modules/_user-agent.js","webpack://Blockv/./node_modules/core-js/modules/_collection.js","webpack://Blockv/./node_modules/core-js/modules/_typed.js","webpack://Blockv/./node_modules/buffer/index.js","webpack://Blockv/./node_modules/process-nextick-args/index.js","webpack://Blockv/./node_modules/@brillout/assert/assert.js","webpack://Blockv/./node_modules/url-parse/index.js","webpack://Blockv/./node_modules/lzutf8/build/production/lzutf8.js","webpack://Blockv/./src/internal/DataPool/DataObjectAnimator.js","webpack://Blockv/./node_modules/core-js/modules/_dom-create.js","webpack://Blockv/./node_modules/core-js/modules/_wks-ext.js","webpack://Blockv/./node_modules/core-js/modules/_shared-key.js","webpack://Blockv/./node_modules/core-js/modules/_enum-bug-keys.js","webpack://Blockv/./node_modules/core-js/modules/_html.js","webpack://Blockv/./node_modules/core-js/modules/_set-proto.js","webpack://Blockv/./node_modules/core-js/modules/_string-ws.js","webpack://Blockv/./node_modules/core-js/modules/_inherit-if-required.js","webpack://Blockv/./node_modules/core-js/modules/_string-repeat.js","webpack://Blockv/./node_modules/core-js/modules/_math-sign.js","webpack://Blockv/./node_modules/core-js/modules/_math-expm1.js","webpack://Blockv/./node_modules/core-js/modules/_string-at.js","webpack://Blockv/./node_modules/core-js/modules/_iter-define.js","webpack://Blockv/./node_modules/core-js/modules/_string-context.js","webpack://Blockv/./node_modules/core-js/modules/_is-regexp.js","webpack://Blockv/./node_modules/core-js/modules/_fails-is-regexp.js","webpack://Blockv/./node_modules/core-js/modules/_is-array-iter.js","webpack://Blockv/./node_modules/core-js/modules/_create-property.js","webpack://Blockv/./node_modules/core-js/modules/core.get-iterator-method.js","webpack://Blockv/./node_modules/core-js/modules/_array-fill.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.iterator.js","webpack://Blockv/./node_modules/core-js/modules/_regexp-exec.js","webpack://Blockv/./node_modules/core-js/modules/_advance-string-index.js","webpack://Blockv/./node_modules/core-js/modules/_task.js","webpack://Blockv/./node_modules/core-js/modules/_typed-buffer.js","webpack://Blockv/./node_modules/core-js/library/modules/_global.js","webpack://Blockv/./node_modules/core-js/library/modules/_is-object.js","webpack://Blockv/./node_modules/core-js/library/modules/_descriptors.js","webpack://Blockv/./node_modules/events/events.js","webpack://Blockv/./node_modules/readable-stream/readable-browser.js","webpack://Blockv/./node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack://Blockv/./node_modules/readable-stream/lib/_stream_writable.js","webpack://Blockv/./src/internal/DataPool/EventEmitter.js","webpack://Blockv/./src/internal/DataPool/plugins/GeoPosRegion.js","webpack://Blockv/./node_modules/core-js/modules/_ie8-dom-define.js","webpack://Blockv/./node_modules/core-js/modules/_wks-define.js","webpack://Blockv/./node_modules/core-js/modules/_object-keys-internal.js","webpack://Blockv/./node_modules/core-js/modules/_object-dps.js","webpack://Blockv/./node_modules/core-js/modules/_object-gopn-ext.js","webpack://Blockv/./node_modules/core-js/modules/_object-assign.js","webpack://Blockv/./node_modules/core-js/modules/_same-value.js","webpack://Blockv/./node_modules/core-js/modules/_bind.js","webpack://Blockv/./node_modules/core-js/modules/_invoke.js","webpack://Blockv/./node_modules/core-js/modules/_parse-int.js","webpack://Blockv/./node_modules/core-js/modules/_parse-float.js","webpack://Blockv/./node_modules/core-js/modules/_a-number-value.js","webpack://Blockv/./node_modules/core-js/modules/_is-integer.js","webpack://Blockv/./node_modules/core-js/modules/_math-log1p.js","webpack://Blockv/./node_modules/core-js/modules/_iter-create.js","webpack://Blockv/./node_modules/core-js/modules/_iter-call.js","webpack://Blockv/./node_modules/core-js/modules/_array-species-create.js","webpack://Blockv/./node_modules/core-js/modules/_array-reduce.js","webpack://Blockv/./node_modules/core-js/modules/_array-copy-within.js","webpack://Blockv/./node_modules/core-js/modules/_iter-step.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.exec.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.flags.js","webpack://Blockv/./node_modules/core-js/modules/es6.promise.js","webpack://Blockv/./node_modules/core-js/modules/_new-promise-capability.js","webpack://Blockv/./node_modules/core-js/modules/_promise-resolve.js","webpack://Blockv/./node_modules/core-js/modules/_collection-strong.js","webpack://Blockv/./node_modules/core-js/modules/_collection-weak.js","webpack://Blockv/./node_modules/core-js/modules/_to-index.js","webpack://Blockv/./node_modules/core-js/modules/_own-keys.js","webpack://Blockv/./node_modules/core-js/modules/_string-pad.js","webpack://Blockv/./node_modules/core-js/modules/_object-to-array.js","webpack://Blockv/./node_modules/core-js/library/modules/_core.js","webpack://Blockv/./node_modules/core-js/library/modules/_fails.js","webpack://Blockv/(webpack)/buildin/module.js","webpack://Blockv/./node_modules/isarray/index.js","webpack://Blockv/./node_modules/timers-browserify/main.js","webpack://Blockv/./node_modules/stream-browserify/index.js","webpack://Blockv/./node_modules/readable-stream/lib/_stream_readable.js","webpack://Blockv/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://Blockv/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://Blockv/./node_modules/string_decoder/lib/string_decoder.js","webpack://Blockv/./node_modules/readable-stream/lib/_stream_transform.js","webpack://Blockv/./node_modules/@brillout/assert/log.js","webpack://Blockv/./node_modules/@brillout/assert/utils/isNodejs.js","webpack://Blockv/./node_modules/@brillout/format-text/index.js","webpack://Blockv/./node_modules/reassert/utils/isNodejs.js","webpack://Blockv/./src/internal/DataPool/Region.js","webpack://Blockv/./src/internal/DataPool/Filter.js","webpack://Blockv/./src/internal/DataPool/LocalStorageMap.js","webpack://Blockv/./src/internal/DataPool/LZUTF8WorkerScript.js","webpack://Blockv/./src/internal/repo/Store.js","webpack://Blockv/./src/internal/net/rest/api/UserApi.js","webpack://Blockv/./src/internal/net/Client.js","webpack://Blockv/./node_modules/@brillout/fetch/index.js","webpack://Blockv/./src/client/manager/WebSockets.js","webpack://Blockv/./node_modules/@babel/polyfill/lib/index.js","webpack://Blockv/./node_modules/util/support/isBufferBrowser.js","webpack://Blockv/./node_modules/util/node_modules/inherits/inherits_browser.js","webpack://Blockv/./node_modules/assert/assert.js","webpack://Blockv/./node_modules/object-assign/index.js","webpack://Blockv/./node_modules/date-now/index.js","webpack://Blockv/./node_modules/@babel/polyfill/lib/noConflict.js","webpack://Blockv/./node_modules/core-js/es6/index.js","webpack://Blockv/./node_modules/core-js/modules/es6.symbol.js","webpack://Blockv/./node_modules/core-js/modules/_function-to-string.js","webpack://Blockv/./node_modules/core-js/modules/_enum-keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.create.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.define-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.define-properties.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.freeze.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.seal.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-frozen.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-sealed.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is-extensible.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.assign.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.is.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.object.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.bind.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.name.js","webpack://Blockv/./node_modules/core-js/modules/es6.function.has-instance.js","webpack://Blockv/./node_modules/core-js/modules/es6.parse-int.js","webpack://Blockv/./node_modules/core-js/modules/es6.parse-float.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.to-fixed.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.to-precision.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.epsilon.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-finite.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-nan.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.parse-float.js","webpack://Blockv/./node_modules/core-js/modules/es6.number.parse-int.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.acosh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.asinh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.atanh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.cbrt.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.clz32.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.cosh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.expm1.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.fround.js","webpack://Blockv/./node_modules/core-js/modules/_math-fround.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.hypot.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.imul.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log10.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log1p.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.log2.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.sign.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.sinh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.tanh.js","webpack://Blockv/./node_modules/core-js/modules/es6.math.trunc.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.from-code-point.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.raw.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.trim.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.iterator.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.code-point-at.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.ends-with.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.includes.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.repeat.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.starts-with.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.anchor.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.big.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.blink.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.bold.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fixed.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fontcolor.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.fontsize.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.italics.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.link.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.small.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.strike.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.sub.js","webpack://Blockv/./node_modules/core-js/modules/es6.string.sup.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.now.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-json.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack://Blockv/./node_modules/core-js/modules/_date-to-iso-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.date.to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/_date-to-primitive.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.is-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.from.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.join.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.slice.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.sort.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.for-each.js","webpack://Blockv/./node_modules/core-js/modules/_array-species-constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.map.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.filter.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.some.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.every.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.reduce.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.reduce-right.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.index-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.last-index-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.copy-within.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.fill.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.find.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.find-index.js","webpack://Blockv/./node_modules/core-js/modules/es6.array.species.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.constructor.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.to-string.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.match.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.replace.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.search.js","webpack://Blockv/./node_modules/core-js/modules/es6.regexp.split.js","webpack://Blockv/./node_modules/core-js/modules/_microtask.js","webpack://Blockv/./node_modules/core-js/modules/_perform.js","webpack://Blockv/./node_modules/core-js/modules/es6.map.js","webpack://Blockv/./node_modules/core-js/modules/es6.set.js","webpack://Blockv/./node_modules/core-js/modules/es6.weak-map.js","webpack://Blockv/./node_modules/core-js/modules/es6.weak-set.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.data-view.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int8-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int16-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.int32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.float32-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.typed.float64-array.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.apply.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.construct.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.define-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.has.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.set.js","webpack://Blockv/./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack://Blockv/./node_modules/core-js/fn/array/includes.js","webpack://Blockv/./node_modules/core-js/modules/es7.array.includes.js","webpack://Blockv/./node_modules/core-js/fn/array/flat-map.js","webpack://Blockv/./node_modules/core-js/modules/es7.array.flat-map.js","webpack://Blockv/./node_modules/core-js/modules/_flatten-into-array.js","webpack://Blockv/./node_modules/core-js/fn/string/pad-start.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.pad-start.js","webpack://Blockv/./node_modules/core-js/fn/string/pad-end.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.pad-end.js","webpack://Blockv/./node_modules/core-js/fn/string/trim-start.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.trim-left.js","webpack://Blockv/./node_modules/core-js/fn/string/trim-end.js","webpack://Blockv/./node_modules/core-js/modules/es7.string.trim-right.js","webpack://Blockv/./node_modules/core-js/fn/symbol/async-iterator.js","webpack://Blockv/./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack://Blockv/./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack://Blockv/./node_modules/core-js/fn/object/values.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.values.js","webpack://Blockv/./node_modules/core-js/fn/object/entries.js","webpack://Blockv/./node_modules/core-js/modules/es7.object.entries.js","webpack://Blockv/./node_modules/core-js/fn/promise/finally.js","webpack://Blockv/./node_modules/core-js/modules/es7.promise.finally.js","webpack://Blockv/./node_modules/core-js/web/index.js","webpack://Blockv/./node_modules/core-js/modules/web.timers.js","webpack://Blockv/./node_modules/core-js/modules/web.immediate.js","webpack://Blockv/./node_modules/core-js/modules/web.dom.iterable.js","webpack://Blockv/./node_modules/regenerator-runtime/runtime.js","webpack://Blockv/./node_modules/core-js/library/fn/global.js","webpack://Blockv/./node_modules/core-js/library/modules/es7.global.js","webpack://Blockv/./node_modules/core-js/library/modules/_export.js","webpack://Blockv/./node_modules/core-js/library/modules/_ctx.js","webpack://Blockv/./node_modules/core-js/library/modules/_a-function.js","webpack://Blockv/./node_modules/core-js/library/modules/_hide.js","webpack://Blockv/./node_modules/core-js/library/modules/_object-dp.js","webpack://Blockv/./node_modules/core-js/library/modules/_an-object.js","webpack://Blockv/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://Blockv/./node_modules/core-js/library/modules/_dom-create.js","webpack://Blockv/./node_modules/core-js/library/modules/_to-primitive.js","webpack://Blockv/./node_modules/core-js/library/modules/_property-desc.js","webpack://Blockv/./node_modules/core-js/library/modules/_has.js","webpack://Blockv/./src/internal/DataPool/plugins/InventoryRegion.js","webpack://Blockv/./node_modules/lz-string/libs/lz-string.js","webpack://Blockv/./node_modules/base64-js/index.js","webpack://Blockv/./node_modules/ieee754/index.js","webpack://Blockv/./node_modules/setimmediate/setImmediate.js","webpack://Blockv/./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://Blockv/./node_modules/util-deprecate/browser.js","webpack://Blockv/./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://Blockv/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://Blockv/./node_modules/readable-stream/writable-browser.js","webpack://Blockv/./node_modules/readable-stream/duplex-browser.js","webpack://Blockv/./node_modules/readable-stream/transform.js","webpack://Blockv/./node_modules/readable-stream/passthrough.js","webpack://Blockv/./node_modules/requires-port/index.js","webpack://Blockv/./node_modules/querystringify/index.js","webpack://Blockv/./src/internal/DataPool/plugins/VatomIDRegion.js","webpack://Blockv/./src/internal/DataPool/plugins/VatomChildrenRegion.js","webpack://Blockv/./node_modules/jwt-decode/lib/base64_url_decode.js","webpack://Blockv/./node_modules/jwt-decode/lib/atob.js","webpack://Blockv/./node_modules/@brillout/assert/index.js","webpack://Blockv/./node_modules/reassert/warning.js","webpack://Blockv/./node_modules/reassert/assert.js","webpack://Blockv/./node_modules/reassert/log.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/string-width/index.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/strip-ansi/index.js","webpack://Blockv/./node_modules/@brillout/format-text/node_modules/ansi-regex/index.js","webpack://Blockv/./node_modules/is-fullwidth-code-point/index.js","webpack://Blockv/./node_modules/@brillout/assert/internal.js","webpack://Blockv/./node_modules/@brillout/assert/usage.js","webpack://Blockv/./node_modules/@brillout/assert/warning.js","webpack://Blockv/./src/internal/DataPool/index.js","webpack://Blockv/./src/client/manager/UserManager.js","webpack://Blockv/./src/internal/net/rest/api/VatomApi.js","webpack://Blockv/./src/client/manager/Vatoms.js","webpack://Blockv/./src/client/manager/Activity.js","webpack://Blockv/./src/internal/net/rest/api/ActivityApi.js","webpack://Blockv/./src/client/manager/MultiWebSockets.js","webpack://Blockv/./src/client/Blockv.js","webpack://Blockv/./src/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","core","hide","redefine","ctx","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","undefined","Function","U","W","R","DataObject","id","data","this","rev","cached","window","Math","self","__g","exec","e","isObject","it","TypeError","store","uid","USE_SYMBOL","toInteger","min","version","__e","console","util","assert","now","slice","Array","times","functions","log","apply","arguments","warn","label","time","Error","duration","err","message","format","error","stack","inspect","expression","arr","ok","length","tuple","f","a","anObject","IE8_DOM_DEFINE","toPrimitive","dP","O","Attributes","defined","has","SRC","$toString","TPL","split","inspectSource","val","safe","isFunction","join","String","fails","quot","createHTML","string","tag","attribute","p1","replace","NAME","test","toLowerCase","createDesc","IObject","pending","timer","executePendingActions","func","push","setTimeout","actions","action","g","method","arg","aFunction","fn","that","b","ceil","floor","isNaN","pIE","toIObject","gOPD","getOwnPropertyDescriptor","KEY","toObject","toLength","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","res","index","result","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","title","browser","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","toString","LIBRARY","$typed","$buffer","anInstance","propertyDesc","redefineAll","toIndex","toAbsoluteIndex","classof","isArrayIter","getPrototypeOf","gOPN","getIterFn","wks","createArrayMethod","createArrayIncludes","speciesConstructor","ArrayIterators","Iterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$DP","$GOPD","RangeError","Uint8Array","ArrayProto","$ArrayBuffer","ArrayBuffer","$DataView","DataView","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayIndexOf","arrayValues","values","arrayKeys","keys","arrayEntries","entries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","ITERATOR","TAG","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","Uint16Array","buffer","FORCED_SET","set","toOffset","BYTES","offset","validate","C","speciesFromList","list","fromList","addGetter","internal","_d","$from","step","iterator","aLen","mapfn","mapping","iterFn","next","done","$of","TO_LOCALE_BUG","$toLocaleString","proto","copyWithin","start","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","reverse","middle","some","comparefn","subarray","begin","end","$begin","byteOffset","BYTES_PER_ELEMENT","$slice","$set","arrayLike","src","$iterators","isTAIndex","$getDesc","$setDesc","desc","configurable","writable","$TypedArrayPrototype$","constructor","wrapper","CLAMPED","GETTER","SETTER","TypedArray","Base","TAC","FORCED","ABV","TypedArrayPrototype","addElement","v","round","setter","$offset","$length","byteLength","klass","$len","iter","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","from","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","root","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","types","require","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","resIndex","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","initAccum","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseUnary","baseValues","props","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","asciiToArray","unescapeHtmlChar","_","runInContext","context","defaults","pick","Date","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","allocUnsafe","getPrototype","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","resolve","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","iteratorToArray","remainder","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","position","escape","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","Vatom","payload","faces","otherVatom","isFolder","isDefinedFolder","policies","templateVariation","template_variation","maxCount","creation_policy","policy_count_max","enforceMaxCount","enforce_policy_count_max","constraints","platform","view_mode","unpublished","sync","when_created","when_modified","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","BLOCKvRegion","dataPool","queuedMessages","socketPaused","socketProcessing","onWebSocketMessage","socket","Blockv","WebSockets","connect","addEventListener","DataObjectAnimator","withBlockv","addRegion","removeEventListener","removeRegion","processNextMessage","msg","shift","processMessage","msg_type","new_object","updateObjects","new_data","objects","parent_id","Delayer","nextUpdate","changes","u","oldParent","newParent","keyPath","oldValue","objectOrID","Region","EventEmitter","eventName","privateEventListeners","removeAfterCall","when","callbacks","passArguments","otherClass","bitmap","px","$keys","enumBugKeys","dPs","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","document","open","write","close","Properties","hiddenKeys","getOwnPropertyNames","ObjectProto","UNSCOPABLES","_t","pna","objectKeys","obj","Duplex","inherits","Readable","Writable","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","def","stat","spaces","space","ltrim","rtrim","exporter","ALIAS","FORCE","DESCRIPTORS","SPECIES","Constructor","forbiddenField","ctor","superCtor","super_","TempCtor","base64_url_decode","InvalidTokenError","token","pos","header","JSON","parse","cof","ARG","T","tryGet","callee","D","isNullOrUndefined","re","isPrimitive","Discover","bv","customPayload","overridePayload","filters","FieldTemplateVariation","scope","auth","setScopeToOwnedVatomsOnly","samples","field","compareOperation","combineOperation","filter_op","FilterOperation","Equal","bool_op","CombineOperation","And","fqdn","FieldPublisherFqdn","FieldOwner","group_by","filter_elems","fields","client","request","getPayload","then","results","actionsArray","facesArray","vatomsArray","aName","aKey","GreaterThan","GreaterOrEqual","LessThan","LessOrEqual","NotEqual","Match","Or","FieldAcquireable","FieldPrivateName","FieldID","FieldTemplate","FieldVisibilityType","FieldParentID","User","user","firstName","first_name","lastName","last_name","namePublic","name_public","avatarUri","avatar_uri","avatarPublic","avatar_public","birthday","language","nonPushNotification","nonpush_notification","guestId","guest_id","isPasswordSet","is_password_set","activated","system_properties","isAdmin","is_admin","isMerchant","is_merchant","lastLogin","last_login","pubFqdn","pub_fqdn","rawPayload","consents","user_consents","createdBy","created_by","dataType","data_type","modifiedBy","modified_by","whenCreated","whenModified","getOwnPropertyDescriptors","descriptors","formatRegExp","str","x","Number","stringify","deprecate","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","opts","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","styles","recurseTimes","ret","primitive","simple","formatPrimitive","visibleKeys","hash","idx","arrayToHash","formatError","output","base","braces","toUTCString","formatProperty","formatArray","prev","cur","numLinesEst","reduceToSingleString","line","substr","ar","debuglog","NODE_DEBUG","pid","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","promisify","original","promiseResolve","promiseReject","promise","setPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","rej","copyright","IS_INCLUDES","el","SAFE_CLOSING","riter","skipClosing","ignoreCase","multiline","unicode","sticky","builtinExec","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","arg2","forceStringMethod","strfn","rxfn","BREAK","RETURN","navigator","userAgent","forOf","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","ADDER","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","getConstructor","setStrong","Typed","TypedArrayConstructors","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","__proto__","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","fromString","checked","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","indexSize","valLength","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","y","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","arg1","arg3","logify_input","titleFormat","isNodejs","option_keys","is_warning","is_usage","is_internal","parseArguments","msgs","IS_REASSERT_OPTS","getErrorMessage","condition","callStack","getErrorDetailsMessage","is_browser","getStackMessage","getErrorSummaryMessage","throwError","interupt_execution","throw__browser","stackTraceLimit","getCallStack","stackTraceLimit__original","callStackString","lines","lines__filtered","required","qs","slashes","protocolre","left","trimLeft","rules","address","NaN","ignore","query","lolcation","loc","location","finaldestination","protocol","Url","pathname","href","extractProtocol","parser","relative","extracted","instruction","instructions","url","unshift","up","port","host","hostname","username","password","part","char","ins","LZUTF8","runningInNodeJS","node","runningInMainNodeJSModule","commonJSAvailable","runningInWebWorker","runningInNodeChildProcess","send","runningInNullOrigin","webWorkersAvailable","Worker","appendToDocument","body","innerHTML","createErrorMessage","exception","content","exceptionJSON","printExceptionAndStackTraceToConsole","getGlobalObject","globalObject","AsyncCompressor","compressAsync","Timer","compressor","Compressor","encodeUTF8","sourceBlocks","ArrayTools","splitByteArray","blockSize","compressedBlocks","compressBlocksStartingAt","compressedBlock","compressBlock","getElapsedTime","enqueueImmediate","restart","joinedCompressedBlocks_1","concatUint8Arrays","CompressionCommon","encodeCompressedBytes","outputEncoding","createCompressionStream","compressionStream","Transform","decodeStrings","_transform","BufferTools","uint8ArrayToBuffer","bufferToUint8Array","AsyncDecompressor","decompressAsync","decodeCompressedBytes","inputEncoding","decompressor","Decompressor","decompressedBlocks","decompressBlocksStartingAt","decompressedBlock","decompressBlock","joinedDecompressedBlocks_1","encodeDecompressedBytes","createDecompressionStream","decompressionStream","WebWorker","responseListener","response","globalWorker","postMessage","installWebWorkerIfNeeded","compressedData","compress","appVersion","decompressedData","decompress","createGlobalWorkerIfNeeded","scriptURI","scriptElement","getElementById","getAttribute","terminate","ArraySegment","container","startPosition","getInReversedOrder","reverseIndex","copyElements","sourceIndex","destination","destinationIndex","zeroElements","countNonzeroValuesInArray","truncateStartingElements","truncatedLength","sourcePosition","doubleByteArrayCapacity","newArray","totalLength","_i","arrays_1","_a","arrays_2","maxPartLength","blockLength","convertToUint8ArrayIfNeeded","arrClone","getCroppedBuffer","cropStartOffset","cropLength","additionalCapacity","croppedBuffer","getCroppedAndAppendedByteArray","byteArrayToAppend","detectCompressionSourceEncoding","compressedBytes","encodeBase64","encodeBinaryString","encodeStorageBinaryString","normalizedBytes","decodeBase64","decodeBinaryString","decodeStorageBinaryString","decompressedBytes","decodeUTF8","EventLoop","asyncFlushFunc","queuedFunctions","initializeScheduler","queuedFunctions_1","setImmediate","targetOrigin_1","token_1","event","MessageChannel","MessagePort","channel_1","port1","onmessage","port2","ObjectTools","override","newPropertyValues","newProperties","getRandomIntegerInRange","getRandomUTF16StringOfLength","randomString","randomCodePoint","Encoding","CodePoint","decodeToString","StringBuilder","outputBufferCapacity","outputPosition","outputString","outputBuffer","appendCharCode","charCode","flushBufferToOutputString","appendCharCodes","charCodes","length_1","appendString","length_2","appendCodePoint","getOutputString","startTime","getTimestamp","getElapsedTimeAndRestart","elapsedTime","logAndRestart","logToDocument","toFixed","timestampFunc","createGlobalTimestampFunction","getMicrosecondTimestamp","hrtime","baseTimestamp_1","nodeTimeStamp","millisecondTime","chrome","Interval","baseTimestamp_2","chromeIntervalObject_1","microseconds","performance","baseTimestamp_3","getTime","useCustomHashTable","MinimumSequenceLength","MaximumSequenceLength","MaximumMatchDistance","PrefixHashTableSize","inputBufferStreamOffset","Uint32Array","prefixHashTable","CompressorCustomHashTable","CompressorSimpleHashTable","compressUtf8Block","utf8Bytes","bufferStartingReadOffset","cropAndAddNewBytesToInputBuffer","inputBuffer","inputBufferLength","outputBufferPosition","latestMatchEndPosition","readPosition","inputValue","withinAMatchedRange","outputRawByte","targetBucketIndex","getBucketIndexForPrefix","matchLocator","findLongestMatch","outputPointerBytes","distance","inputStreamPosition","addValueToBucket","matchedSequencePosition","bucketIndex","bucket","getArraySegmentForBucketIndex","reusableArraySegmentObject","longestMatchDistance","longestMatchLength","testedSequencePosition","testedSequenceDistance","lengthToSurpass","newInput","bucketCount","minimumBucketCapacity","maximumBucketCapacity","bucketLocators","storage","storageIndex","valueToAdd","truncateBucketToNewerElements","endPosition","bucketLength","truncatedBucketLength","oldBucketLocators","oldStorage","length_3","destPosition","length_4","outputObject","getUsedBucketCount","getTotalElementCount","buckets","currentSum","decompressBlockToString","inputBufferRemainder","outputStartPosition","cropOutputBufferToWindowAndInitialize","inputLength","sequenceLengthIdentifier","outputByte","matchLength","matchDistance","matchPosition","rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence","initialCapacity","outputBufferRemainder","Base64","charCodeMap","reverseCharCodeMap","encode","inputBytes","encodeWithJS","decode","base64String","decodeWithJS","addPadding","uint24","length_5","lengthModulo4","paddingCharacter","BinaryString","outputStringBuilder","state","appendToOutput","encodeFromString","nextCharCode","DecimalString","lookupTable","binaryBytes","resultArray","StorageBinaryString","UTF8","nativeTextEncoder","nativeTextDecoder","createNativeTextEncoderAndDecoderIfAvailable","outputArray","writeIndex","readIndex","startOffset","endOffset","outputCodePoint","leadByte","length_6","TextEncoder","TextDecoder","useWebWorker","normalizedInput","blockv","regions","updateTimer","timeSkew","animator","action_name","nextPositions","next_positions","updates","geo_pos","earliestTime","clearUpdatesFor","region","isMonitoringID","setInterval","doNextUpdate","afterTime","clearInterval","change","is","createElement","shared","documentElement","check","buggy","sign","$expm1","expm1","TO_STRING","$iterCreate","BUGGY","returnThis","DEFAULT","IS_SET","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","searchString","MATCH","$defineProperty","getIteratorMethod","endPos","addToUnscopables","iterated","_k","Arguments","re1","re2","regexpFlags","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","reCopy","channel","html","cel","setTask","clearTask","clearImmediate","Dispatch","counter","listener","importScripts","removeChild","BaseBuffer","abs","LN2","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","unpackI32","packI8","packI16","packI32","packF64","packF32","isLittleEndian","intIndex","_b","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","ReflectOwnKeys","Reflect","ReflectApply","receiver","ownKeys","NumberIsNaN","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","prepend","events","existing","warning","newListener","emitter","onceWrapper","fired","wrapFn","_onceWrap","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","setMaxListeners","getMaxListeners","doError","er","handler","originalListener","spliceOne","rawListeners","eventNames","Stream","PassThrough","copyProps","SafeBuffer","CorkedRequest","_this","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","defaultEncoding","writing","corked","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","destroy","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","_eventListeners","onSuccess","onFail","_removeAfterCall","GeoPosRegion","coordinates","noCache","top_right","lat","lon","bottom_left","sendRegionCommand","onWebSocketOpen","onTimer","forceSynchronize","isOpen","cmd","top_left","bottom_right","sendMessage","dropped","descriptor","pauseMessages","publisher_fqdn","vatoms","addObjects","resumeMessages","op","ids","vatom_id","vatom","preemptiveChange","vatomID","wksExt","$Symbol","names","getKeys","windowNames","getWindowNames","gOPS","$assign","A","K","k","isEnum","factories","construct","partArgs","bound","un","$parseInt","$trim","ws","hex","$parseFloat","log1p","memo","to","inc","forced","flags","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","task","microtask","newPromiseCapabilityModule","perform","v8","$Promise","isNode","empty","newPromiseCapability","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","_c","_v","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","enter","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","onrejectionhandled","$reject","_w","$resolve","executor","onFulfilled","onRejected","capability","$$reject","all","$index","alreadyCalled","race","PromiseCapability","$$resolve","promiseCapability","$iterDefine","SIZE","getEntry","_f","_l","$has","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","ufstore","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","isEntries","webpackPolyfill","children","Timeout","clearFn","_id","_clearFn","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","EE","dest","ondata","pause","ondrain","resume","_isStdio","onclose","didOnEnd","onerror","cleanup","ReadableState","EElistenerCount","debugUtil","debug","StringDecoder","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","enc","howMuchToRead","computeNewHighWaterMark","emitReadable_","maybeReadMore_","nReadingNextTick","resume_","hasStrings","nb","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_flush","_this2","err2","stringify_object","input_str","toStr","get_str","obj_copy","get_prettier_copy","parent_objects","el_copy","thing","tableFormat","rows","padding","indent","columnWidths","cells","cell","columnNumber","getStringWidth","colWidth","paddingRight","getBar","assert_warning","titleWidth","barWidth","leftWidth","bar","title_bar","stringWidth","eval","filler","_syncPromise","synchronize","_synchronize","stateKey","load","loadedIDs","keysToRemove","removeObjects","existingObject","willUpdateFields","willAdd","didUpdate","willRemove","info","waitUntilStable","items","getItem","willUpdateField","Filter","_objects","LocalStorageMap","Database","noStore","loaded","compressed","localStorage","Blob","URL","blob","atob","LZUTF8WorkerScript","createObjectURL","uncompressed","row","thisValue","saveSoon","itm","getExtra","saveInterval","saveTimer","changesStillOccurring","save","startedAt","Store","serverAddress","userid","jwtDecode","refreshToken","user_id","APPID","appid","wssocketAddress","websocAddress","accessToken","refresh","privateRefreshToken","setItem","rT","provider","privateAssetProvider","UserApi","registration","access_token","refresh_token","assetProvider","asset_provider","userID","setSessionInfo","tokenType","token_type","auth_data","verification","noRequest","aP","aPlen","urlParse","comparethis","uri","queryString","mapString","tokenId","appID","stateID","redirectURI","encodeURIComponent","newWindow","promiseResolved","promiseSuccess","promiseFail","closeChecker","closed","messageListener","oauthObj","oa","setRefreshToken","getCurrentUser","profile","assetProviders","error_text","ErrorCodes","2","17","401","516","517","521","527","1004","1701","1708","2030","2031","2032","2034","2037","2049","2051","2552","2553","2562","2563","2564","2566","2567","2569","2571","2572","Client","endpoint","headers","checkToken","authRequest","t0","statekey","server","FormData","extraHeaders","json","fetch","t1","milliseconds","dateString","lockedUntil","status","httpStatus","requestID","request_id","serverMessage","main","Code","Msg","tokenFetchPromise","Authorization","UserManager","logout","decodedToken","expirationTime","isBrowser","usage","delayTime","shouldRetry","retryConnection","WebSocket","handleConnected","handleMessage","handleError","handleClose","readyState","ed","trigger","retryTimer","_global","_babelPolyfill","objectAssign","hasOwn","pSlice","functionsHaveNames","pToString","arrbuf","regex","getName","something","rawname","expected","stackStartFunction","AssertionError","_deepEqual","strict","memos","Float32Array","Float64Array","actualIndex","actualVisitedObjects","aIsArgs","bIsArgs","ka","kb","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","block","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","getMessage","captureStackTrace","fn_name","next_line","equal","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","$fails","wksDefine","enumKeys","_create","gOPNExt","$GOPS","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","$getPrototypeOf","$freeze","$seal","$preventExtensions","$isFrozen","$isSealed","$isExtensible","FProto","nameRE","HAS_INSTANCE","FunctionProto","$Number","BROKEN_COF","TRIM","argument","third","maxCode","digits","aNumberValue","$toFixed","ERROR","c2","numToString","acc","fractionDigits","z","x2","$toPrecision","toPrecision","EPSILON","_isFinite","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","sqrt","$acosh","acosh","MAX_VALUE","$asinh","asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","fround","EPSILON32","MAX32","MIN32","$abs","$sign","hypot","value1","value2","div","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$fromCodePoint","fromCodePoint","raw","callSite","tpl","$at","point","codePointAt","$endsWith","$startsWith","color","toISOString","pv","$toISOString","lz","num","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","DateProto","hint","createProperty","upTo","cloned","$sort","$forEach","STRICT","$filter","$some","$every","$reduce","$indexOf","NEGATIVE_ZERO","$find","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","proxy","define","advanceStringIndex","regExpExec","$match","maybeCallNative","rx","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","$replace","searchValue","replaceValue","functionalReplace","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","ch","capture","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$push","SUPPORTS_Y","SPLIT","$split","internalSplit","lastLength","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","q","macrotask","Observer","MutationObserver","WebKitMutationObserver","standalone","toggle","createTextNode","observe","characterData","strong","InternalMap","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","$WeakMap","$isView","fin","viewS","viewT","rApply","fApply","thisArgument","argumentsList","L","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","getProto","V","existingDescriptor","ownDesc","setProto","$includes","flattenIntoArray","arraySpeciesCreate","sourceLen","IS_CONCAT_SPREADABLE","mapper","element","spreadable","targetIndex","mapFn","$pad","WEBKIT_BUG","trimRight","getDesc","$values","onFinally","MSIE","boundArgs","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","awrap","async","skipTempReset","stop","rootRecord","rval","handle","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","IS_WRAP","virtual","InventoryRegion","sessionInfo","currentUserID","loadV2","loadV2FacesActions","loadV1","templateIDs","lastStableSync","maxPerRequest","allChanges","templates","since","actions_changes","templateID","operation","faces_changes","face","clearCacheForTemplates","objectTemplate","setExtra","disableSyncV2","currentHash","serverHashReq","allSyncs","page","nextToken","next_token","idsToFetch","syncInfo","VatomsPerPage","remainingIds","newObjects","pageCount","old_owner","new_owner","vatomRef","owner","onObjectPreemptivelyChanged","LZString","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","compressToBase64","_compress","decompressFromBase64","_decompress","compressToUTF16","decompressFromUTF16","compressToUint8Array","TotalLen","current_value","decompressFromUint8Array","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","resetValue","getNextValue","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","isLE","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","script","onreadystatechange","attachEvent","_classCallCheck","config","decodeURIComponent","VatomIDRegion","VatomChildrenRegion","parentID","setScope","b64DecodeUnicode","InvalidCharacterError","bs","bc","assert_internal","assert_usage","stripAnsi","isFullwidthCodePoint","width","ansiRegex","DataPool","plugins","onSessionInfoChanged","sizeBytes","estimatedSize","removeItem","register","login","loginGuest","loginOAuthPopup","getUserTokens","formData","uploadAvatar","updateUser","getAccessToken","encodeAssetProvider","sendTokenVerification","getRefreshToken","verify","verifyUserToken","addUserToken","tokenID","setDefaultToken","deleteUserToken","getGuestToken","resetPassword","getPublicUserProfile","addRedeemable","VatomApi","template_id","return","Vatoms","vatomApi","getActions","actionName","vatomId","phoneNumber","email","performAction","undos","undo","newParentID","getVatomChildren","child","vatomIds","bottomLeft","topRight","geoDiscover","geoDiscoverGroups","childID","parentPayload","setParent","trashVatom","Activity","activityApi","threads","threadMessages","ActivityApi","cursor","MultiWebSockets","sockets","addresses","websocketAddress","triggerEvent","userApi","isLoggedIn","BlockvSDKInfo"],"mappings":"uBACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,kBClFrD,IAAIC,EAAS,EAAQ,GACjBC,EAAO,EAAQ,GACfC,EAAO,EAAQ,IACfC,EAAW,EAAQ,IACnBC,EAAM,EAAQ,IAGdC,EAAU,SAAUC,EAAM/B,EAAMgC,GAClC,IAQIhB,EAAKiB,EAAKC,EAAKC,EARfC,EAAYL,EAAOD,EAAQO,EAC3BC,EAAYP,EAAOD,EAAQS,EAC3BC,EAAYT,EAAOD,EAAQW,EAC3BC,EAAWX,EAAOD,EAAQa,EAC1BC,EAAUb,EAAOD,EAAQe,EACzBC,EAASR,EAAYb,EAASe,EAAYf,EAAOzB,KAAUyB,EAAOzB,GAAQ,KAAOyB,EAAOzB,IAAS,IAAa,UAC9GT,EAAU+C,EAAYZ,EAAOA,EAAK1B,KAAU0B,EAAK1B,GAAQ,IACzD+C,EAAWxD,EAAiB,YAAMA,EAAiB,UAAI,IAG3D,IAAKyB,KADDsB,IAAWN,EAAShC,GACZgC,EAIVE,IAFAD,GAAOG,GAAaU,QAA0BE,IAAhBF,EAAO9B,IAExB8B,EAASd,GAAQhB,GAE9BmB,EAAMS,GAAWX,EAAMJ,EAAIK,EAAKT,GAAUiB,GAA0B,mBAAPR,EAAoBL,EAAIoB,SAASrD,KAAMsC,GAAOA,EAEvGY,GAAQlB,EAASkB,EAAQ9B,EAAKkB,EAAKH,EAAOD,EAAQoB,GAElD3D,EAAQyB,IAAQkB,GAAKP,EAAKpC,EAASyB,EAAKmB,GACxCO,GAAYK,EAAS/B,IAAQkB,IAAKa,EAAS/B,GAAOkB,IAG1DT,EAAOC,KAAOA,EAEdI,EAAQO,EAAI,EACZP,EAAQS,EAAI,EACZT,EAAQW,EAAI,EACZX,EAAQa,EAAI,EACZb,EAAQe,EAAI,GACZf,EAAQqB,EAAI,GACZrB,EAAQoB,EAAI,GACZpB,EAAQsB,EAAI,IACZ5D,EAAOD,QAAUuC,G,mECtCIuB,EAEjB,WAAYtB,EAAMuB,EAAIC,I,4FAAM,SAGxBC,KAAKzB,KAAOA,EAGZyB,KAAKF,GAAKA,EAGVE,KAAKC,IAAM,KAGXD,KAAKD,KAAOA,EAMZC,KAAKE,OAAS,O,cCvBtB,IAAIjC,EAASjC,EAAOD,QAA2B,oBAAVoE,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DZ,SAAS,cAATA,GACc,iBAAPa,MAAiBA,IAAMrC,I,cCLlCjC,EAAOD,QAAU,SAAUwE,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,K,gBCJX,IAAIC,EAAW,EAAQ,GACvBzE,EAAOD,QAAU,SAAU2E,GACzB,IAAKD,EAASC,GAAK,MAAMC,UAAUD,EAAK,sBACxC,OAAOA,I,cCHT1E,EAAOD,QAAU,SAAU2E,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,I,gBCDvD,IAAIE,EAAQ,EAAQ,GAAR,CAAqB,OAC7BC,EAAM,EAAQ,IACd7D,EAAS,EAAQ,GAAaA,OAC9B8D,EAA8B,mBAAV9D,GAEThB,EAAOD,QAAU,SAAUS,GACxC,OAAOoE,EAAMpE,KAAUoE,EAAMpE,GAC3BsE,GAAc9D,EAAOR,KAAUsE,EAAa9D,EAAS6D,GAAK,UAAYrE,MAGjEoE,MAAQA,G,gBCTjB,IAAIG,EAAY,EAAQ,IACpBC,EAAMZ,KAAKY,IACfhF,EAAOD,QAAU,SAAU2E,GACzB,OAAOA,EAAK,EAAIM,EAAID,EAAUL,GAAK,kBAAoB,I,cCJzD,IAAIxC,EAAOlC,EAAOD,QAAU,CAAEkF,QAAS,SACrB,iBAAPC,MAAiBA,IAAMhD,I,iBCDlC,YACA,IAKIiD,EALAC,EAAO,EAAQ,IACfC,EAAS,EAAQ,KACjBC,EAAM,EAAQ,KAEdC,EAAQC,MAAM3D,UAAU0D,MAExBE,EAAQ,GAGRN,OADkB,IAAXlD,GAA0BA,EAAOkD,QAC9BlD,EAAOkD,QACQ,oBAAXhB,QAA0BA,OAAOgB,QACrChB,OAAOgB,QAEP,GAed,IAZA,IAAIO,EAAY,CACZ,CAuBJ,aAvBU,OACN,CAwBJ,WACIP,EAAQQ,IAAIC,MAAMT,EAASU,YAzBpB,QACP,CA2BJ,WACIV,EAAQQ,IAAIC,MAAMT,EAASU,YA5BpB,QACP,CA8BJ,WACIV,EAAQW,KAAKF,MAAMT,EAASU,YA/BpB,SACR,CAiCJ,SAAcE,GACVN,EAAMM,GAAST,KAlCR,QACP,CAoCJ,SAAiBS,GACb,IAAIC,EAAOP,EAAMM,GACjB,IAAKC,EACD,MAAM,IAAIC,MAAM,kBAAoBF,GAGxC,IAAIG,EAAWZ,IAAQU,EACvBb,EAAQQ,IAAII,EAAQ,KAAOG,EAAW,OA3C5B,WACV,CA6CJ,WACI,IAAIC,EAAM,IAAIF,MACdE,EAAI3F,KAAO,QACX2F,EAAIC,QAAUhB,EAAKiB,OAAOT,MAAM,KAAMC,WACtCV,EAAQmB,MAAMH,EAAII,QAjDV,SACR,CAmDJ,SAAa5E,GACTwD,EAAQQ,IAAIP,EAAKoB,QAAQ7E,GAAU,OApD7B,OACN,CAsDJ,SAAuB8E,GACnB,IAAKA,EAAY,CACb,IAAIC,EAAMnB,EAAMnF,KAAKyF,UAAW,GAChCR,EAAOsB,IAAG,EAAOvB,EAAKiB,OAAOT,MAAM,KAAMc,MAzD7B,WAGXzG,EAAI,EAAGA,EAAIyF,EAAUkB,OAAQ3G,IAAK,CACvC,IAAI4G,EAAQnB,EAAUzF,GAClB6G,EAAID,EAAM,GACVrG,EAAOqG,EAAM,GAEZ1B,EAAQ3E,KACT2E,EAAQ3E,GAAQsG,GAIxB9G,EAAOD,QAAUoF,I,kCCtCjBnF,EAAOD,SAAW,EAAQ,EAAR,EAAoB,WACpC,OAA+E,GAAxEY,OAAOC,eAAe,GAAI,IAAK,CAAEE,IAAK,WAAc,OAAO,KAAQiG,M,gBCF5E,IAAIC,EAAW,EAAQ,GACnBC,EAAiB,EAAQ,KACzBC,EAAc,EAAQ,IACtBC,EAAKxG,OAAOC,eAEhBb,EAAQ+G,EAAI,EAAQ,IAAoBnG,OAAOC,eAAiB,SAAwBwG,EAAGjE,EAAGkE,GAI5F,GAHAL,EAASI,GACTjE,EAAI+D,EAAY/D,GAAG,GACnB6D,EAASK,GACLJ,EAAgB,IAClB,OAAOE,EAAGC,EAAGjE,EAAGkE,GAChB,MAAO7C,IACT,GAAI,QAAS6C,GAAc,QAASA,EAAY,MAAM1C,UAAU,4BAEhE,MADI,UAAW0C,IAAYD,EAAEjE,GAAKkE,EAAWnG,OACtCkG,I,gBCbT,IAAIE,EAAU,EAAQ,IACtBtH,EAAOD,QAAU,SAAU2E,GACzB,OAAO/D,OAAO2G,EAAQ5C,M,gBCHxB,IAAIzC,EAAS,EAAQ,GACjBE,EAAO,EAAQ,IACfoF,EAAM,EAAQ,IACdC,EAAM,EAAQ,GAAR,CAAkB,OACxBC,EAAY,EAAQ,KAEpBC,GAAO,GAAKD,GAAWE,MADX,YAGhB,EAAQ,GAAWC,cAAgB,SAAUlD,GAC3C,OAAO+C,EAAUrH,KAAKsE,KAGvB1E,EAAOD,QAAU,SAAUqH,EAAG5F,EAAKqG,EAAKC,GACvC,IAAIC,EAA2B,mBAAPF,EACpBE,IAAYR,EAAIM,EAAK,SAAW1F,EAAK0F,EAAK,OAAQrG,IAClD4F,EAAE5F,KAASqG,IACXE,IAAYR,EAAIM,EAAKL,IAAQrF,EAAK0F,EAAKL,EAAKJ,EAAE5F,GAAO,GAAK4F,EAAE5F,GAAOkG,EAAIM,KAAKC,OAAOzG,MACnF4F,IAAMnF,EACRmF,EAAE5F,GAAOqG,EACCC,EAGDV,EAAE5F,GACX4F,EAAE5F,GAAOqG,EAET1F,EAAKiF,EAAG5F,EAAKqG,WALNT,EAAE5F,GACTW,EAAKiF,EAAG5F,EAAKqG,OAOdpE,SAAS5B,UAvBI,YAuBkB,WAChC,MAAsB,mBAARmC,MAAsBA,KAAKwD,IAAQC,EAAUrH,KAAK4D,U,gBC7BlE,IAAI1B,EAAU,EAAQ,GAClB4F,EAAQ,EAAQ,GAChBZ,EAAU,EAAQ,IAClBa,EAAO,KAEPC,EAAa,SAAUC,EAAQC,EAAKC,EAAWrH,GACjD,IAAI+B,EAAIgF,OAAOX,EAAQe,IACnBG,EAAK,IAAMF,EAEf,MADkB,KAAdC,IAAkBC,GAAM,IAAMD,EAAY,KAAON,OAAO/G,GAAOuH,QAAQN,EAAM,UAAY,KACtFK,EAAK,IAAMvF,EAAI,KAAOqF,EAAM,KAErCtI,EAAOD,QAAU,SAAU2I,EAAMnE,GAC/B,IAAI6C,EAAI,GACRA,EAAEsB,GAAQnE,EAAK6D,GACf9F,EAAQA,EAAQa,EAAIb,EAAQO,EAAIqF,GAAM,WACpC,IAAIS,EAAO,GAAGD,GAAM,KACpB,OAAOC,IAASA,EAAKC,eAAiBD,EAAKhB,MAAM,KAAKf,OAAS,KAC7D,SAAUQ,K,cCjBhB,IAAItF,EAAiB,GAAGA,eACxB9B,EAAOD,QAAU,SAAU2E,EAAIlD,GAC7B,OAAOM,EAAe1B,KAAKsE,EAAIlD,K,gBCFjC,IAAI2F,EAAK,EAAQ,IACb0B,EAAa,EAAQ,IACzB7I,EAAOD,QAAU,EAAQ,IAAoB,SAAU4B,EAAQH,EAAKN,GAClE,OAAOiG,EAAGL,EAAEnF,EAAQH,EAAKqH,EAAW,EAAG3H,KACrC,SAAUS,EAAQH,EAAKN,GAEzB,OADAS,EAAOH,GAAON,EACPS,I,gBCLT,IAAImH,EAAU,EAAQ,IAClBxB,EAAU,EAAQ,IACtBtH,EAAOD,QAAU,SAAU2E,GACzB,OAAOoE,EAAQxB,EAAQ5C,M,gNCCV,mBAEX,c,4FAAc,SAGVV,KAAK+E,QAAU,GAGf/E,KAAKgF,MAAQ,KAGbhF,KAAKiF,sBAAwBjF,KAAKiF,sBAAsBxH,KAAKuC,M,UAXtD,O,EAAA,G,EAAA,2BAgBPkF,GAGAlF,KAAK+E,QAAQI,KAAKD,GAGblF,KAAKgF,QACNhF,KAAKgF,MAAQI,WAAWpF,KAAKiF,sBAAuB,MAvBjD,8CA+BPjF,KAAKgF,MAAQ,KAGb,IAAIK,EAAUrF,KAAK+E,QACnB/E,KAAK+E,QAAU,GAPK,2BAQpB,YAAmBM,EAAnB,+CAA4B,KAAnBC,EAAmB,QAGxB,IACIA,IACF,MAAOnD,GACLhB,EAAQmB,MAAM,0BAA2BH,KAd7B,wF,2BA5Bb,Q,+BCLf,IAAIoD,EAGJA,EAAI,WACH,OAAOvF,KADJ,GAIJ,IAECuF,EAAIA,GAAK,IAAI9F,SAAS,cAAb,GACR,MAAOe,GAEc,iBAAXL,SAAqBoF,EAAIpF,QAOrCnE,EAAOD,QAAUwJ,G,6BClBjB,IAAIrB,EAAQ,EAAQ,GAEpBlI,EAAOD,QAAU,SAAUyJ,EAAQC,GACjC,QAASD,GAAUtB,GAAM,WAEvBuB,EAAMD,EAAOpJ,KAAK,MAAM,cAA6B,GAAKoJ,EAAOpJ,KAAK,W,gBCL1E,IAAIsJ,EAAY,EAAQ,IACxB1J,EAAOD,QAAU,SAAU4J,EAAIC,EAAMhD,GAEnC,GADA8C,EAAUC,QACGnG,IAAToG,EAAoB,OAAOD,EAC/B,OAAQ/C,GACN,KAAK,EAAG,OAAO,SAAUG,GACvB,OAAO4C,EAAGvJ,KAAKwJ,EAAM7C,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAG8C,GAC1B,OAAOF,EAAGvJ,KAAKwJ,EAAM7C,EAAG8C,IAE1B,KAAK,EAAG,OAAO,SAAU9C,EAAG8C,EAAGvJ,GAC7B,OAAOqJ,EAAGvJ,KAAKwJ,EAAM7C,EAAG8C,EAAGvJ,IAG/B,OAAO,WACL,OAAOqJ,EAAG/D,MAAMgE,EAAM/D,c,cCjB1B7F,EAAOD,QAAU,SAAU2E,GACzB,GAAiB,mBAANA,EAAkB,MAAMC,UAAUD,EAAK,uBAClD,OAAOA,I,cCDT,IAAIoF,EAAO1F,KAAK0F,KACZC,EAAQ3F,KAAK2F,MACjB/J,EAAOD,QAAU,SAAU2E,GACzB,OAAOsF,MAAMtF,GAAMA,GAAM,GAAKA,EAAK,EAAIqF,EAAQD,GAAMpF,K,gBCJvD,IAAIuF,EAAM,EAAQ,IACdpB,EAAa,EAAQ,IACrBqB,EAAY,EAAQ,IACpBhD,EAAc,EAAQ,IACtBK,EAAM,EAAQ,IACdN,EAAiB,EAAQ,KACzBkD,EAAOxJ,OAAOyJ,yBAElBrK,EAAQ+G,EAAI,EAAQ,IAAoBqD,EAAO,SAAkC/C,EAAGjE,GAGlF,GAFAiE,EAAI8C,EAAU9C,GACdjE,EAAI+D,EAAY/D,GAAG,GACf8D,EAAgB,IAClB,OAAOkD,EAAK/C,EAAGjE,GACf,MAAOqB,IACT,GAAI+C,EAAIH,EAAGjE,GAAI,OAAO0F,GAAYoB,EAAInD,EAAE1G,KAAKgH,EAAGjE,GAAIiE,EAAEjE,M,gBCbxD,IAAIb,EAAU,EAAQ,GAClBJ,EAAO,EAAQ,GACfgG,EAAQ,EAAQ,GACpBlI,EAAOD,QAAU,SAAUsK,EAAK9F,GAC9B,IAAIoF,GAAMzH,EAAKvB,QAAU,IAAI0J,IAAQ1J,OAAO0J,GACxC1H,EAAM,GACVA,EAAI0H,GAAO9F,EAAKoF,GAChBrH,EAAQA,EAAQW,EAAIX,EAAQO,EAAIqF,GAAM,WAAcyB,EAAG,MAAQ,SAAUhH,K,gBCD3E,IAAIN,EAAM,EAAQ,IACdyG,EAAU,EAAQ,IAClBwB,EAAW,EAAQ,IACnBC,EAAW,EAAQ,GACnBC,EAAM,EAAQ,KAClBxK,EAAOD,QAAU,SAAU0K,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBxJ,EAASmJ,GAAWF,EACxB,OAAO,SAAUS,EAAOC,EAAYtB,GAQlC,IAPA,IAMI/B,EAAKsD,EANL/D,EAAIkD,EAASW,GACb5G,EAAOyE,EAAQ1B,GACfN,EAAIzE,EAAI6I,EAAYtB,EAAM,GAC1BhD,EAAS2D,EAASlG,EAAKuC,QACvBwE,EAAQ,EACRC,EAASV,EAASpJ,EAAO0J,EAAOrE,GAAUgE,EAAYrJ,EAAO0J,EAAO,QAAKzH,EAEvEoD,EAASwE,EAAOA,IAAS,IAAIJ,GAAYI,KAAS/G,KAEtD8G,EAAMrE,EADNe,EAAMxD,EAAK+G,GACEA,EAAOhE,GAChBqD,GACF,GAAIE,EAAQU,EAAOD,GAASD,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO5C,EACf,KAAK,EAAG,OAAOuD,EACf,KAAK,EAAGC,EAAOlC,KAAKtB,QACf,GAAIiD,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWO,K,cCxCjE,IAOIC,EACAC,EARAC,EAAUxL,EAAOD,QAAU,GAU/B,SAAS0L,IACL,MAAM,IAAIxF,MAAM,mCAEpB,SAASyF,IACL,MAAM,IAAIzF,MAAM,qCAsBpB,SAAS0F,EAAWC,GAChB,GAAIN,IAAqBlC,WAErB,OAAOA,WAAWwC,EAAK,GAG3B,IAAKN,IAAqBG,IAAqBH,IAAqBlC,WAEhE,OADAkC,EAAmBlC,WACZA,WAAWwC,EAAK,GAE3B,IAEI,OAAON,EAAiBM,EAAK,GAC/B,MAAMpH,GACJ,IAEI,OAAO8G,EAAiBlL,KAAK,KAAMwL,EAAK,GAC1C,MAAMpH,GAEJ,OAAO8G,EAAiBlL,KAAK4D,KAAM4H,EAAK,MAvCnD,WACG,IAEQN,EADsB,mBAAflC,WACYA,WAEAqC,EAEzB,MAAOjH,GACL8G,EAAmBG,EAEvB,IAEQF,EADwB,mBAAjBM,aACcA,aAEAH,EAE3B,MAAOlH,GACL+G,EAAqBG,GAjB7B,GAwEA,IAEII,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAalF,OACbmF,EAAQD,EAAaK,OAAOJ,GAE5BE,GAAc,EAEdF,EAAMnF,QACNwF,KAIR,SAASA,IACL,IAAIJ,EAAJ,CAGA,IAAIK,EAAUV,EAAWO,GACzBF,GAAW,EAGX,IADA,IAAIM,EAAMP,EAAMnF,OACV0F,GAAK,CAGP,IAFAR,EAAeC,EACfA,EAAQ,KACCE,EAAaK,GACdR,GACAA,EAAaG,GAAYM,MAGjCN,GAAc,EACdK,EAAMP,EAAMnF,OAEhBkF,EAAe,KACfE,GAAW,EAnEf,SAAyBQ,GACrB,GAAIjB,IAAuBM,aAEvB,OAAOA,aAAaW,GAGxB,IAAKjB,IAAuBG,IAAwBH,IAAuBM,aAEvE,OADAN,EAAqBM,aACdA,aAAaW,GAExB,IAEWjB,EAAmBiB,GAC5B,MAAOhI,GACL,IAEI,OAAO+G,EAAmBnL,KAAK,KAAMoM,GACvC,MAAOhI,GAGL,OAAO+G,EAAmBnL,KAAK4D,KAAMwI,KAgD7CC,CAAgBJ,IAiBpB,SAASK,EAAKd,EAAKe,GACf3I,KAAK4H,IAAMA,EACX5H,KAAK2I,MAAQA,EAYjB,SAASC,KA5BTpB,EAAQqB,SAAW,SAAUjB,GACzB,IAAIkB,EAAO,IAAItH,MAAMK,UAAUe,OAAS,GACxC,GAAIf,UAAUe,OAAS,EACnB,IAAK,IAAI3G,EAAI,EAAGA,EAAI4F,UAAUe,OAAQ3G,IAClC6M,EAAK7M,EAAI,GAAK4F,UAAU5F,GAGhC8L,EAAM5C,KAAK,IAAIuD,EAAKd,EAAKkB,IACJ,IAAjBf,EAAMnF,QAAiBoF,GACvBL,EAAWS,IASnBM,EAAK7K,UAAU0K,IAAM,WACjBvI,KAAK4H,IAAIhG,MAAM,KAAM5B,KAAK2I,QAE9BnB,EAAQuB,MAAQ,UAChBvB,EAAQwB,SAAU,EAClBxB,EAAQyB,IAAM,GACdzB,EAAQ0B,KAAO,GACf1B,EAAQvG,QAAU,GAClBuG,EAAQ2B,SAAW,GAInB3B,EAAQ4B,GAAKR,EACbpB,EAAQ6B,YAAcT,EACtBpB,EAAQ8B,KAAOV,EACfpB,EAAQ+B,IAAMX,EACdpB,EAAQgC,eAAiBZ,EACzBpB,EAAQiC,mBAAqBb,EAC7BpB,EAAQkC,KAAOd,EACfpB,EAAQmC,gBAAkBf,EAC1BpB,EAAQoC,oBAAsBhB,EAE9BpB,EAAQqC,UAAY,SAAUrN,GAAQ,MAAO,IAE7CgL,EAAQsC,QAAU,SAAUtN,GACxB,MAAM,IAAIyF,MAAM,qCAGpBuF,EAAQuC,IAAM,WAAc,MAAO,KACnCvC,EAAQwC,MAAQ,SAAUC,GACtB,MAAM,IAAIhI,MAAM,mCAEpBuF,EAAQ0C,MAAQ,WAAa,OAAO,I,cCvLpC,IAAIC,EAAW,GAAGA,SAElBnO,EAAOD,QAAU,SAAU2E,GACzB,OAAOyJ,EAAS/N,KAAKsE,GAAIa,MAAM,GAAI,K,cCFrCvF,EAAOD,QAAU,SAAU2E,GACzB,GAAUlB,MAANkB,EAAiB,MAAMC,UAAU,yBAA2BD,GAChE,OAAOA,I,6BCFT,GAAI,EAAQ,IAAmB,CAC7B,IAAI0J,EAAU,EAAQ,IAClBnM,EAAS,EAAQ,GACjBiG,EAAQ,EAAQ,GAChB5F,EAAU,EAAQ,GAClB+L,EAAS,EAAQ,IACjBC,EAAU,EAAQ,KAClBjM,EAAM,EAAQ,IACdkM,EAAa,EAAQ,IACrBC,EAAe,EAAQ,IACvBrM,EAAO,EAAQ,IACfsM,EAAc,EAAQ,IACtB1J,EAAY,EAAQ,IACpBwF,EAAW,EAAQ,GACnBmE,EAAU,EAAQ,KAClBC,EAAkB,EAAQ,IAC1BzH,EAAc,EAAQ,IACtBK,EAAM,EAAQ,IACdqH,EAAU,EAAQ,IAClBnK,EAAW,EAAQ,GACnB6F,EAAW,EAAQ,IACnBuE,EAAc,EAAQ,IACtBtN,EAAS,EAAQ,IACjBuN,EAAiB,EAAQ,IACzBC,EAAO,EAAQ,IAAkBjI,EACjCkI,EAAY,EAAQ,KACpBnK,EAAM,EAAQ,IACdoK,EAAM,EAAQ,GACdC,EAAoB,EAAQ,IAC5BC,EAAsB,EAAQ,IAC9BC,EAAqB,EAAQ,IAC7BC,EAAiB,EAAQ,KACzBC,EAAY,EAAQ,IACpBC,EAAc,EAAQ,IACtBC,EAAa,EAAQ,IACrBC,EAAY,EAAQ,KACpBC,EAAkB,EAAQ,KAC1BC,EAAM,EAAQ,IACdC,EAAQ,EAAQ,IAChBzI,EAAKwI,EAAI7I,EACTqD,EAAOyF,EAAM9I,EACb+I,EAAa5N,EAAO4N,WACpBlL,EAAY1C,EAAO0C,UACnBmL,EAAa7N,EAAO6N,WAKpBC,EAAavK,MAAe,UAC5BwK,EAAe1B,EAAQ2B,YACvBC,EAAY5B,EAAQ6B,SACpBC,EAAelB,EAAkB,GACjCmB,EAAcnB,EAAkB,GAChCoB,EAAYpB,EAAkB,GAC9BqB,EAAarB,EAAkB,GAC/BsB,EAAYtB,EAAkB,GAC9BuB,GAAiBvB,EAAkB,GACnCwB,GAAgBvB,GAAoB,GACpCwB,GAAexB,GAAoB,GACnCyB,GAAcvB,EAAewB,OAC7BC,GAAYzB,EAAe0B,KAC3BC,GAAe3B,EAAe4B,QAC9BC,GAAmBnB,EAAWoB,YAC9BC,GAAcrB,EAAWsB,OACzBC,GAAmBvB,EAAWwB,YAC9BC,GAAYzB,EAAW/H,KACvByJ,GAAY1B,EAAW2B,KACvBC,GAAa5B,EAAWxK,MACxBqM,GAAgB7B,EAAW5B,SAC3B0D,GAAsB9B,EAAW+B,eACjCC,GAAW9C,EAAI,YACf+C,GAAM/C,EAAI,eACVgD,GAAoBpN,EAAI,qBACxBqN,GAAkBrN,EAAI,mBACtBsN,GAAmB9D,EAAO+D,OAC1BC,GAAchE,EAAOiE,MACrBC,GAAOlE,EAAOkE,KAGdC,GAAOtD,EAAkB,GAAG,SAAU9H,EAAGR,GAC3C,OAAO6L,GAASrD,EAAmBhI,EAAGA,EAAE8K,KAAmBtL,MAGzD8L,GAAgBxK,GAAM,WAExB,OAA0D,IAAnD,IAAI4H,EAAW,IAAI6C,YAAY,CAAC,IAAIC,QAAQ,MAGjDC,KAAe/C,KAAgBA,EAAoB,UAAEgD,KAAO5K,GAAM,WACpE,IAAI4H,EAAW,GAAGgD,IAAI,OAGpBC,GAAW,SAAUrO,EAAIsO,GAC3B,IAAIC,EAASlO,EAAUL,GACvB,GAAIuO,EAAS,GAAKA,EAASD,EAAO,MAAMnD,EAAW,iBACnD,OAAOoD,GAGLC,GAAW,SAAUxO,GACvB,GAAID,EAASC,IAAO2N,MAAe3N,EAAI,OAAOA,EAC9C,MAAMC,EAAUD,EAAK,2BAGnB+N,GAAW,SAAUU,EAAGvM,GAC1B,KAAMnC,EAAS0O,IAAMlB,MAAqBkB,GACxC,MAAMxO,EAAU,wCAChB,OAAO,IAAIwO,EAAEvM,IAGbwM,GAAkB,SAAUhM,EAAGiM,GACjC,OAAOC,GAASlE,EAAmBhI,EAAGA,EAAE8K,KAAmBmB,IAGzDC,GAAW,SAAUH,EAAGE,GAI1B,IAHA,IAAIjI,EAAQ,EACRxE,EAASyM,EAAKzM,OACdyE,EAASoH,GAASU,EAAGvM,GAClBA,EAASwE,GAAOC,EAAOD,GAASiI,EAAKjI,KAC5C,OAAOC,GAGLkI,GAAY,SAAU7O,EAAIlD,EAAKgS,GACjCrM,EAAGzC,EAAIlD,EAAK,CAAEV,IAAK,WAAc,OAAOkD,KAAKyP,GAAGD,OAG9CE,GAAQ,SAAclR,GACxB,IAKIvC,EAAG2G,EAAQiK,EAAQxF,EAAQsI,EAAMC,EALjCxM,EAAIkD,EAAS9H,GACbqR,EAAOhO,UAAUe,OACjBkN,EAAQD,EAAO,EAAIhO,UAAU,QAAKrC,EAClCuQ,OAAoBvQ,IAAVsQ,EACVE,EAAShF,EAAU5H,GAEvB,GAAc5D,MAAVwQ,IAAwBnF,EAAYmF,GAAS,CAC/C,IAAKJ,EAAWI,EAAO5T,KAAKgH,GAAIyJ,EAAS,GAAI5Q,EAAI,IAAK0T,EAAOC,EAASK,QAAQC,KAAMjU,IAClF4Q,EAAO1H,KAAKwK,EAAKzS,OACjBkG,EAAIyJ,EAGR,IADIkD,GAAWF,EAAO,IAAGC,EAAQzR,EAAIyR,EAAOjO,UAAU,GAAI,IACrD5F,EAAI,EAAG2G,EAAS2D,EAASnD,EAAER,QAASyE,EAASoH,GAASzO,KAAM4C,GAASA,EAAS3G,EAAGA,IACpFoL,EAAOpL,GAAK8T,EAAUD,EAAM1M,EAAEnH,GAAIA,GAAKmH,EAAEnH,GAE3C,OAAOoL,GAGL8I,GAAM,WAIR,IAHA,IAAI/I,EAAQ,EACRxE,EAASf,UAAUe,OACnByE,EAASoH,GAASzO,KAAM4C,GACrBA,EAASwE,GAAOC,EAAOD,GAASvF,UAAUuF,KACjD,OAAOC,GAIL+I,KAAkBtE,GAAc5H,GAAM,WAAc2J,GAAoBzR,KAAK,IAAI0P,EAAW,OAE5FuE,GAAkB,WACpB,OAAOxC,GAAoBjM,MAAMwO,GAAgBzC,GAAWvR,KAAK8S,GAASlP,OAASkP,GAASlP,MAAO6B,YAGjGyO,GAAQ,CACVC,WAAY,SAAoBjR,EAAQkR,GACtC,OAAO9E,EAAgBtP,KAAK8S,GAASlP,MAAOV,EAAQkR,EAAO3O,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAEnGiR,MAAO,SAAevJ,GACpB,OAAOqF,EAAW2C,GAASlP,MAAOkH,EAAYrF,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAEtFkR,KAAM,SAAcxT,GAClB,OAAOuO,EAAU7J,MAAMsN,GAASlP,MAAO6B,YAEzC8O,OAAQ,SAAgBzJ,GACtB,OAAOkI,GAAgBpP,KAAMqM,EAAY6C,GAASlP,MAAOkH,EACvDrF,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,KAE1CoR,KAAM,SAAcC,GAClB,OAAOrE,EAAU0C,GAASlP,MAAO6Q,EAAWhP,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAEpFsR,UAAW,SAAmBD,GAC5B,OAAOpE,GAAeyC,GAASlP,MAAO6Q,EAAWhP,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAEzFuR,QAAS,SAAiB7J,GACxBkF,EAAa8C,GAASlP,MAAOkH,EAAYrF,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAEjFwR,QAAS,SAAiBC,GACxB,OAAOtE,GAAauC,GAASlP,MAAOiR,EAAepP,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAE3F0R,SAAU,SAAkBD,GAC1B,OAAOvE,GAAcwC,GAASlP,MAAOiR,EAAepP,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAE5FwE,KAAM,SAAcmN,GAClB,OAAO3D,GAAU5L,MAAMsN,GAASlP,MAAO6B,YAEzCsL,YAAa,SAAqB8D,GAChC,OAAO/D,GAAiBtL,MAAMsN,GAASlP,MAAO6B,YAEhDuP,IAAK,SAAatB,GAChB,OAAOtB,GAAKU,GAASlP,MAAO8P,EAAOjO,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAE3E6N,OAAQ,SAAgBnG,GACtB,OAAOkG,GAAYxL,MAAMsN,GAASlP,MAAO6B,YAE3C0L,YAAa,SAAqBrG,GAChC,OAAOoG,GAAiB1L,MAAMsN,GAASlP,MAAO6B,YAEhDwP,QAAS,WAMP,IALA,IAIInU,EAHA0F,EAASsM,GADFlP,MACiB4C,OACxB0O,EAASlR,KAAK2F,MAAMnD,EAAS,GAC7BwE,EAAQ,EAELA,EAAQkK,GACbpU,EANS8C,KAMIoH,GANJpH,KAOJoH,KAPIpH,OAOc4C,GAPd5C,KAQJ4C,GAAU1F,EACf,OATS8C,MAWbuR,KAAM,SAAcrK,GAClB,OAAOoF,EAAU4C,GAASlP,MAAOkH,EAAYrF,UAAUe,OAAS,EAAIf,UAAU,QAAKrC,IAErFkO,KAAM,SAAc8D,GAClB,OAAO/D,GAAUrR,KAAK8S,GAASlP,MAAOwR,IAExCC,SAAU,SAAkBC,EAAOC,GACjC,IAAIvO,EAAI8L,GAASlP,MACb4C,EAASQ,EAAER,OACXgP,EAASjH,EAAgB+G,EAAO9O,GACpC,OAAO,IAAKwI,EAAmBhI,EAAGA,EAAE8K,KAA7B,CACL9K,EAAEwL,OACFxL,EAAEyO,WAAaD,EAASxO,EAAE0O,kBAC1BvL,QAAkB/G,IAARmS,EAAoB/O,EAAS+H,EAAgBgH,EAAK/O,IAAWgP,MAKzEG,GAAS,SAAevB,EAAOmB,GACjC,OAAOvC,GAAgBpP,KAAM2N,GAAWvR,KAAK8S,GAASlP,MAAOwQ,EAAOmB,KAGlEK,GAAO,SAAaC,GACtB/C,GAASlP,MACT,IAAIiP,EAASF,GAASlN,UAAU,GAAI,GAChCe,EAAS5C,KAAK4C,OACdsP,EAAM5L,EAAS2L,GACf3J,EAAM/B,EAAS2L,EAAItP,QACnBwE,EAAQ,EACZ,GAAIkB,EAAM2G,EAASrM,EAAQ,MAAMiJ,EAvKhB,iBAwKjB,KAAOzE,EAAQkB,GAAKtI,KAAKiP,EAAS7H,GAAS8K,EAAI9K,MAG7C+K,GAAa,CACflF,QAAS,WACP,OAAOD,GAAa5Q,KAAK8S,GAASlP,QAEpC+M,KAAM,WACJ,OAAOD,GAAU1Q,KAAK8S,GAASlP,QAEjC6M,OAAQ,WACN,OAAOD,GAAYxQ,KAAK8S,GAASlP,SAIjCoS,GAAY,SAAU9S,EAAQ9B,GAChC,OAAOiD,EAASnB,IACXA,EAAO+O,KACO,iBAAP7Q,GACPA,KAAO8B,GACP2E,QAAQzG,IAAQyG,OAAOzG,IAE1B6U,GAAW,SAAkC/S,EAAQ9B,GACvD,OAAO4U,GAAU9S,EAAQ9B,EAAM0F,EAAY1F,GAAK,IAC5CgN,EAAa,EAAGlL,EAAO9B,IACvB2I,EAAK7G,EAAQ9B,IAEf8U,GAAW,SAAwBhT,EAAQ9B,EAAK+U,GAClD,QAAIH,GAAU9S,EAAQ9B,EAAM0F,EAAY1F,GAAK,KACxCiD,EAAS8R,IACThP,EAAIgP,EAAM,WACThP,EAAIgP,EAAM,QACVhP,EAAIgP,EAAM,QAEVA,EAAKC,cACJjP,EAAIgP,EAAM,cAAeA,EAAKE,UAC9BlP,EAAIgP,EAAM,gBAAiBA,EAAK1V,WAI9BsG,EAAG7D,EAAQ9B,EAAK+U,IAFvBjT,EAAO9B,GAAO+U,EAAKrV,MACZoC,IAIN6O,KACHvC,EAAM9I,EAAIuP,GACV1G,EAAI7I,EAAIwP,IAGVhU,EAAQA,EAAQW,EAAIX,EAAQO,GAAKsP,GAAkB,SAAU,CAC3D/H,yBAA0BiM,GAC1BzV,eAAgB0V,KAGdpO,GAAM,WAAc0J,GAAcxR,KAAK,SACzCwR,GAAgBC,GAAsB,WACpC,OAAOL,GAAUpR,KAAK4D,QAI1B,IAAI0S,GAAwBjI,EAAY,GAAI6F,IAC5C7F,EAAYiI,GAAuBP,IACnChU,EAAKuU,GAAuB3E,GAAUoE,GAAWtF,QACjDpC,EAAYiI,GAAuB,CACjCnR,MAAOwQ,GACPjD,IAAKkD,GACLW,YAAa,aACbxI,SAAUyD,GACVE,eAAgBuC,KAElBd,GAAUmD,GAAuB,SAAU,KAC3CnD,GAAUmD,GAAuB,aAAc,KAC/CnD,GAAUmD,GAAuB,aAAc,KAC/CnD,GAAUmD,GAAuB,SAAU,KAC3CvP,EAAGuP,GAAuB1E,GAAK,CAC7BlR,IAAK,WAAc,OAAOkD,KAAKqO,OAIjCrS,EAAOD,QAAU,SAAUsK,EAAK2I,EAAO4D,EAASC,GAE9C,IAAInO,EAAO2B,IADXwM,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQzM,EACjB0M,EAAS,MAAQ1M,EACjB2M,EAAa/U,EAAOyG,GACpBuO,EAAOD,GAAc,GACrBE,EAAMF,GAAclI,EAAekI,GACnCG,GAAUH,IAAe3I,EAAO+I,IAChChQ,EAAI,GACJiQ,EAAsBL,GAAcA,EAAoB,UAUxDM,EAAa,SAAU1N,EAAMwB,GAC/BjE,EAAGyC,EAAMwB,EAAO,CACdtK,IAAK,WACH,OAZO,SAAU8I,EAAMwB,GAC3B,IAAIrH,EAAO6F,EAAK6J,GAChB,OAAO1P,EAAKwT,EAAET,GAAQ1L,EAAQ4H,EAAQjP,EAAKrD,EAAGgS,IAUnCjS,CAAOuD,KAAMoH,IAEtB0H,IAAK,SAAU5R,GACb,OAXO,SAAU0I,EAAMwB,EAAOlK,GAClC,IAAI6C,EAAO6F,EAAK6J,GACZoD,IAAS3V,GAASA,EAAQkD,KAAKoT,MAAMtW,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjF6C,EAAKwT,EAAER,GAAQ3L,EAAQ4H,EAAQjP,EAAKrD,EAAGQ,EAAOwR,IAQnC+E,CAAOzT,KAAMoH,EAAOlK,IAE7BL,YAAY,KAGZsW,GACFH,EAAaJ,GAAQ,SAAUhN,EAAM7F,EAAM2T,EAASC,GAClDpJ,EAAW3E,EAAMoN,EAAYtO,EAAM,MACnC,IAEIkK,EAAQgF,EAAYhR,EAAQiR,EAF5BzM,EAAQ,EACR6H,EAAS,EAEb,GAAKxO,EAASV,GAIP,MAAIA,aAAgBiM,GAhUd,gBAgU+B6H,EAAQjJ,EAAQ7K,KA/T9C,qBA+TwE8T,GAa/E,OAAIxF,MAAetO,EACjBuP,GAAS0D,EAAYjT,GAErB2P,GAAMtT,KAAK4W,EAAYjT,GAf9B6O,EAAS7O,EACTkP,EAASF,GAAS2E,EAAS1E,GAC3B,IAAI8E,EAAO/T,EAAK6T,WAChB,QAAgBpU,IAAZmU,EAAuB,CACzB,GAAIG,EAAO9E,EAAO,MAAMnD,EApSf,iBAsST,IADA+H,EAAaE,EAAO7E,GACH,EAAG,MAAMpD,EAtSjB,sBAyST,IADA+H,EAAarN,EAASoN,GAAW3E,GAChBC,EAAS6E,EAAM,MAAMjI,EAzS7B,iBA2SXjJ,EAASgR,EAAa5E,OAftBpM,EAAS8H,EAAQ3K,GAEjB6O,EAAS,IAAI5C,EADb4H,EAAahR,EAASoM,GA2BxB,IAPA7Q,EAAKyH,EAAM,KAAM,CACfC,EAAG+I,EACHlS,EAAGuS,EACH/S,EAAG0X,EACHpT,EAAGoC,EACH2Q,EAAG,IAAIrH,EAAU0C,KAEZxH,EAAQxE,GAAQ0Q,EAAW1N,EAAMwB,QAE1CiM,EAAsBL,EAAoB,UAAIzV,EAAOmV,IACrDvU,EAAKkV,EAAqB,cAAeL,IAC/B9O,GAAM,WAChB8O,EAAW,OACN9O,GAAM,WACX,IAAI8O,GAAY,OACXzH,GAAY,SAAUwI,GAC3B,IAAIf,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAWe,MACd,KACDf,EAAaJ,GAAQ,SAAUhN,EAAM7F,EAAM2T,EAASC,GAElD,IAAIE,EAGJ,OAJAtJ,EAAW3E,EAAMoN,EAAYtO,GAIxBjE,EAASV,GACVA,aAAgBiM,GA7WP,gBA6WwB6H,EAAQjJ,EAAQ7K,KA5WvC,qBA4WiE8T,OAC1DrU,IAAZmU,EACH,IAAIV,EAAKlT,EAAMgP,GAAS2E,EAAS1E,GAAQ2E,QAC7BnU,IAAZkU,EACE,IAAIT,EAAKlT,EAAMgP,GAAS2E,EAAS1E,IACjC,IAAIiE,EAAKlT,GAEbsO,MAAetO,EAAauP,GAAS0D,EAAYjT,GAC9C2P,GAAMtT,KAAK4W,EAAYjT,GATF,IAAIkT,EAAKvI,EAAQ3K,OAW/CqM,EAAa8G,IAAQzT,SAAS5B,UAAYkN,EAAKkI,GAAM9K,OAAO4C,EAAKmI,IAAQnI,EAAKkI,IAAO,SAAUzV,GACvFA,KAAOwV,GAAa7U,EAAK6U,EAAYxV,EAAKyV,EAAKzV,OAEvDwV,EAAoB,UAAIK,EACnBjJ,IAASiJ,EAAoBV,YAAcK,IAElD,IAAIgB,EAAkBX,EAAoBtF,IACtCkG,IAAsBD,IACI,UAAxBA,EAAgBxX,MAA4CgD,MAAxBwU,EAAgBxX,MACtD0X,EAAY/B,GAAWtF,OAC3B1O,EAAK6U,EAAY/E,IAAmB,GACpC9P,EAAKkV,EAAqBhF,GAAa3J,GACvCvG,EAAKkV,EAAqB9E,IAAM,GAChCpQ,EAAKkV,EAAqBnF,GAAiB8E,IAEvCH,EAAU,IAAIG,EAAW,GAAGhF,KAAQtJ,EAASsJ,MAAOqF,IACtDlQ,EAAGkQ,EAAqBrF,GAAK,CAC3BlR,IAAK,WAAc,OAAO4H,KAI9BtB,EAAEsB,GAAQsO,EAEV1U,EAAQA,EAAQS,EAAIT,EAAQqB,EAAIrB,EAAQO,GAAKmU,GAAcC,GAAO7P,GAElE9E,EAAQA,EAAQW,EAAGyF,EAAM,CACvBoN,kBAAmB9C,IAGrB1Q,EAAQA,EAAQW,EAAIX,EAAQO,EAAIqF,GAAM,WAAc+O,EAAKkB,GAAG/X,KAAK4W,EAAY,MAAQtO,EAAM,CACzF0P,KAAM1E,GACNyE,GAAIhE,KApZgB,sBAuZKkD,GAAsBlV,EAAKkV,EAvZhC,oBAuZwErE,GAE9F1Q,EAAQA,EAAQa,EAAGuF,EAAM4L,IAEzB9E,EAAW9G,GAEXpG,EAAQA,EAAQa,EAAIb,EAAQO,EAAIgQ,GAAYnK,EAAM,CAAEoK,IAAKkD,KAEzD1T,EAAQA,EAAQa,EAAIb,EAAQO,GAAKoV,EAAmBvP,EAAMyN,IAErD/H,GAAWiJ,EAAoBlJ,UAAYyD,KAAeyF,EAAoBlJ,SAAWyD,IAE9FtP,EAAQA,EAAQa,EAAIb,EAAQO,EAAIqF,GAAM,WACpC,IAAI8O,EAAW,GAAGzR,WAChBmD,EAAM,CAAEnD,MAAOwQ,KAEnBzT,EAAQA,EAAQa,EAAIb,EAAQO,GAAKqF,GAAM,WACrC,MAAO,CAAC,EAAG,GAAG4J,kBAAoB,IAAIkF,EAAW,CAAC,EAAG,IAAIlF,sBACpD5J,GAAM,WACXmP,EAAoBvF,eAAe1R,KAAK,CAAC,EAAG,QACzCsI,EAAM,CAAEoJ,eAAgBuC,KAE7B/E,EAAU5G,GAAQuP,EAAoBD,EAAkBE,EACnD9J,GAAY6J,GAAmB9V,EAAKkV,EAAqBtF,GAAUmG,SAErElY,EAAOD,QAAU,c,iBC/dxB;;;;;;;;IAQE,WAGA,IAUIsY,EAAkB,sBASlBC,EAAc,yBAgDdC,EAAY,CACd,CAAC,MA9BiB,KA+BlB,CAAC,OAtCkB,GAuCnB,CAAC,UAtCsB,GAuCvB,CAAC,QArCmB,GAsCpB,CAAC,aArCyB,IAsC1B,CAAC,OAjCkB,KAkCnB,CAAC,UAtCqB,IAuCtB,CAAC,eAtC2B,IAuC5B,CAAC,QArCmB,MAyClBC,EAAU,qBACVC,EAAW,iBAEXC,EAAU,mBACVC,EAAU,gBAEVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBAEZC,EAAY,kBAGZC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBAEZC,EAAa,mBAGbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBAEXC,EAAY,uBACZC,EAAY,uBAGZC,EAAuB,iBACvBC,EAAsB,qBACtBC,EAAwB,gCAGxBC,EAAgB,4BAChBC,EAAkB,WAClBC,EAAmBC,OAAOH,EAAc5X,QACxCgY,EAAqBD,OAAOF,EAAgB7X,QAG5CiY,EAAW,mBACXC,EAAa,kBACbC,EAAgB,mBAGhBC,EAAe,mDACfC,EAAgB,QAChBC,EAAa,mGAMbC,EAAe,sBACfC,EAAkBT,OAAOQ,EAAavY,QAGtCyY,EAAS,aACTC,EAAc,OACdC,EAAY,OAGZC,EAAgB,4CAChBC,EAAgB,oCAChBC,EAAiB,QAGjBC,GAAc,4CAGdC,GAAe,WAMfC,GAAe,kCAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAU,8CAGVC,GAAY,OAGZC,GAAoB,yBAOpBC,GAAeC,gDASfC,GAAeC,8OAIfC,GAAW,oBACXC,GAAU,IAAMH,GAAe,IAC/BI,GAAU,IAAMN,GAAe,IAC/BO,GAAW,OACXC,GAAY,oBACZC,GAAU,8BACVC,GAAS,oBAAuBR,GAAeK,GAlB9B,qEAmBjBI,GAAS,2BAETC,GAAc,qBACdC,GAAa,kCACbC,GAAa,qCACbC,GAAU,8BAIVC,GAAc,MAAQP,GAAU,IAAMC,GAAS,IAC/CO,GAAc,MAAQF,GAAU,IAAML,GAAS,IAG/CQ,GAZa,MAAQZ,GAAU,IAAMK,GAAS,IAYtB,IAKxBQ,GAJW,oBAIQD,IAHP,gBAAwB,CAACN,GAAaC,GAAYC,IAAYjV,KAAK,KAAO,qBAAiBqV,GAAW,MAIlHE,GAAU,MAAQ,CAACZ,GAAWK,GAAYC,IAAYjV,KAAK,KAAO,IAAMsV,GACxEE,GAAW,MAAQ,CAACT,GAAcN,GAAU,IAAKA,GAASO,GAAYC,GAAYV,IAAUvU,KAAK,KAAO,IAGxGyV,GAASlD,OA/BA,OA+Be,KAMxBmD,GAAcnD,OAAOkC,GAAS,KAG9BkB,GAAYpD,OAAOuC,GAAS,MAAQA,GAAS,KAAOU,GAAWF,GAAO,KAGtEM,GAAgBrD,OAAO,CACzB2C,GAAU,IAAMN,GAAU,oCAAgC,CAACJ,GAASU,GAAS,KAAKlV,KAAK,KAAO,IAC9FoV,GAAc,oCAAgC,CAACZ,GAASU,GAAUC,GAAa,KAAKnV,KAAK,KAAO,IAChGkV,GAAU,IAAMC,GAAc,iCAC9BD,GAAU,iCAtBK,mDADA,mDA0BfR,GACAa,IACAvV,KAAK,KAAM,KAGT6V,GAAetD,OAAO,0BAA+B4B,GA3DxC,mBA8Db2B,GAAmB,qEAGnBC,GAAe,CACjB,QAAS,SAAU,WAAY,OAAQ,QAAS,eAAgB,eAChE,WAAY,YAAa,aAAc,aAAc,MAAO,OAAQ,SACpE,UAAW,SAAU,MAAO,SAAU,SAAU,YAAa,aAC7D,oBAAqB,cAAe,cAAe,UACnD,IAAK,eAAgB,WAAY,WAAY,cAI3CC,IAAmB,EAGnBC,GAAiB,GACrBA,GAAexE,GAAcwE,GAAevE,GAC5CuE,GAAetE,GAAWsE,GAAerE,GACzCqE,GAAepE,GAAYoE,GAAenE,GAC1CmE,GA/KsB,8BA+KYA,GAAelE,GACjDkE,GAAejE,IAAa,EAC5BiE,GAAezF,GAAWyF,GAAexF,GACzCwF,GAAe1E,GAAkB0E,GAAevF,GAChDuF,GAAezE,GAAeyE,GAAetF,GAC7CsF,GAAerF,GAAYqF,GAAepF,GAC1CoF,GAAelF,GAAUkF,GAAejF,GACxCiF,GAAehF,GAAagF,GAAe/E,GAC3C+E,GAAe9E,GAAU8E,GAAe7E,GACxC6E,GAAe3E,IAAc,EAG7B,IAAI4E,GAAgB,GACpBA,GAAc1F,GAAW0F,GAAczF,GACvCyF,GAAc3E,GAAkB2E,GAAc1E,GAC9C0E,GAAcxF,GAAWwF,GAAcvF,GACvCuF,GAAczE,GAAcyE,GAAcxE,GAC1CwE,GAAcvE,GAAWuE,GAActE,GACvCsE,GAAcrE,GAAYqE,GAAcnF,GACxCmF,GAAclF,GAAakF,GAAcjF,GACzCiF,GAAchF,GAAagF,GAAc/E,GACzC+E,GAAc9E,GAAa8E,GAAc7E,GACzC6E,GAAcpE,GAAYoE,GArMJ,8BAsMtBA,GAAcnE,GAAamE,GAAclE,IAAa,EACtDkE,GAActF,GAAYsF,GAAcrF,GACxCqF,GAAc5E,IAAc,EAG5B,IA4EI6E,GAAgB,CAClB,KAAM,KACN,IAAK,IACL,KAAM,IACN,KAAM,IACN,SAAU,QACV,SAAU,SAIRC,GAAiBC,WACjBC,GAAeC,SAGfC,GAA8B,iBAAVvc,GAAsBA,GAAUA,EAAOtB,SAAWA,QAAUsB,EAGhFwc,GAA0B,iBAARpa,MAAoBA,MAAQA,KAAK1D,SAAWA,QAAU0D,KAGxEqa,GAAOF,IAAcC,IAAYhb,SAAS,cAATA,GAGjCkb,GAA4C5e,IAAYA,EAAQ6e,UAAY7e,EAG5E8e,GAAaF,IAAgC,iBAAV3e,GAAsBA,IAAWA,EAAO4e,UAAY5e,EAGvF8e,GAAgBD,IAAcA,GAAW9e,UAAY4e,GAGrDI,GAAcD,IAAiBN,GAAWhT,QAG1CwT,GAAY,WACd,IAEE,IAAIC,EAAQJ,IAAcA,GAAWK,SAAWL,GAAWK,QAAQ,QAAQD,MAE3E,OAAIA,GAKGF,IAAeA,GAAYjR,SAAWiR,GAAYjR,QAAQ,QACjE,MAAOtJ,KAXI,GAeX2a,GAAoBH,IAAYA,GAASI,cACzCC,GAAaL,IAAYA,GAASM,OAClCC,GAAYP,IAAYA,GAASQ,MACjCC,GAAeT,IAAYA,GAASU,SACpCC,GAAYX,IAAYA,GAASY,MACjCC,GAAmBb,IAAYA,GAASc,aAc5C,SAASla,GAAMsD,EAAM6W,EAASjT,GAC5B,OAAQA,EAAKlG,QACX,KAAK,EAAG,OAAOsC,EAAK9I,KAAK2f,GACzB,KAAK,EAAG,OAAO7W,EAAK9I,KAAK2f,EAASjT,EAAK,IACvC,KAAK,EAAG,OAAO5D,EAAK9I,KAAK2f,EAASjT,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAO5D,EAAK9I,KAAK2f,EAASjT,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAO5D,EAAKtD,MAAMma,EAASjT,GAa7B,SAASkT,GAAgBrT,EAAO8K,EAAQwI,EAAUC,GAIhD,IAHA,IAAI9U,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,SAE9BwE,EAAQxE,GAAQ,CACvB,IAAI1F,EAAQyL,EAAMvB,GAClBqM,EAAOyI,EAAahf,EAAO+e,EAAS/e,GAAQyL,GAE9C,OAAOuT,EAYT,SAASC,GAAUxT,EAAOsT,GAIxB,IAHA,IAAI7U,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,SAE9BwE,EAAQxE,IAC8B,IAAzCqZ,EAAStT,EAAMvB,GAAQA,EAAOuB,KAIpC,OAAOA,EAYT,SAASyT,GAAezT,EAAOsT,GAG7B,IAFA,IAAIrZ,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OAEhCA,MAC0C,IAA3CqZ,EAAStT,EAAM/F,GAASA,EAAQ+F,KAItC,OAAOA,EAaT,SAAS4D,GAAW5D,EAAOkI,GAIzB,IAHA,IAAIzJ,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,SAE9BwE,EAAQxE,GACf,IAAKiO,EAAUlI,EAAMvB,GAAQA,EAAOuB,GAClC,OAAO,EAGX,OAAO,EAYT,SAAS0D,GAAY1D,EAAOkI,GAM1B,IALA,IAAIzJ,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OACnCyZ,EAAW,EACXhV,EAAS,KAEJD,EAAQxE,GAAQ,CACvB,IAAI1F,EAAQyL,EAAMvB,GACdyJ,EAAU3T,EAAOkK,EAAOuB,KAC1BtB,EAAOgV,KAAcnf,GAGzB,OAAOmK,EAYT,SAASqF,GAAc/D,EAAOzL,GAE5B,SADsB,MAATyL,EAAgB,EAAIA,EAAM/F,SACpB0Z,GAAY3T,EAAOzL,EAAO,IAAM,EAYrD,SAASqf,GAAkB5T,EAAOzL,EAAOsf,GAIvC,IAHA,IAAIpV,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,SAE9BwE,EAAQxE,GACf,GAAI4Z,EAAWtf,EAAOyL,EAAMvB,IAC1B,OAAO,EAGX,OAAO,EAYT,SAASqV,GAAS9T,EAAOsT,GAKvB,IAJA,IAAI7U,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OACnCyE,EAAS7F,MAAMoB,KAEVwE,EAAQxE,GACfyE,EAAOD,GAAS6U,EAAStT,EAAMvB,GAAQA,EAAOuB,GAEhD,OAAOtB,EAWT,SAASqV,GAAU/T,EAAOkE,GAKxB,IAJA,IAAIzF,GAAS,EACTxE,EAASiK,EAAOjK,OAChBqM,EAAStG,EAAM/F,SAEVwE,EAAQxE,GACf+F,EAAMsG,EAAS7H,GAASyF,EAAOzF,GAEjC,OAAOuB,EAeT,SAASyE,GAAYzE,EAAOsT,EAAUC,EAAaS,GACjD,IAAIvV,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OAKvC,IAHI+Z,GAAa/Z,IACfsZ,EAAcvT,IAAQvB,MAEfA,EAAQxE,GACfsZ,EAAcD,EAASC,EAAavT,EAAMvB,GAAQA,EAAOuB,GAE3D,OAAOuT,EAeT,SAAS5O,GAAiB3E,EAAOsT,EAAUC,EAAaS,GACtD,IAAI/Z,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OAIvC,IAHI+Z,GAAa/Z,IACfsZ,EAAcvT,IAAQ/F,IAEjBA,KACLsZ,EAAcD,EAASC,EAAavT,EAAM/F,GAASA,EAAQ+F,GAE7D,OAAOuT,EAaT,SAAS5P,GAAU3D,EAAOkI,GAIxB,IAHA,IAAIzJ,GAAS,EACTxE,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,SAE9BwE,EAAQxE,GACf,GAAIiO,EAAUlI,EAAMvB,GAAQA,EAAOuB,GACjC,OAAO,EAGX,OAAO,EAUT,IAAIiU,GAAYC,GAAa,UAmC7B,SAASC,GAAYC,EAAYlM,EAAWmM,GAC1C,IAAI3V,EAOJ,OANA2V,EAASD,GAAY,SAAS7f,EAAOM,EAAKuf,GACxC,GAAIlM,EAAU3T,EAAOM,EAAKuf,GAExB,OADA1V,EAAS7J,GACF,KAGJ6J,EAcT,SAAS4V,GAActU,EAAOkI,EAAWqM,EAAWC,GAIlD,IAHA,IAAIva,EAAS+F,EAAM/F,OACfwE,EAAQ8V,GAAaC,EAAY,GAAK,GAElCA,EAAY/V,MAAYA,EAAQxE,GACtC,GAAIiO,EAAUlI,EAAMvB,GAAQA,EAAOuB,GACjC,OAAOvB,EAGX,OAAQ,EAYV,SAASkV,GAAY3T,EAAOzL,EAAOggB,GACjC,OAAOhgB,GAAUA,EAocnB,SAAuByL,EAAOzL,EAAOggB,GACnC,IAAI9V,EAAQ8V,EAAY,EACpBta,EAAS+F,EAAM/F,OAEnB,OAASwE,EAAQxE,GACf,GAAI+F,EAAMvB,KAAWlK,EACnB,OAAOkK,EAGX,OAAQ,EA5cJgW,CAAczU,EAAOzL,EAAOggB,GAC5BD,GAActU,EAAO0U,GAAWH,GAatC,SAASI,GAAgB3U,EAAOzL,EAAOggB,EAAWV,GAIhD,IAHA,IAAIpV,EAAQ8V,EAAY,EACpBta,EAAS+F,EAAM/F,SAEVwE,EAAQxE,GACf,GAAI4Z,EAAW7T,EAAMvB,GAAQlK,GAC3B,OAAOkK,EAGX,OAAQ,EAUV,SAASiW,GAAUngB,GACjB,OAAOA,GAAUA,EAYnB,SAASqgB,GAAS5U,EAAOsT,GACvB,IAAIrZ,EAAkB,MAAT+F,EAAgB,EAAIA,EAAM/F,OACvC,OAAOA,EAAU4a,GAAQ7U,EAAOsT,GAAYrZ,EA7xBpC,IAuyBV,SAASia,GAAarf,GACpB,OAAO,SAASG,GACd,OAAiB,MAAVA,OAp2BP6B,EAo2BoC7B,EAAOH,IAW/C,SAASigB,GAAe9f,GACtB,OAAO,SAASH,GACd,OAAiB,MAAVG,OAj3BP6B,EAi3BoC7B,EAAOH,IAiB/C,SAASkgB,GAAWX,EAAYd,EAAUC,EAAaS,EAAWK,GAMhE,OALAA,EAASD,GAAY,SAAS7f,EAAOkK,EAAO2V,GAC1Cb,EAAcS,GACTA,GAAY,EAAOzf,GACpB+e,EAASC,EAAahf,EAAOkK,EAAO2V,MAEnCb,EAgCT,SAASsB,GAAQ7U,EAAOsT,GAKtB,IAJA,IAAI5U,EACAD,GAAS,EACTxE,EAAS+F,EAAM/F,SAEVwE,EAAQxE,GAAQ,CACvB,IAAI+a,EAAU1B,EAAStT,EAAMvB,SA96B7B5H,IA+6BIme,IACFtW,OAh7BF7H,IAg7BW6H,EAAuBsW,EAAWtW,EAASsW,GAGxD,OAAOtW,EAYT,SAASuW,GAAUlgB,EAAGue,GAIpB,IAHA,IAAI7U,GAAS,EACTC,EAAS7F,MAAM9D,KAEV0J,EAAQ1J,GACf2J,EAAOD,GAAS6U,EAAS7U,GAE3B,OAAOC,EAyBT,SAASwW,GAAU3Y,GACjB,OAAO,SAAShI,GACd,OAAOgI,EAAKhI,IAchB,SAAS4gB,GAAWngB,EAAQogB,GAC1B,OAAOtB,GAASsB,GAAO,SAASvgB,GAC9B,OAAOG,EAAOH,MAYlB,SAASwgB,GAASC,EAAOzgB,GACvB,OAAOygB,EAAM1a,IAAI/F,GAYnB,SAAS0gB,GAAgBC,EAAYC,GAInC,IAHA,IAAIhX,GAAS,EACTxE,EAASub,EAAWvb,SAEfwE,EAAQxE,GAAU0Z,GAAY8B,EAAYD,EAAW/W,GAAQ,IAAM,IAC5E,OAAOA,EAYT,SAASiX,GAAcF,EAAYC,GAGjC,IAFA,IAAIhX,EAAQ+W,EAAWvb,OAEhBwE,KAAWkV,GAAY8B,EAAYD,EAAW/W,GAAQ,IAAM,IACnE,OAAOA,EAWT,SAASkX,GAAa3V,EAAO4V,GAI3B,IAHA,IAAI3b,EAAS+F,EAAM/F,OACfyE,EAAS,EAENzE,KACD+F,EAAM/F,KAAY2b,KAClBlX,EAGN,OAAOA,EAWT,IAAImX,GAAef,GApwBG,CAEpB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IACtB,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAC1E,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IAAK,IAAQ,IAChD,IAAQ,IAAM,IAAQ,IAAK,IAAQ,IACnC,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAAM,IAAQ,KACtB,IAAQ,KAER,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU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ACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,KACR,EAAQ,K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","file":"blockv-sdk.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 171);\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\r\n/**\r\n * Represents a raw data object, potentially without any data, which is monitored by a region.\r\n */\r\nexport default class DataObject {\r\n\r\n constructor(type, id, data) {\r\n\r\n /** Object type */\r\n this.type = type\r\n\r\n /** Object identifier */\r\n this.id = id\r\n\r\n /** Object revision, if any */\r\n this.rev = null\r\n\r\n /** Object payload, if any */\r\n this.data = data\r\n\r\n /** \r\n * Cached object. Plugins map this raw data object to their own types, this is used to cache\r\n * those types if there have been no changes.\r\n */\r\n this.cached = null\r\n\r\n }\r\n\r\n}","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","/*global window, global*/\nvar util = require(\"util\")\nvar assert = require(\"assert\")\nvar now = require(\"date-now\")\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","\r\n/** \r\n * This class handles executing code on the next run loop. This is the same as `setImmediate()` or `setTimeout(..., 0)` except\r\n * it doesn't create so many timers.\r\n */\r\nexport default new class Delayer {\r\n\r\n constructor() {\r\n\r\n /** List of functions to execute on the next run loop */\r\n this.pending = []\r\n\r\n /** Timer to execute pending actions */\r\n this.timer = null\r\n\r\n // Bind function\r\n this.executePendingActions = this.executePendingActions.bind(this)\r\n\r\n }\r\n\r\n /** Schedule an action */\r\n run(func) {\r\n\r\n // Add to list\r\n this.pending.push(func)\r\n\r\n // Start timer if needed\r\n if (!this.timer)\r\n this.timer = setTimeout(this.executePendingActions, 0)\r\n\r\n }\r\n\r\n /** @private Called to execute pending actions */\r\n executePendingActions() {\r\n\r\n // Remove timer\r\n this.timer = null\r\n\r\n // Perform each action\r\n let actions = this.pending\r\n this.pending = []\r\n for (let action of actions) {\r\n\r\n // Catch errors\r\n try {\r\n action()\r\n } catch (err) {\r\n console.error('Delayed action failed: ', err)\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n}","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.15';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\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 promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var 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. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\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 */\n function 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 `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee 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 `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee 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 `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\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 */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\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 */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\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 */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\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 */\n function 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 * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\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 */\n function 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 */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\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 * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(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 */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\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 */\n function 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 `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\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 */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\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 */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\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 */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 */\n function strictIndexOf(array, value, fromIndex) {\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 * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var 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 */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.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 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\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 */\n var 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 * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\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 */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\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 */\n function 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 */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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 */\n function 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`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\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 */\n function 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 * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\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 */\n function 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 */\n function 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 */\n function 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 * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\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 */\n function 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 `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\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 */\n function 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 == null ? value : iteratee(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 `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\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 */\n function 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 `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 */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\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 */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `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 */\n function 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 `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function 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 `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\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 shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\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 */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function 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 `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\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 */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.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 */\n function 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 `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\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 */\n function 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 */\n function 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 `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * 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[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\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[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (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 */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return 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 */\n var 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 * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\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 seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\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 values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\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 */\n function 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 */\n function 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 `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\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 */\n function 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 * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\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 */\n function 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 */\n function 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 * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\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 */\n function 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 `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function 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 * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\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 */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and 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 */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\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 */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function 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 */\n function 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 * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var 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 * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\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 */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\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 */\n function 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 */\n function 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 */\n function 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 a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function 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 a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\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 */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\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 */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\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 */\n function 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 */\n function 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 */\n function 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 parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\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 */\n function 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 metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\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 */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\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 */\n function 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 * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function 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 convert.\n * @returns {string} Returns the source code.\n */\n function 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 * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\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 * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\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 */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= 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 */\n var 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 */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\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 an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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 */\n function 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 */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\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 */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\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 * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\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 an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(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 */\n function 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 an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\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 integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\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 */\n function 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 */\n function 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 */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\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 map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\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 `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\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 native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\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 `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\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 number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\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 */\n function 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 `RegExp` 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 regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\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 set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\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 */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\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 weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\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 weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.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 `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is 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 convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\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 */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\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 * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\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 * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\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 */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\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 */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\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 */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths 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 */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\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 object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\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 object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values 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 values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n // Like with sourceURL, we take care to not check the option's prototype,\n // as this configuration is a code injection vector.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\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 */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\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 */\n var flowRight = createFlow(true);\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 */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\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 */\n function stubArray() {\n return [];\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 */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport urlParse from 'url-parse'\r\nexport default class Vatom {\r\n constructor (payload, faces, actions) {\r\n this.payload = payload\r\n this.faces = faces\r\n this.actions = actions\r\n }\r\n\r\n get id () {\r\n return this.payload.id\r\n }\r\n\r\n get private () {\r\n return this.payload.private\r\n }\r\n\r\n get unpublished () {\r\n return this.payload.unpublished\r\n }\r\n\r\n get version () {\r\n return this.payload.version\r\n }\r\n\r\n get sync () {\r\n return this.payload.sync\r\n } \r\n\r\n get whenCreated () {\r\n return this.payload.when_created\r\n }\r\n\r\n get whenModified () {\r\n return this.payload.when_modified\r\n }\r\n\r\n get properties () {\r\n return this.payload['vAtom::vAtomType']\r\n }\r\n\r\n /** True if this is a folder vatom */\r\n get isFolder () {\r\n return this.properties['root_type'].indexOf('ContainerType') !== -1\r\n }\r\n\r\n /** True if this is a defined folder vatom, ie a folder that can only accept certain types of child vatoms. */\r\n get isDefinedFolder () {\r\n return this.properties['root_type'].indexOf('DefinedFolderContainerType') !== -1\r\n }\r\n\r\n /** True if this is a discover folder vatom, ie a folder whose contents are fetched by performing the `Discover` action on it. */\r\n get isDiscoverFolder () {\r\n return this.properties['root_type'].indexOf('DiscoverFolderContainerType') != -1\r\n }\r\n\r\n canPerformAction (action) {\r\n return this.actions.find(a => a.name.indexOf(action) !== -1)\r\n }\r\n\r\n canCombineWith (otherVatom) {\r\n // Stop if null or ourselves\r\n if (!otherVatom || this.id === otherVatom.id) {\r\n return false\r\n }\r\n\r\n // If it's not a folder, deny\r\n if (!this.isFolder) {\r\n return false\r\n }\r\n\r\n // If it's not a defined folder, allow\r\n if (!this.isDefinedFolder) {\r\n return true\r\n }\r\n\r\n // Get child policies\r\n let policies = this.properties['child_policy'] || []\r\n\r\n // Make child policies a little easier for us to understand\r\n policies = policies.map(p => ({\r\n templateVariation: p.template_variation,\r\n maxCount: (p.creation_policy && p.creation_policy.policy_count_max) || 9999,\r\n enforceMaxCount: (p.creation_policy && p.creation_policy.enforce_policy_count_max) || false\r\n }))\r\n\r\n // Make sure we have a match\r\n for (let policy of policies) {\r\n // Check if template variation matches\r\n if (policy.templateVariation === otherVatom.properties.template_variation) {\r\n return true\r\n }\r\n }\r\n\r\n // No match found, deny\r\n return false\r\n }\r\n\r\n /** Checks if this vatom has an icon face */\r\n containsIconFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'icon')\r\n }\r\n\r\n /** Checks if this vatom has a card face */\r\n containsCardFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'card')\r\n }\r\n\r\n /** Checks if this vatom has a fullscreen face */\r\n containsFullscreenFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'fullscreen')\r\n }\r\n\r\n /** TO DO: Implement in next release\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeResource (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = Vatom.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n getResource (resourceName, customPath) {\r\n let payloadResource = (customPath || this.payload['vAtom::vAtomType'].resources).find(r => r.name === resourceName)\r\n return this.encodeResource(payloadResource.value.value)\r\n }\r\n */\r\n}\r\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\r\nimport Region from '../Region'\r\nimport Vatom from '../../../model/Vatom'\r\nimport DataObjectAnimator from '../DataObjectAnimator'\r\nimport { merge } from 'lodash'\r\nimport Delayer from '../Delayer'\r\n\r\n/**\r\n * Intermediate class which handles updates via the BLOCKv websocket and returning Vatom objects. Regions can subclass this to automatically\r\n * get updates via WebSocket.\r\n */\r\nexport default class BLOCKvRegion extends Region {\r\n constructor (dataPool) {\r\n super(dataPool)\r\n\r\n // Queue of pending WebSocket messages\r\n this.queuedMessages = []\r\n this.socketPaused = false\r\n this.socketProcessing = false\r\n\r\n // Bind functions\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n\r\n // Add listeners for the WebSocket\r\n this.socket = this.dataPool.Blockv.WebSockets\r\n this.socket.connect()\r\n this.socket.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n // Monitor for timed updates\r\n DataObjectAnimator.withBlockv(dataPool.Blockv).addRegion(this)\r\n }\r\n\r\n /** Called when this region is going to be shut down */\r\n close () {\r\n super.close()\r\n // Remove listeners\r\n this.socket.removeEventListener('websocket.raw', this.onWebSocketMessage)\r\n DataObjectAnimator.withBlockv(this.dataPool.Blockv).removeRegion(this)\r\n }\r\n\r\n /**\r\n * Called to pause processing of websocket messages\r\n * @private Called by subclasses.\r\n */\r\n pauseMessages () {\r\n this.socketPaused = true\r\n }\r\n\r\n /**\r\n * Called to resume processing of websocket messages\r\n *\r\n * @private Called by subclasses.\r\n */\r\n resumeMessages () {\r\n // Unpause\r\n this.socketPaused = false\r\n\r\n // Process next message if needed\r\n if (!this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called when there's a new event message via the WebSocket.\r\n *\r\n * @private\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n onWebSocketMessage (msg) {\r\n // Add to queue\r\n this.queuedMessages.push(msg)\r\n\r\n // Process it if necessary\r\n if (!this.socketPaused && !this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called to process the next WebSocket message.\r\n */\r\n async processNextMessage () {\r\n // Stop if socket is paused\r\n if (this.socketPaused) {\r\n return\r\n }\r\n\r\n // Stop if already processing\r\n if (this.socketProcessing) {\r\n return\r\n }\r\n this.socketProcessing = true\r\n\r\n // Get next msg to process\r\n let msg = this.queuedMessages.shift()\r\n if (!msg) {\r\n\r\n // No more messages!\r\n this.socketProcessing = false\r\n return\r\n\r\n }\r\n\r\n // Process message\r\n try {\r\n\r\n // Process message\r\n await this.processMessage(msg)\r\n\r\n } catch (err) {\r\n\r\n // Error!\r\n console.warn('[DataPool > BVWebSocketRegion] Error processing WebSocket message! ' + err.message, msg)\r\n\r\n }\r\n\r\n // Done, process next message\r\n this.socketProcessing = false\r\n this.processNextMessage()\r\n }\r\n\r\n /**\r\n * Processes a WebSocket message.\r\n *\r\n * @private Called by BVWebSocketRegion.\r\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n async processMessage (msg) {\r\n\r\n // We only handle state_update messages here\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Get vatom ID\r\n let vatomID = msg.payload && msg.payload.id\r\n if (!vatomID) {\r\n throw new Error(`Got websocket message with no vatom ID in it.`)\r\n }\r\n\r\n // Ensure it's formatted correctly\r\n if (!msg.payload.new_object) {\r\n throw new Error(`WebSocket message had no new object payload.`)\r\n }\r\n\r\n // Update existing objects\r\n this.updateObjects([{\r\n id: msg.payload.id,\r\n new_data: msg.payload.new_object\r\n }])\r\n }\r\n\r\n /** Map our data objects to Vatom objects */\r\n map (object) {\r\n // Only handle vatoms\r\n if (object.type !== 'vatom') {\r\n return null\r\n }\r\n\r\n // Fetch all faces linked to this vatom\r\n let faces = Array.from(this.objects.values()).filter(o => o.type === 'face' && o.data.template === object.data['vAtom::vAtomType'].template).map(o => o.data)\r\n\r\n // Fetch all actions linked to this vatom\r\n let actions = Array.from(this.objects.values()).filter(o => o.type === 'action' && o.data.name.startsWith(object.data['vAtom::vAtomType'].template + '::Action::')).map(o => o.data)\r\n\r\n // Create vatom object\r\n return new Vatom(object.data, faces, actions)\r\n }\r\n\r\n /**\r\n * Called when an object is about to be added.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be added.\r\n */\r\n willAdd (object) {\r\n // Notify parent as well\r\n let parent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n // If our DataObjectAnimator has a scheduled update for this object, include that change now. This is to work around map objects jumping around when a new region is created.\r\n let nextUpdate = DataObjectAnimator.withBlockv(this.dataPool.Blockv).changes.find(u => u.id === object.id)\r\n if (nextUpdate) {\r\n merge(object.data, nextUpdate.new_data)\r\n }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {Object} newData The sparse object containing the changed fields\r\n */\r\n willUpdateFields (object, newData) {\r\n // Notify parent as well\r\n let oldParent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n let newParent = newData && newData['vAtom::vAtomType'] && newData['vAtom::vAtomType'].parent_id\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', oldParent)) }\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', newParent)) }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {String} keyPath The field which will be changed.\r\n * @param {*} oldValue The current field value.\r\n * @param {*} newValue The new field value.\r\n */\r\n willUpdateField (object, keyPath, oldValue, newValue) {\r\n // Only do if modifying the parent ID field\r\n if (keyPath !== 'vAtom::vAtomType.parent_id') {\r\n return\r\n }\r\n // Notify parent\r\n Delayer.run(e => this.emit('object.updated', oldValue))\r\n Delayer.run(e => this.emit('object.updated', newValue))\r\n }\r\n\r\n /**\r\n * Called when an object is about to be removed.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\r\n */\r\n willRemove (objectOrID) {\r\n // Get object if needed\r\n let object = objectOrID\r\n if (typeof objectOrID === 'string') {\r\n object = this.objects.get(objectOrID)\r\n }\r\n // Notify parent as well\r\n let parent = object && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n//\r\n// EventEmitter class\r\n// This class provides simple event functionality for classes, with Promise support.\r\n// Usage for once-off event listeners:\r\n// myObj.when(\"closed\").then(function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage for permanent event listeners:\r\n// myObj.on(\"closed\", function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage when triggering an event from a subclass:\r\n// this.emit(\"closed\", \"customData\");\r\n\r\nclass EventEmitter {\r\n /**\r\n * Adds an event listener. If callback is null, a Promise will be returned.\r\n * Note that if using the Promise\r\n * it will only be triggered on the first event emitted. */\r\n\r\n when (eventName, callback = null) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Check if using promise form\r\n if (callback) {\r\n // Just add the callback\r\n this.privateEventListeners[eventName].push(callback)\r\n return null\r\n }\r\n // Return the promise\r\n return new Promise((resolve) => {\r\n // Promise callbacks can only be used once\r\n // eslint-disable-next-line no-param-reassign\r\n resolve.removeAfterCall = true\r\n\r\n // Add success handler to event listener array\r\n this.privateEventListeners[eventName].push(resolve)\r\n })\r\n }\r\n\r\n /** Synonyms */\r\n on () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n addEventListener () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n /** Remove event listener */\r\n removeEventListener (eventName, callback) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Find and remove it\r\n for (let i = 0; i < this.privateEventListeners[eventName].length; i += 1) {\r\n if (this.privateEventListeners[eventName][i] === callback) {\r\n this.privateEventListeners[eventName].splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n off () {\r\n return this.removeEventListener.apply(this, arguments)\r\n }\r\n\r\n /** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n emit (eventName) {\r\n // Setup the once-off promise if one of it's events were triggered\r\n // if (eventName == \"success\" || eventName == \"failed\")\r\n // this._setupPromise();\r\n\r\n // Get list of callbacks\r\n const callbacks = (this.privateEventListeners && this.privateEventListeners[eventName]) || []\r\n // Call events\r\n let passArguments = Array.from(arguments).slice(1)\r\n callbacks.forEach((callback) => {\r\n callback.apply(this, passArguments)\r\n })\r\n\r\n // Remove callbacks that can only be called once\r\n for (let i = 0; i < callbacks.length; i += 1) {\r\n if (callbacks[i].removeAfterCall) {\r\n callbacks.splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n /** Synonyms */\r\n trigger () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n\r\n triggerEvent () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function eventEmitterMixin (otherClass) {\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const prop in EventEmitter.prototype) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (EventEmitter.prototype.hasOwnProperty(prop)) {\r\n // eslint-disable-next-line no-param-reassign\r\n otherClass[prop] = EventEmitter.prototype[prop]\r\n }\r\n }\r\n}\r\nmodule.exports = EventEmitter\r\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n if (typeof token !== 'string') {\n throw new InvalidTokenError('Invalid token specified');\n }\n\n options = options || {};\n var pos = options.header === true ? 0 : 1;\n try {\n return JSON.parse(base64_url_decode(token.split('.')[pos]));\n } catch (e) {\n throw new InvalidTokenError('Invalid token specified: ' + e.message);\n }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport Vatom from '../model/Vatom'\r\n\r\nexport default class Discover {\r\n constructor (bv, customPayload) {\r\n this.bv = bv\r\n // Setup default vars\r\n this.overridePayload = customPayload\r\n this.filters = []\r\n this.groupBy = [Discover.FieldTemplateVariation]\r\n this.scope = null\r\n this.auth = true\r\n\r\n // The default scope returns vatoms that the user owns only\r\n this.setScopeToOwnedVatomsOnly()\r\n\r\n /** The number of samples to return. This is based on the groupBy property.\r\n 0 will return all vatoms without sampling them. */\r\n this.samples = 0\r\n }\r\n\r\n /** Appends a filter to the filters list. */\r\n appendFilter (field, value, compareOperation, combineOperation) {\r\n // Append filter\r\n this.filters.push({\r\n field,\r\n value,\r\n filter_op: compareOperation || Discover.FilterOperation.Equal,\r\n bool_op: combineOperation || Discover.CombineOperation.And\r\n })\r\n }\r\n\r\n /** Set the scope to only return vatoms with the specified publisher FQDN */\r\n setScopeToPublisherFQDN (fqdn) {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldPublisherFqdn,\r\n value: fqdn\r\n }\r\n }\r\n\r\n /** Set the scope to only return owned vatoms */\r\n setScopeToOwnedVatomsOnly () {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldOwner,\r\n value: '$currentuser'\r\n }\r\n }\r\n\r\n /** Set the scope to specified key and value */\r\n setScope (key, value) {\r\n // Set scope\r\n this.scope = {\r\n key,\r\n value\r\n }\r\n }\r\n\r\n /** @private Get the request payload to send to the Discovery API call */\r\n getPayload () {\r\n // Check for override\r\n if (this.overridePayload) {\r\n return this.overridePayload\r\n }\r\n // Check scope\r\n if (!this.scope) {\r\n throw new Error('Vatomic SDK: No scope set for discover filter!')\r\n }\r\n // Create payload\r\n const payload = {}\r\n payload.scope = this.scope\r\n\r\n // Set sampling\r\n if (this.samples > 0 && this.groupBy.length > 0) {\r\n payload.sample = this.samples\r\n payload.group_by = this.groupBy\r\n }\r\n\r\n // Set filters\r\n if (this.filters.length > 0) {\r\n payload.filters = [{\r\n filter_elems: this.filters\r\n }]\r\n }\r\n\r\n // Set return info\r\n payload.return = {\r\n type: '*',\r\n fields: []\r\n }\r\n\r\n // Done\r\n return payload\r\n }\r\n\r\n /** Execute the discover query, returning an array of Vatoms. @returns Promise<[Vatom]> */\r\n execute () {\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', this.getPayload(), this.auth).then((data) => {\r\n const { actions, faces, results } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of results) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n /** Execute the discover query, returning the count of vatoms. @returns Promise<Integer> */\r\n count () {\r\n // Inject \"count only\" into the payload\r\n const payload = this.getPayload()\r\n payload.return.type = 'count'\r\n\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', payload, this.auth)\r\n .then(data => data.count || 0)\r\n }\r\n}\r\n\r\n/** Filter operations */\r\nDiscover.FilterOperation = {\r\n Equal: 'Eq',\r\n GreaterThan: 'Gt',\r\n GreaterOrEqual: 'Ge',\r\n LessThan: 'Lt',\r\n LessOrEqual: 'Le',\r\n NotEqual: 'Ne',\r\n Match: 'Match'\r\n}\r\n\r\n/** Filter combine operations */\r\nDiscover.CombineOperation = {\r\n And: 'And',\r\n Or: 'Or'\r\n}\r\n\r\n/** Predefined fields */\r\nDiscover.FieldAcquireable = 'vAtom::vAtomType.acquireable'\r\nDiscover.FieldPrivateName = 'private.name'\r\nDiscover.FieldID = 'id'\r\nDiscover.FieldPublisherFqdn = 'vAtom::vAtomType.publisher_fqdn'\r\nDiscover.FieldTemplate = 'vAtom::vAtomType.template'\r\nDiscover.FieldTemplateVariation = 'vAtom::vAtomType.template_variation'\r\nDiscover.FieldVisibilityType = 'vAtom::vAtomType.visibility.type'\r\nDiscover.FieldOwner = 'vAtom::vAtomType.owner'\r\nDiscover.FieldParentID = 'vAtom::vAtomType.parent_id'\r\n\r\n\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nexport default class User {\r\n constructor (user) {\r\n this.id = user.id\r\n this.firstName = user.properties.first_name\r\n this.lastName = user.properties.last_name\r\n this.namePublic = user.properties.name_public\r\n this.avatarUri = user.properties.avatar_uri\r\n this.avatarPublic = user.properties.avatar_public\r\n this.birthday = user.properties.birthday\r\n this.language = user.properties.language\r\n this.nonPushNotification = user.properties.nonpush_notification\r\n this.guestId = user.properties.guest_id\r\n this.isPasswordSet = user.properties.is_password_set\r\n this.activated = user.system_properties.activated\r\n this.isAdmin = user.system_properties.is_admin\r\n this.isMerchant = user.system_properties.is_merchant\r\n this.lastLogin = user.system_properties.last_login\r\n this.pubFqdn = user.system_properties.pub_fqdn\r\n this.rawPayload = user\r\n this.consents = user.properties.user_consents\r\n this.meta = {\r\n createdBy: user.meta.created_by,\r\n dataType: user.meta.data_type,\r\n modifiedBy: user.meta.modified_by,\r\n whenCreated: user.meta.when_created,\r\n whenModified: user.meta.when_modified\r\n }\r\n }\r\n}\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = assert;\n\nfunction assert(condition) {\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('assert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('@brillout/assert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/@brillout/assert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/*!\r\n LZ-UTF8 v0.5.5\r\n\r\n Copyright (c) 2018, Rotem Dan\r\n Released under the MIT license.\r\n\r\n Build date: 2018-07-30 \r\n\r\n Please report any issue at https://github.com/rotemdan/lzutf8.js/issues\r\n*/\r\nvar LZUTF8;\n(function (LZUTF8) {\n LZUTF8.runningInNodeJS = function () {\n return ((typeof process === \"object\") && (typeof process.versions === \"object\") && (typeof process.versions.node === \"string\"));\n };\n LZUTF8.runningInMainNodeJSModule = function () {\n return LZUTF8.runningInNodeJS() && require.main === module;\n };\n LZUTF8.commonJSAvailable = function () {\n return typeof module === \"object\" && typeof module.exports === \"object\";\n };\n LZUTF8.runningInWebWorker = function () {\n return typeof window === \"undefined\" && typeof self === \"object\" && typeof self.addEventListener === \"function\" && typeof self.close === \"function\";\n };\n LZUTF8.runningInNodeChildProcess = function () {\n return LZUTF8.runningInNodeJS() && typeof process.send === \"function\";\n };\n LZUTF8.runningInNullOrigin = function () {\n if (typeof window !== \"object\" || typeof window.location !== \"object\")\n return false;\n return document.location.protocol !== 'http:' && document.location.protocol !== 'https:';\n };\n LZUTF8.webWorkersAvailable = function () {\n if (typeof Worker !== \"function\" || LZUTF8.runningInNullOrigin())\n return false;\n if (LZUTF8.runningInNodeJS())\n return false;\n if (navigator && navigator.userAgent && navigator.userAgent.indexOf(\"Android 4.3\") >= 0)\n return false;\n return true;\n };\n LZUTF8.log = function (message, appendToDocument) {\n if (appendToDocument === void 0) { appendToDocument = false; }\n if (typeof console !== \"object\")\n return;\n console.log(message);\n if (appendToDocument && typeof document == \"object\")\n document.body.innerHTML += message + \"<br/>\";\n };\n LZUTF8.createErrorMessage = function (exception, title) {\n if (title === void 0) { title = \"Unhandled exception\"; }\n if (exception == null)\n return title;\n title += \": \";\n if (typeof exception.content === \"object\") {\n if (LZUTF8.runningInNodeJS()) {\n return title + exception.content.stack;\n }\n else {\n var exceptionJSON = JSON.stringify(exception.content);\n if (exceptionJSON !== \"{}\")\n return title + exceptionJSON;\n else\n return title + exception.content;\n }\n }\n else if (typeof exception.content === \"string\") {\n return title + exception.content;\n }\n else {\n return title + exception;\n }\n };\n LZUTF8.printExceptionAndStackTraceToConsole = function (exception, title) {\n if (title === void 0) { title = \"Unhandled exception\"; }\n LZUTF8.log(LZUTF8.createErrorMessage(exception, title));\n };\n LZUTF8.getGlobalObject = function () {\n if (typeof global === \"object\")\n return global;\n else if (typeof window === \"object\")\n return window;\n else if (typeof self === \"object\")\n return self;\n else\n return {};\n };\n LZUTF8.toString = Object.prototype.toString;\n if (LZUTF8.commonJSAvailable())\n module.exports = LZUTF8;\n})(LZUTF8 || (LZUTF8 = {}));\nif (typeof Uint8Array === \"function\" && new Uint8Array(1).subarray(1).byteLength !== 0) {\n var subarray = function (start, end) {\n var clamp = function (v, min, max) { return v < min ? min : v > max ? max : v; };\n start = start | 0;\n end = end | 0;\n if (arguments.length < 1)\n start = 0;\n if (arguments.length < 2)\n end = this.length;\n if (start < 0)\n start = this.length + start;\n if (end < 0)\n end = this.length + end;\n start = clamp(start, 0, this.length);\n end = clamp(end, 0, this.length);\n var len = end - start;\n if (len < 0)\n len = 0;\n return new this.constructor(this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n };\n var types = ['Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array'];\n var globalObject = void 0;\n if (typeof window === \"object\")\n globalObject = window;\n else if (typeof self === \"object\")\n globalObject = self;\n if (globalObject !== undefined) {\n for (var i = 0; i < types.length; i++) {\n if (globalObject[types[i]])\n globalObject[types[i]].prototype.subarray = subarray;\n }\n }\n}\nvar LZUTF8;\n(function (LZUTF8) {\n var AsyncCompressor = (function () {\n function AsyncCompressor() {\n }\n AsyncCompressor.compressAsync = function (input, options, callback) {\n var timer = new LZUTF8.Timer();\n var compressor = new LZUTF8.Compressor();\n if (!callback)\n throw new TypeError(\"compressAsync: No callback argument given\");\n if (typeof input === \"string\") {\n input = LZUTF8.encodeUTF8(input);\n }\n else if (input == null || !(input instanceof Uint8Array)) {\n callback(undefined, new TypeError(\"compressAsync: Invalid input argument, only 'string' and 'Uint8Array' are supported\"));\n return;\n }\n var sourceBlocks = LZUTF8.ArrayTools.splitByteArray(input, options.blockSize);\n var compressedBlocks = [];\n var compressBlocksStartingAt = function (index) {\n if (index < sourceBlocks.length) {\n var compressedBlock = void 0;\n try {\n compressedBlock = compressor.compressBlock(sourceBlocks[index]);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n compressedBlocks.push(compressedBlock);\n if (timer.getElapsedTime() <= 20) {\n compressBlocksStartingAt(index + 1);\n }\n else {\n LZUTF8.enqueueImmediate(function () { return compressBlocksStartingAt(index + 1); });\n timer.restart();\n }\n }\n else {\n var joinedCompressedBlocks_1 = LZUTF8.ArrayTools.concatUint8Arrays(compressedBlocks);\n LZUTF8.enqueueImmediate(function () {\n var result;\n try {\n result = LZUTF8.CompressionCommon.encodeCompressedBytes(joinedCompressedBlocks_1, options.outputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n LZUTF8.enqueueImmediate(function () { return callback(result); });\n });\n }\n };\n LZUTF8.enqueueImmediate(function () { return compressBlocksStartingAt(0); });\n };\n AsyncCompressor.createCompressionStream = function () {\n var compressor = new LZUTF8.Compressor();\n var NodeStream = require(\"stream\");\n var compressionStream = new NodeStream.Transform({ decodeStrings: true, highWaterMark: 65536 });\n compressionStream._transform = function (data, encoding, done) {\n var buffer;\n try {\n buffer = LZUTF8.BufferTools.uint8ArrayToBuffer(compressor.compressBlock(LZUTF8.BufferTools.bufferToUint8Array(data)));\n }\n catch (e) {\n compressionStream.emit(\"error\", e);\n return;\n }\n compressionStream.push(buffer);\n done();\n };\n return compressionStream;\n };\n return AsyncCompressor;\n }());\n LZUTF8.AsyncCompressor = AsyncCompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var AsyncDecompressor = (function () {\n function AsyncDecompressor() {\n }\n AsyncDecompressor.decompressAsync = function (input, options, callback) {\n if (!callback)\n throw new TypeError(\"decompressAsync: No callback argument given\");\n var timer = new LZUTF8.Timer();\n try {\n input = LZUTF8.CompressionCommon.decodeCompressedBytes(input, options.inputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n var decompressor = new LZUTF8.Decompressor();\n var sourceBlocks = LZUTF8.ArrayTools.splitByteArray(input, options.blockSize);\n var decompressedBlocks = [];\n var decompressBlocksStartingAt = function (index) {\n if (index < sourceBlocks.length) {\n var decompressedBlock = void 0;\n try {\n decompressedBlock = decompressor.decompressBlock(sourceBlocks[index]);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n decompressedBlocks.push(decompressedBlock);\n if (timer.getElapsedTime() <= 20) {\n decompressBlocksStartingAt(index + 1);\n }\n else {\n LZUTF8.enqueueImmediate(function () { return decompressBlocksStartingAt(index + 1); });\n timer.restart();\n }\n }\n else {\n var joinedDecompressedBlocks_1 = LZUTF8.ArrayTools.concatUint8Arrays(decompressedBlocks);\n LZUTF8.enqueueImmediate(function () {\n var result;\n try {\n result = LZUTF8.CompressionCommon.encodeDecompressedBytes(joinedDecompressedBlocks_1, options.outputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n LZUTF8.enqueueImmediate(function () { return callback(result); });\n });\n }\n };\n LZUTF8.enqueueImmediate(function () { return decompressBlocksStartingAt(0); });\n };\n AsyncDecompressor.createDecompressionStream = function () {\n var decompressor = new LZUTF8.Decompressor();\n var NodeStream = require(\"stream\");\n var decompressionStream = new NodeStream.Transform({ decodeStrings: true, highWaterMark: 65536 });\n decompressionStream._transform = function (data, encoding, done) {\n var buffer;\n try {\n buffer = LZUTF8.BufferTools.uint8ArrayToBuffer(decompressor.decompressBlock(LZUTF8.BufferTools.bufferToUint8Array(data)));\n }\n catch (e) {\n decompressionStream.emit(\"error\", e);\n return;\n }\n decompressionStream.push(buffer);\n done();\n };\n return decompressionStream;\n };\n return AsyncDecompressor;\n }());\n LZUTF8.AsyncDecompressor = AsyncDecompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var WebWorker;\n (function (WebWorker) {\n WebWorker.compressAsync = function (input, options, callback) {\n if (options.inputEncoding == \"ByteArray\") {\n if (!(input instanceof Uint8Array)) {\n callback(undefined, new TypeError(\"compressAsync: input is not a Uint8Array\"));\n return;\n }\n }\n var request = {\n token: Math.random().toString(),\n type: \"compress\",\n data: input,\n inputEncoding: options.inputEncoding,\n outputEncoding: options.outputEncoding\n };\n var responseListener = function (e) {\n var response = e.data;\n if (!response || response.token != request.token)\n return;\n WebWorker.globalWorker.removeEventListener(\"message\", responseListener);\n if (response.type == \"error\")\n callback(undefined, new Error(response.error));\n else\n callback(response.data);\n };\n WebWorker.globalWorker.addEventListener(\"message\", responseListener);\n WebWorker.globalWorker.postMessage(request, []);\n };\n WebWorker.decompressAsync = function (input, options, callback) {\n var request = {\n token: Math.random().toString(),\n type: \"decompress\",\n data: input,\n inputEncoding: options.inputEncoding,\n outputEncoding: options.outputEncoding\n };\n var responseListener = function (e) {\n var response = e.data;\n if (!response || response.token != request.token)\n return;\n WebWorker.globalWorker.removeEventListener(\"message\", responseListener);\n if (response.type == \"error\")\n callback(undefined, new Error(response.error));\n else\n callback(response.data);\n };\n WebWorker.globalWorker.addEventListener(\"message\", responseListener);\n WebWorker.globalWorker.postMessage(request, []);\n };\n WebWorker.installWebWorkerIfNeeded = function () {\n if (typeof self == \"object\" && self.document === undefined && self.addEventListener != undefined) {\n self.addEventListener(\"message\", function (e) {\n var request = e.data;\n if (request.type == \"compress\") {\n var compressedData = void 0;\n try {\n compressedData = LZUTF8.compress(request.data, { outputEncoding: request.outputEncoding });\n }\n catch (e) {\n self.postMessage({ token: request.token, type: \"error\", error: LZUTF8.createErrorMessage(e) }, []);\n return;\n }\n var response = {\n token: request.token,\n type: \"compressionResult\",\n data: compressedData,\n encoding: request.outputEncoding,\n };\n if (response.data instanceof Uint8Array && navigator.appVersion.indexOf(\"MSIE 10\") === -1)\n self.postMessage(response, [response.data.buffer]);\n else\n self.postMessage(response, []);\n }\n else if (request.type == \"decompress\") {\n var decompressedData = void 0;\n try {\n decompressedData = LZUTF8.decompress(request.data, { inputEncoding: request.inputEncoding, outputEncoding: request.outputEncoding });\n }\n catch (e) {\n self.postMessage({ token: request.token, type: \"error\", error: LZUTF8.createErrorMessage(e) }, []);\n return;\n }\n var response = {\n token: request.token,\n type: \"decompressionResult\",\n data: decompressedData,\n encoding: request.outputEncoding,\n };\n if (response.data instanceof Uint8Array && navigator.appVersion.indexOf(\"MSIE 10\") === -1)\n self.postMessage(response, [response.data.buffer]);\n else\n self.postMessage(response, []);\n }\n });\n self.addEventListener(\"error\", function (e) {\n LZUTF8.log(LZUTF8.createErrorMessage(e.error, \"Unexpected LZUTF8 WebWorker exception\"));\n });\n }\n };\n WebWorker.createGlobalWorkerIfNeeded = function () {\n if (WebWorker.globalWorker)\n return true;\n if (!LZUTF8.webWorkersAvailable())\n return false;\n if (!WebWorker.scriptURI && typeof document === \"object\") {\n var scriptElement = document.getElementById(\"lzutf8\");\n if (scriptElement != null)\n WebWorker.scriptURI = scriptElement.getAttribute(\"src\") || undefined;\n }\n if (WebWorker.scriptURI) {\n WebWorker.globalWorker = new Worker(WebWorker.scriptURI);\n return true;\n }\n else {\n return false;\n }\n };\n WebWorker.terminate = function () {\n if (WebWorker.globalWorker) {\n WebWorker.globalWorker.terminate();\n WebWorker.globalWorker = undefined;\n }\n };\n })(WebWorker = LZUTF8.WebWorker || (LZUTF8.WebWorker = {}));\n WebWorker.installWebWorkerIfNeeded();\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ArraySegment = (function () {\n function ArraySegment(container, startPosition, length) {\n this.container = container;\n this.startPosition = startPosition;\n this.length = length;\n }\n ArraySegment.prototype.get = function (index) {\n return this.container[this.startPosition + index];\n };\n ArraySegment.prototype.getInReversedOrder = function (reverseIndex) {\n return this.container[this.startPosition + this.length - 1 - reverseIndex];\n };\n ArraySegment.prototype.set = function (index, value) {\n this.container[this.startPosition + index] = value;\n };\n return ArraySegment;\n }());\n LZUTF8.ArraySegment = ArraySegment;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ArrayTools;\n (function (ArrayTools) {\n ArrayTools.copyElements = function (source, sourceIndex, destination, destinationIndex, count) {\n while (count--)\n destination[destinationIndex++] = source[sourceIndex++];\n };\n ArrayTools.zeroElements = function (collection, index, count) {\n while (count--)\n collection[index++] = 0;\n };\n ArrayTools.countNonzeroValuesInArray = function (array) {\n var result = 0;\n for (var i = 0; i < array.length; i++)\n if (array[i])\n result++;\n return result;\n };\n ArrayTools.truncateStartingElements = function (array, truncatedLength) {\n if (array.length <= truncatedLength)\n throw new RangeError(\"truncateStartingElements: Requested length should be smaller than array length\");\n var sourcePosition = array.length - truncatedLength;\n for (var i = 0; i < truncatedLength; i++)\n array[i] = array[sourcePosition + i];\n array.length = truncatedLength;\n };\n ArrayTools.doubleByteArrayCapacity = function (array) {\n var newArray = new Uint8Array(array.length * 2);\n newArray.set(array);\n return newArray;\n };\n ArrayTools.concatUint8Arrays = function (arrays) {\n var totalLength = 0;\n for (var _i = 0, arrays_1 = arrays; _i < arrays_1.length; _i++) {\n var array = arrays_1[_i];\n totalLength += array.length;\n }\n var result = new Uint8Array(totalLength);\n var offset = 0;\n for (var _a = 0, arrays_2 = arrays; _a < arrays_2.length; _a++) {\n var array = arrays_2[_a];\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n };\n ArrayTools.splitByteArray = function (byteArray, maxPartLength) {\n var result = [];\n for (var offset = 0; offset < byteArray.length;) {\n var blockLength = Math.min(maxPartLength, byteArray.length - offset);\n result.push(byteArray.subarray(offset, offset + blockLength));\n offset += blockLength;\n }\n return result;\n };\n })(ArrayTools = LZUTF8.ArrayTools || (LZUTF8.ArrayTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var BufferTools;\n (function (BufferTools) {\n BufferTools.convertToUint8ArrayIfNeeded = function (input) {\n if (typeof Buffer === \"function\" && Buffer.isBuffer(input))\n return BufferTools.bufferToUint8Array(input);\n else\n return input;\n };\n BufferTools.uint8ArrayToBuffer = function (arr) {\n if (Buffer.prototype instanceof Uint8Array) {\n var arrClone = new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n Object[\"setPrototypeOf\"](arrClone, Buffer.prototype);\n return arrClone;\n }\n else {\n var len = arr.length;\n var buf = new Buffer(len);\n for (var i = 0; i < len; i++)\n buf[i] = arr[i];\n return buf;\n }\n };\n BufferTools.bufferToUint8Array = function (buf) {\n if (Buffer.prototype instanceof Uint8Array) {\n return new Uint8Array(buf[\"buffer\"], buf[\"byteOffset\"], buf[\"byteLength\"]);\n }\n else {\n var len = buf.length;\n var arr = new Uint8Array(len);\n for (var i = 0; i < len; i++)\n arr[i] = buf[i];\n return arr;\n }\n };\n })(BufferTools = LZUTF8.BufferTools || (LZUTF8.BufferTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressionCommon;\n (function (CompressionCommon) {\n CompressionCommon.getCroppedBuffer = function (buffer, cropStartOffset, cropLength, additionalCapacity) {\n if (additionalCapacity === void 0) { additionalCapacity = 0; }\n var croppedBuffer = new Uint8Array(cropLength + additionalCapacity);\n croppedBuffer.set(buffer.subarray(cropStartOffset, cropStartOffset + cropLength));\n return croppedBuffer;\n };\n CompressionCommon.getCroppedAndAppendedByteArray = function (bytes, cropStartOffset, cropLength, byteArrayToAppend) {\n return LZUTF8.ArrayTools.concatUint8Arrays([bytes.subarray(cropStartOffset, cropStartOffset + cropLength), byteArrayToAppend]);\n };\n CompressionCommon.detectCompressionSourceEncoding = function (input) {\n if (input == null)\n throw new TypeError(\"detectCompressionSourceEncoding: input is null or undefined\");\n if (typeof input === \"string\")\n return \"String\";\n else if (input instanceof Uint8Array || (typeof Buffer === \"function\" && Buffer.isBuffer(input)))\n return \"ByteArray\";\n else\n throw new TypeError(\"detectCompressionSourceEncoding: input must be of type 'string', 'Uint8Array' or 'Buffer'\");\n };\n CompressionCommon.encodeCompressedBytes = function (compressedBytes, outputEncoding) {\n switch (outputEncoding) {\n case \"ByteArray\":\n return compressedBytes;\n case \"Buffer\":\n return LZUTF8.BufferTools.uint8ArrayToBuffer(compressedBytes);\n case \"Base64\":\n return LZUTF8.encodeBase64(compressedBytes);\n case \"BinaryString\":\n return LZUTF8.encodeBinaryString(compressedBytes);\n case \"StorageBinaryString\":\n return LZUTF8.encodeStorageBinaryString(compressedBytes);\n default:\n throw new TypeError(\"encodeCompressedBytes: invalid output encoding requested\");\n }\n };\n CompressionCommon.decodeCompressedBytes = function (compressedData, inputEncoding) {\n if (inputEncoding == null)\n throw new TypeError(\"decodeCompressedData: Input is null or undefined\");\n switch (inputEncoding) {\n case \"ByteArray\":\n case \"Buffer\":\n var normalizedBytes = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(compressedData);\n if (!(normalizedBytes instanceof Uint8Array))\n throw new TypeError(\"decodeCompressedData: 'ByteArray' or 'Buffer' input type was specified but input is not a Uint8Array or Buffer\");\n return normalizedBytes;\n case \"Base64\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'Base64' input type was specified but input is not a string\");\n return LZUTF8.decodeBase64(compressedData);\n case \"BinaryString\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'BinaryString' input type was specified but input is not a string\");\n return LZUTF8.decodeBinaryString(compressedData);\n case \"StorageBinaryString\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'StorageBinaryString' input type was specified but input is not a string\");\n return LZUTF8.decodeStorageBinaryString(compressedData);\n default:\n throw new TypeError(\"decodeCompressedData: invalid input encoding requested: '\" + inputEncoding + \"'\");\n }\n };\n CompressionCommon.encodeDecompressedBytes = function (decompressedBytes, outputEncoding) {\n switch (outputEncoding) {\n case \"String\":\n return LZUTF8.decodeUTF8(decompressedBytes);\n case \"ByteArray\":\n return decompressedBytes;\n case \"Buffer\":\n if (typeof Buffer !== \"function\")\n throw new TypeError(\"encodeDecompressedBytes: a 'Buffer' type was specified but is not supported at the current envirnment\");\n return LZUTF8.BufferTools.uint8ArrayToBuffer(decompressedBytes);\n default:\n throw new TypeError(\"encodeDecompressedBytes: invalid output encoding requested\");\n }\n };\n })(CompressionCommon = LZUTF8.CompressionCommon || (LZUTF8.CompressionCommon = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var EventLoop;\n (function (EventLoop) {\n var queuedFunctions = [];\n var asyncFlushFunc;\n EventLoop.enqueueImmediate = function (func) {\n queuedFunctions.push(func);\n if (queuedFunctions.length === 1)\n asyncFlushFunc();\n };\n EventLoop.initializeScheduler = function () {\n var flush = function () {\n for (var _i = 0, queuedFunctions_1 = queuedFunctions; _i < queuedFunctions_1.length; _i++) {\n var func = queuedFunctions_1[_i];\n try {\n func.call(undefined);\n }\n catch (exception) {\n LZUTF8.printExceptionAndStackTraceToConsole(exception, \"enqueueImmediate exception\");\n }\n }\n queuedFunctions.length = 0;\n };\n if (LZUTF8.runningInNodeJS()) {\n asyncFlushFunc = function () { return setImmediate(function () { return flush(); }); };\n }\n if (typeof window === \"object\" && typeof window.addEventListener === \"function\" && typeof window.postMessage === \"function\") {\n var token_1 = \"enqueueImmediate-\" + Math.random().toString();\n window.addEventListener(\"message\", function (event) {\n if (event.data === token_1)\n flush();\n });\n var targetOrigin_1;\n if (LZUTF8.runningInNullOrigin())\n targetOrigin_1 = '*';\n else\n targetOrigin_1 = window.location.href;\n asyncFlushFunc = function () { return window.postMessage(token_1, targetOrigin_1); };\n }\n else if (typeof MessageChannel === \"function\" && typeof MessagePort === \"function\") {\n var channel_1 = new MessageChannel();\n channel_1.port1.onmessage = function () { return flush(); };\n asyncFlushFunc = function () { return channel_1.port2.postMessage(0); };\n }\n else {\n asyncFlushFunc = function () { return setTimeout(function () { return flush(); }, 0); };\n }\n };\n EventLoop.initializeScheduler();\n })(EventLoop = LZUTF8.EventLoop || (LZUTF8.EventLoop = {}));\n LZUTF8.enqueueImmediate = function (func) { return EventLoop.enqueueImmediate(func); };\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ObjectTools;\n (function (ObjectTools) {\n ObjectTools.override = function (obj, newPropertyValues) {\n return ObjectTools.extend(obj, newPropertyValues);\n };\n ObjectTools.extend = function (obj, newProperties) {\n if (obj == null)\n throw new TypeError(\"obj is null or undefined\");\n if (typeof obj !== \"object\")\n throw new TypeError(\"obj is not an object\");\n if (newProperties == null)\n newProperties = {};\n if (typeof newProperties !== \"object\")\n throw new TypeError(\"newProperties is not an object\");\n if (newProperties != null) {\n for (var property in newProperties)\n obj[property] = newProperties[property];\n }\n return obj;\n };\n })(ObjectTools = LZUTF8.ObjectTools || (LZUTF8.ObjectTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n LZUTF8.getRandomIntegerInRange = function (low, high) {\n return low + Math.floor(Math.random() * (high - low));\n };\n LZUTF8.getRandomUTF16StringOfLength = function (length) {\n var randomString = \"\";\n for (var i = 0; i < length; i++) {\n var randomCodePoint = void 0;\n do {\n randomCodePoint = LZUTF8.getRandomIntegerInRange(0, 0x10FFFF + 1);\n } while (randomCodePoint >= 0xD800 && randomCodePoint <= 0xDFFF);\n randomString += LZUTF8.Encoding.CodePoint.decodeToString(randomCodePoint);\n }\n return randomString;\n };\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var StringBuilder = (function () {\n function StringBuilder(outputBufferCapacity) {\n if (outputBufferCapacity === void 0) { outputBufferCapacity = 1024; }\n this.outputBufferCapacity = outputBufferCapacity;\n this.outputPosition = 0;\n this.outputString = \"\";\n this.outputBuffer = new Uint16Array(this.outputBufferCapacity);\n }\n StringBuilder.prototype.appendCharCode = function (charCode) {\n this.outputBuffer[this.outputPosition++] = charCode;\n if (this.outputPosition === this.outputBufferCapacity)\n this.flushBufferToOutputString();\n };\n StringBuilder.prototype.appendCharCodes = function (charCodes) {\n for (var i = 0, length_1 = charCodes.length; i < length_1; i++)\n this.appendCharCode(charCodes[i]);\n };\n StringBuilder.prototype.appendString = function (str) {\n for (var i = 0, length_2 = str.length; i < length_2; i++)\n this.appendCharCode(str.charCodeAt(i));\n };\n StringBuilder.prototype.appendCodePoint = function (codePoint) {\n if (codePoint <= 0xFFFF) {\n this.appendCharCode(codePoint);\n }\n else if (codePoint <= 0x10FFFF) {\n this.appendCharCode(0xD800 + ((codePoint - 0x10000) >>> 10));\n this.appendCharCode(0xDC00 + ((codePoint - 0x10000) & 1023));\n }\n else\n throw new Error(\"appendCodePoint: A code point of \" + codePoint + \" cannot be encoded in UTF-16\");\n };\n StringBuilder.prototype.getOutputString = function () {\n this.flushBufferToOutputString();\n return this.outputString;\n };\n StringBuilder.prototype.flushBufferToOutputString = function () {\n if (this.outputPosition === this.outputBufferCapacity)\n this.outputString += String.fromCharCode.apply(null, this.outputBuffer);\n else\n this.outputString += String.fromCharCode.apply(null, this.outputBuffer.subarray(0, this.outputPosition));\n this.outputPosition = 0;\n };\n return StringBuilder;\n }());\n LZUTF8.StringBuilder = StringBuilder;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Timer = (function () {\n function Timer() {\n this.restart();\n }\n Timer.prototype.restart = function () {\n this.startTime = Timer.getTimestamp();\n };\n Timer.prototype.getElapsedTime = function () {\n return Timer.getTimestamp() - this.startTime;\n };\n Timer.prototype.getElapsedTimeAndRestart = function () {\n var elapsedTime = this.getElapsedTime();\n this.restart();\n return elapsedTime;\n };\n Timer.prototype.logAndRestart = function (title, logToDocument) {\n if (logToDocument === void 0) { logToDocument = true; }\n var elapsedTime = this.getElapsedTime();\n var message = title + \": \" + elapsedTime.toFixed(3) + \"ms\";\n LZUTF8.log(message, logToDocument);\n this.restart();\n return elapsedTime;\n };\n Timer.getTimestamp = function () {\n if (!this.timestampFunc)\n this.createGlobalTimestampFunction();\n return this.timestampFunc();\n };\n Timer.getMicrosecondTimestamp = function () {\n return Math.floor(Timer.getTimestamp() * 1000);\n };\n Timer.createGlobalTimestampFunction = function () {\n if (typeof process === \"object\" && typeof process.hrtime === \"function\") {\n var baseTimestamp_1 = 0;\n this.timestampFunc = function () {\n var nodeTimeStamp = process.hrtime();\n var millisecondTime = (nodeTimeStamp[0] * 1000) + (nodeTimeStamp[1] / 1000000);\n return baseTimestamp_1 + millisecondTime;\n };\n baseTimestamp_1 = Date.now() - this.timestampFunc();\n }\n else if (typeof chrome === \"object\" && chrome.Interval) {\n var baseTimestamp_2 = Date.now();\n var chromeIntervalObject_1 = new chrome.Interval();\n chromeIntervalObject_1.start();\n this.timestampFunc = function () { return baseTimestamp_2 + chromeIntervalObject_1.microseconds() / 1000; };\n }\n else if (typeof performance === \"object\" && performance.now) {\n var baseTimestamp_3 = Date.now() - performance.now();\n this.timestampFunc = function () { return baseTimestamp_3 + performance.now(); };\n }\n else if (Date.now) {\n this.timestampFunc = function () { return Date.now(); };\n }\n else {\n this.timestampFunc = function () { return (new Date()).getTime(); };\n }\n };\n return Timer;\n }());\n LZUTF8.Timer = Timer;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Compressor = (function () {\n function Compressor(useCustomHashTable) {\n if (useCustomHashTable === void 0) { useCustomHashTable = true; }\n this.MinimumSequenceLength = 4;\n this.MaximumSequenceLength = 31;\n this.MaximumMatchDistance = 32767;\n this.PrefixHashTableSize = 65537;\n this.inputBufferStreamOffset = 1;\n if (useCustomHashTable && typeof Uint32Array == \"function\")\n this.prefixHashTable = new LZUTF8.CompressorCustomHashTable(this.PrefixHashTableSize);\n else\n this.prefixHashTable = new LZUTF8.CompressorSimpleHashTable(this.PrefixHashTableSize);\n }\n Compressor.prototype.compressBlock = function (input) {\n if (input === undefined || input === null)\n throw new TypeError(\"compressBlock: undefined or null input received\");\n if (typeof input == \"string\")\n input = LZUTF8.encodeUTF8(input);\n input = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n return this.compressUtf8Block(input);\n };\n Compressor.prototype.compressUtf8Block = function (utf8Bytes) {\n if (!utf8Bytes || utf8Bytes.length == 0)\n return new Uint8Array(0);\n var bufferStartingReadOffset = this.cropAndAddNewBytesToInputBuffer(utf8Bytes);\n var inputBuffer = this.inputBuffer;\n var inputBufferLength = this.inputBuffer.length;\n this.outputBuffer = new Uint8Array(utf8Bytes.length);\n this.outputBufferPosition = 0;\n var latestMatchEndPosition = 0;\n for (var readPosition = bufferStartingReadOffset; readPosition < inputBufferLength; readPosition++) {\n var inputValue = inputBuffer[readPosition];\n var withinAMatchedRange = readPosition < latestMatchEndPosition;\n if (readPosition > inputBufferLength - this.MinimumSequenceLength) {\n if (!withinAMatchedRange)\n this.outputRawByte(inputValue);\n continue;\n }\n var targetBucketIndex = this.getBucketIndexForPrefix(readPosition);\n if (!withinAMatchedRange) {\n var matchLocator = this.findLongestMatch(readPosition, targetBucketIndex);\n if (matchLocator != null) {\n this.outputPointerBytes(matchLocator.length, matchLocator.distance);\n latestMatchEndPosition = readPosition + matchLocator.length;\n withinAMatchedRange = true;\n }\n }\n if (!withinAMatchedRange)\n this.outputRawByte(inputValue);\n var inputStreamPosition = this.inputBufferStreamOffset + readPosition;\n this.prefixHashTable.addValueToBucket(targetBucketIndex, inputStreamPosition);\n }\n return this.outputBuffer.subarray(0, this.outputBufferPosition);\n };\n Compressor.prototype.findLongestMatch = function (matchedSequencePosition, bucketIndex) {\n var bucket = this.prefixHashTable.getArraySegmentForBucketIndex(bucketIndex, this.reusableArraySegmentObject);\n if (bucket == null)\n return null;\n var input = this.inputBuffer;\n var longestMatchDistance;\n var longestMatchLength = 0;\n for (var i = 0; i < bucket.length; i++) {\n var testedSequencePosition = bucket.getInReversedOrder(i) - this.inputBufferStreamOffset;\n var testedSequenceDistance = matchedSequencePosition - testedSequencePosition;\n var lengthToSurpass = void 0;\n if (longestMatchDistance === undefined)\n lengthToSurpass = this.MinimumSequenceLength - 1;\n else if (longestMatchDistance < 128 && testedSequenceDistance >= 128)\n lengthToSurpass = longestMatchLength + (longestMatchLength >>> 1);\n else\n lengthToSurpass = longestMatchLength;\n if (testedSequenceDistance > this.MaximumMatchDistance ||\n lengthToSurpass >= this.MaximumSequenceLength ||\n matchedSequencePosition + lengthToSurpass >= input.length)\n break;\n if (input[testedSequencePosition + lengthToSurpass] !== input[matchedSequencePosition + lengthToSurpass])\n continue;\n for (var offset = 0;; offset++) {\n if (matchedSequencePosition + offset === input.length ||\n input[testedSequencePosition + offset] !== input[matchedSequencePosition + offset]) {\n if (offset > lengthToSurpass) {\n longestMatchDistance = testedSequenceDistance;\n longestMatchLength = offset;\n }\n break;\n }\n else if (offset === this.MaximumSequenceLength)\n return { distance: testedSequenceDistance, length: this.MaximumSequenceLength };\n }\n }\n if (longestMatchDistance !== undefined)\n return { distance: longestMatchDistance, length: longestMatchLength };\n else\n return null;\n };\n Compressor.prototype.getBucketIndexForPrefix = function (startPosition) {\n return (this.inputBuffer[startPosition] * 7880599 +\n this.inputBuffer[startPosition + 1] * 39601 +\n this.inputBuffer[startPosition + 2] * 199 +\n this.inputBuffer[startPosition + 3]) % this.PrefixHashTableSize;\n };\n Compressor.prototype.outputPointerBytes = function (length, distance) {\n if (distance < 128) {\n this.outputRawByte(192 | length);\n this.outputRawByte(distance);\n }\n else {\n this.outputRawByte(224 | length);\n this.outputRawByte(distance >>> 8);\n this.outputRawByte(distance & 255);\n }\n };\n Compressor.prototype.outputRawByte = function (value) {\n this.outputBuffer[this.outputBufferPosition++] = value;\n };\n Compressor.prototype.cropAndAddNewBytesToInputBuffer = function (newInput) {\n if (this.inputBuffer === undefined) {\n this.inputBuffer = newInput;\n return 0;\n }\n else {\n var cropLength = Math.min(this.inputBuffer.length, this.MaximumMatchDistance);\n var cropStartOffset = this.inputBuffer.length - cropLength;\n this.inputBuffer = LZUTF8.CompressionCommon.getCroppedAndAppendedByteArray(this.inputBuffer, cropStartOffset, cropLength, newInput);\n this.inputBufferStreamOffset += cropStartOffset;\n return cropLength;\n }\n };\n return Compressor;\n }());\n LZUTF8.Compressor = Compressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressorCustomHashTable = (function () {\n function CompressorCustomHashTable(bucketCount) {\n this.minimumBucketCapacity = 4;\n this.maximumBucketCapacity = 64;\n this.bucketLocators = new Uint32Array(bucketCount * 2);\n this.storage = new Uint32Array(bucketCount * 2);\n this.storageIndex = 1;\n }\n CompressorCustomHashTable.prototype.addValueToBucket = function (bucketIndex, valueToAdd) {\n bucketIndex <<= 1;\n if (this.storageIndex >= (this.storage.length >>> 1))\n this.compact();\n var startPosition = this.bucketLocators[bucketIndex];\n var length;\n if (startPosition === 0) {\n startPosition = this.storageIndex;\n length = 1;\n this.storage[this.storageIndex] = valueToAdd;\n this.storageIndex += this.minimumBucketCapacity;\n }\n else {\n length = this.bucketLocators[bucketIndex + 1];\n if (length === this.maximumBucketCapacity - 1)\n length = this.truncateBucketToNewerElements(startPosition, length, this.maximumBucketCapacity / 2);\n var endPosition = startPosition + length;\n if (this.storage[endPosition] === 0) {\n this.storage[endPosition] = valueToAdd;\n if (endPosition === this.storageIndex)\n this.storageIndex += length;\n }\n else {\n LZUTF8.ArrayTools.copyElements(this.storage, startPosition, this.storage, this.storageIndex, length);\n startPosition = this.storageIndex;\n this.storageIndex += length;\n this.storage[this.storageIndex++] = valueToAdd;\n this.storageIndex += length;\n }\n length++;\n }\n this.bucketLocators[bucketIndex] = startPosition;\n this.bucketLocators[bucketIndex + 1] = length;\n };\n CompressorCustomHashTable.prototype.truncateBucketToNewerElements = function (startPosition, bucketLength, truncatedBucketLength) {\n var sourcePosition = startPosition + bucketLength - truncatedBucketLength;\n LZUTF8.ArrayTools.copyElements(this.storage, sourcePosition, this.storage, startPosition, truncatedBucketLength);\n LZUTF8.ArrayTools.zeroElements(this.storage, startPosition + truncatedBucketLength, bucketLength - truncatedBucketLength);\n return truncatedBucketLength;\n };\n CompressorCustomHashTable.prototype.compact = function () {\n var oldBucketLocators = this.bucketLocators;\n var oldStorage = this.storage;\n this.bucketLocators = new Uint32Array(this.bucketLocators.length);\n this.storageIndex = 1;\n for (var bucketIndex = 0; bucketIndex < oldBucketLocators.length; bucketIndex += 2) {\n var length_3 = oldBucketLocators[bucketIndex + 1];\n if (length_3 === 0)\n continue;\n this.bucketLocators[bucketIndex] = this.storageIndex;\n this.bucketLocators[bucketIndex + 1] = length_3;\n this.storageIndex += Math.max(Math.min(length_3 * 2, this.maximumBucketCapacity), this.minimumBucketCapacity);\n }\n this.storage = new Uint32Array(this.storageIndex * 8);\n for (var bucketIndex = 0; bucketIndex < oldBucketLocators.length; bucketIndex += 2) {\n var sourcePosition = oldBucketLocators[bucketIndex];\n if (sourcePosition === 0)\n continue;\n var destPosition = this.bucketLocators[bucketIndex];\n var length_4 = this.bucketLocators[bucketIndex + 1];\n LZUTF8.ArrayTools.copyElements(oldStorage, sourcePosition, this.storage, destPosition, length_4);\n }\n };\n CompressorCustomHashTable.prototype.getArraySegmentForBucketIndex = function (bucketIndex, outputObject) {\n bucketIndex <<= 1;\n var startPosition = this.bucketLocators[bucketIndex];\n if (startPosition === 0)\n return null;\n if (outputObject === undefined)\n outputObject = new LZUTF8.ArraySegment(this.storage, startPosition, this.bucketLocators[bucketIndex + 1]);\n return outputObject;\n };\n CompressorCustomHashTable.prototype.getUsedBucketCount = function () {\n return Math.floor(LZUTF8.ArrayTools.countNonzeroValuesInArray(this.bucketLocators) / 2);\n };\n CompressorCustomHashTable.prototype.getTotalElementCount = function () {\n var result = 0;\n for (var i = 0; i < this.bucketLocators.length; i += 2)\n result += this.bucketLocators[i + 1];\n return result;\n };\n return CompressorCustomHashTable;\n }());\n LZUTF8.CompressorCustomHashTable = CompressorCustomHashTable;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressorSimpleHashTable = (function () {\n function CompressorSimpleHashTable(size) {\n this.maximumBucketCapacity = 64;\n this.buckets = new Array(size);\n }\n CompressorSimpleHashTable.prototype.addValueToBucket = function (bucketIndex, valueToAdd) {\n var bucket = this.buckets[bucketIndex];\n if (bucket === undefined) {\n this.buckets[bucketIndex] = [valueToAdd];\n }\n else {\n if (bucket.length === this.maximumBucketCapacity - 1)\n LZUTF8.ArrayTools.truncateStartingElements(bucket, this.maximumBucketCapacity / 2);\n bucket.push(valueToAdd);\n }\n };\n CompressorSimpleHashTable.prototype.getArraySegmentForBucketIndex = function (bucketIndex, outputObject) {\n var bucket = this.buckets[bucketIndex];\n if (bucket === undefined)\n return null;\n if (outputObject === undefined)\n outputObject = new LZUTF8.ArraySegment(bucket, 0, bucket.length);\n return outputObject;\n };\n CompressorSimpleHashTable.prototype.getUsedBucketCount = function () {\n return LZUTF8.ArrayTools.countNonzeroValuesInArray(this.buckets);\n };\n CompressorSimpleHashTable.prototype.getTotalElementCount = function () {\n var currentSum = 0;\n for (var i = 0; i < this.buckets.length; i++) {\n if (this.buckets[i] !== undefined)\n currentSum += this.buckets[i].length;\n }\n return currentSum;\n };\n return CompressorSimpleHashTable;\n }());\n LZUTF8.CompressorSimpleHashTable = CompressorSimpleHashTable;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Decompressor = (function () {\n function Decompressor() {\n this.MaximumMatchDistance = 32767;\n this.outputPosition = 0;\n }\n Decompressor.prototype.decompressBlockToString = function (input) {\n input = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n return LZUTF8.decodeUTF8(this.decompressBlock(input));\n };\n Decompressor.prototype.decompressBlock = function (input) {\n if (this.inputBufferRemainder) {\n input = LZUTF8.ArrayTools.concatUint8Arrays([this.inputBufferRemainder, input]);\n this.inputBufferRemainder = undefined;\n }\n var outputStartPosition = this.cropOutputBufferToWindowAndInitialize(Math.max(input.length * 4, 1024));\n for (var readPosition = 0, inputLength = input.length; readPosition < inputLength; readPosition++) {\n var inputValue = input[readPosition];\n if (inputValue >>> 6 != 3) {\n this.outputByte(inputValue);\n continue;\n }\n var sequenceLengthIdentifier = inputValue >>> 5;\n if (readPosition == inputLength - 1 ||\n (readPosition == inputLength - 2 && sequenceLengthIdentifier == 7)) {\n this.inputBufferRemainder = input.subarray(readPosition);\n break;\n }\n if (input[readPosition + 1] >>> 7 === 1) {\n this.outputByte(inputValue);\n }\n else {\n var matchLength = inputValue & 31;\n var matchDistance = void 0;\n if (sequenceLengthIdentifier == 6) {\n matchDistance = input[readPosition + 1];\n readPosition += 1;\n }\n else {\n matchDistance = (input[readPosition + 1] << 8) | (input[readPosition + 2]);\n readPosition += 2;\n }\n var matchPosition = this.outputPosition - matchDistance;\n for (var offset = 0; offset < matchLength; offset++)\n this.outputByte(this.outputBuffer[matchPosition + offset]);\n }\n }\n this.rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence();\n return LZUTF8.CompressionCommon.getCroppedBuffer(this.outputBuffer, outputStartPosition, this.outputPosition - outputStartPosition);\n };\n Decompressor.prototype.outputByte = function (value) {\n if (this.outputPosition === this.outputBuffer.length)\n this.outputBuffer = LZUTF8.ArrayTools.doubleByteArrayCapacity(this.outputBuffer);\n this.outputBuffer[this.outputPosition++] = value;\n };\n Decompressor.prototype.cropOutputBufferToWindowAndInitialize = function (initialCapacity) {\n if (!this.outputBuffer) {\n this.outputBuffer = new Uint8Array(initialCapacity);\n return 0;\n }\n var cropLength = Math.min(this.outputPosition, this.MaximumMatchDistance);\n this.outputBuffer = LZUTF8.CompressionCommon.getCroppedBuffer(this.outputBuffer, this.outputPosition - cropLength, cropLength, initialCapacity);\n this.outputPosition = cropLength;\n if (this.outputBufferRemainder) {\n for (var i = 0; i < this.outputBufferRemainder.length; i++)\n this.outputByte(this.outputBufferRemainder[i]);\n this.outputBufferRemainder = undefined;\n }\n return cropLength;\n };\n Decompressor.prototype.rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence = function () {\n for (var offset = 1; offset <= 4 && this.outputPosition - offset >= 0; offset++) {\n var value = this.outputBuffer[this.outputPosition - offset];\n if ((offset < 4 && (value >>> 3) === 30) ||\n (offset < 3 && (value >>> 4) === 14) ||\n (offset < 2 && (value >>> 5) === 6)) {\n this.outputBufferRemainder = this.outputBuffer.subarray(this.outputPosition - offset, this.outputPosition);\n this.outputPosition -= offset;\n return;\n }\n }\n };\n return Decompressor;\n }());\n LZUTF8.Decompressor = Decompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var Base64;\n (function (Base64) {\n var charCodeMap = new Uint8Array([65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47]);\n var reverseCharCodeMap = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255]);\n var paddingCharacter = \"=\";\n var paddingCharCode = 61;\n Base64.encode = function (inputBytes) {\n if (!inputBytes || inputBytes.length == 0)\n return \"\";\n if (LZUTF8.runningInNodeJS()) {\n return (LZUTF8.BufferTools.uint8ArrayToBuffer(inputBytes)).toString(\"base64\");\n }\n else {\n return Base64.encodeWithJS(inputBytes);\n }\n };\n Base64.decode = function (base64String) {\n if (!base64String)\n return new Uint8Array(0);\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.bufferToUint8Array(new Buffer(base64String, \"base64\"));\n }\n else {\n return Base64.decodeWithJS(base64String);\n }\n };\n Base64.encodeWithJS = function (inputBytes, addPadding) {\n if (addPadding === void 0) { addPadding = true; }\n if (!inputBytes || inputBytes.length == 0)\n return \"\";\n var map = charCodeMap;\n var output = new LZUTF8.StringBuilder();\n var uint24;\n for (var readPosition = 0, length_5 = inputBytes.length; readPosition < length_5; readPosition += 3) {\n if (readPosition <= length_5 - 3) {\n uint24 = inputBytes[readPosition] << 16 | inputBytes[readPosition + 1] << 8 | inputBytes[readPosition + 2];\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n output.appendCharCode(map[(uint24 >>> 6) & 63]);\n output.appendCharCode(map[(uint24) & 63]);\n uint24 = 0;\n }\n else if (readPosition === length_5 - 2) {\n uint24 = inputBytes[readPosition] << 16 | inputBytes[readPosition + 1] << 8;\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n output.appendCharCode(map[(uint24 >>> 6) & 63]);\n if (addPadding)\n output.appendCharCode(paddingCharCode);\n }\n else if (readPosition === length_5 - 1) {\n uint24 = inputBytes[readPosition] << 16;\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n if (addPadding) {\n output.appendCharCode(paddingCharCode);\n output.appendCharCode(paddingCharCode);\n }\n }\n }\n return output.getOutputString();\n };\n Base64.decodeWithJS = function (base64String, outputBuffer) {\n if (!base64String || base64String.length == 0)\n return new Uint8Array(0);\n var lengthModulo4 = base64String.length % 4;\n if (lengthModulo4 === 1)\n throw new Error(\"Invalid Base64 string: length % 4 == 1\");\n else if (lengthModulo4 === 2)\n base64String += paddingCharacter + paddingCharacter;\n else if (lengthModulo4 === 3)\n base64String += paddingCharacter;\n if (!outputBuffer)\n outputBuffer = new Uint8Array(base64String.length);\n var outputPosition = 0;\n var length = base64String.length;\n for (var i = 0; i < length; i += 4) {\n var uint24 = (reverseCharCodeMap[base64String.charCodeAt(i)] << 18) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 1)] << 12) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 2)] << 6) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 3)]);\n outputBuffer[outputPosition++] = (uint24 >>> 16) & 255;\n outputBuffer[outputPosition++] = (uint24 >>> 8) & 255;\n outputBuffer[outputPosition++] = (uint24) & 255;\n }\n if (base64String.charCodeAt(length - 1) == paddingCharCode)\n outputPosition--;\n if (base64String.charCodeAt(length - 2) == paddingCharCode)\n outputPosition--;\n return outputBuffer.subarray(0, outputPosition);\n };\n })(Base64 = Encoding.Base64 || (Encoding.Base64 = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var BinaryString;\n (function (BinaryString) {\n BinaryString.encode = function (input) {\n if (input == null)\n throw new TypeError(\"BinaryString.encode: undefined or null input received\");\n if (input.length === 0)\n return \"\";\n var inputLength = input.length;\n var outputStringBuilder = new LZUTF8.StringBuilder();\n var remainder = 0;\n var state = 1;\n for (var i = 0; i < inputLength; i += 2) {\n var value = void 0;\n if (i == inputLength - 1)\n value = (input[i] << 8);\n else\n value = (input[i] << 8) | input[i + 1];\n outputStringBuilder.appendCharCode((remainder << (16 - state)) | value >>> state);\n remainder = value & ((1 << state) - 1);\n if (state === 15) {\n outputStringBuilder.appendCharCode(remainder);\n remainder = 0;\n state = 1;\n }\n else {\n state += 1;\n }\n if (i >= inputLength - 2)\n outputStringBuilder.appendCharCode(remainder << (16 - state));\n }\n outputStringBuilder.appendCharCode(32768 | (inputLength % 2));\n return outputStringBuilder.getOutputString();\n };\n BinaryString.decode = function (input) {\n if (typeof input !== \"string\")\n throw new TypeError(\"BinaryString.decode: invalid input type\");\n if (input == \"\")\n return new Uint8Array(0);\n var output = new Uint8Array(input.length * 3);\n var outputPosition = 0;\n var appendToOutput = function (value) {\n output[outputPosition++] = value >>> 8;\n output[outputPosition++] = value & 255;\n };\n var remainder = 0;\n var state = 0;\n for (var i = 0; i < input.length; i++) {\n var value = input.charCodeAt(i);\n if (value >= 32768) {\n if (value == (32768 | 1))\n outputPosition--;\n state = 0;\n continue;\n }\n if (state == 0) {\n remainder = value;\n }\n else {\n appendToOutput((remainder << state) | (value >>> (15 - state)));\n remainder = value & ((1 << (15 - state)) - 1);\n }\n if (state == 15)\n state = 0;\n else\n state += 1;\n }\n return output.subarray(0, outputPosition);\n };\n })(BinaryString = Encoding.BinaryString || (Encoding.BinaryString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var CodePoint;\n (function (CodePoint) {\n CodePoint.encodeFromString = function (str, position) {\n var charCode = str.charCodeAt(position);\n if (charCode < 0xD800 || charCode > 0xDBFF)\n return charCode;\n else {\n var nextCharCode = str.charCodeAt(position + 1);\n if (nextCharCode >= 0xDC00 && nextCharCode <= 0xDFFF)\n return 0x10000 + (((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00));\n else\n throw new Error(\"getUnicodeCodePoint: Received a lead surrogate character, char code \" + charCode + \", followed by \" + nextCharCode + \", which is not a trailing surrogate character code.\");\n }\n };\n CodePoint.decodeToString = function (codePoint) {\n if (codePoint <= 0xFFFF)\n return String.fromCharCode(codePoint);\n else if (codePoint <= 0x10FFFF)\n return String.fromCharCode(0xD800 + ((codePoint - 0x10000) >>> 10), 0xDC00 + ((codePoint - 0x10000) & 1023));\n else\n throw new Error(\"getStringFromUnicodeCodePoint: A code point of \" + codePoint + \" cannot be encoded in UTF-16\");\n };\n })(CodePoint = Encoding.CodePoint || (Encoding.CodePoint = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var DecimalString;\n (function (DecimalString) {\n var lookupTable = [\"000\", \"001\", \"002\", \"003\", \"004\", \"005\", \"006\", \"007\", \"008\", \"009\", \"010\", \"011\", \"012\", \"013\", \"014\", \"015\", \"016\", \"017\", \"018\", \"019\", \"020\", \"021\", \"022\", \"023\", \"024\", \"025\", \"026\", \"027\", \"028\", \"029\", \"030\", \"031\", \"032\", \"033\", \"034\", \"035\", \"036\", \"037\", \"038\", \"039\", \"040\", \"041\", \"042\", \"043\", \"044\", \"045\", \"046\", \"047\", \"048\", \"049\", \"050\", \"051\", \"052\", \"053\", \"054\", \"055\", \"056\", \"057\", \"058\", \"059\", \"060\", \"061\", \"062\", \"063\", \"064\", \"065\", \"066\", \"067\", \"068\", \"069\", \"070\", \"071\", \"072\", \"073\", \"074\", \"075\", \"076\", \"077\", \"078\", \"079\", \"080\", \"081\", \"082\", \"083\", \"084\", \"085\", \"086\", \"087\", \"088\", \"089\", \"090\", \"091\", \"092\", \"093\", \"094\", \"095\", \"096\", \"097\", \"098\", \"099\", \"100\", \"101\", \"102\", \"103\", \"104\", \"105\", \"106\", \"107\", \"108\", \"109\", \"110\", \"111\", \"112\", \"113\", \"114\", \"115\", \"116\", \"117\", \"118\", \"119\", \"120\", \"121\", \"122\", \"123\", \"124\", \"125\", \"126\", \"127\", \"128\", \"129\", \"130\", \"131\", \"132\", \"133\", \"134\", \"135\", \"136\", \"137\", \"138\", \"139\", \"140\", \"141\", \"142\", \"143\", \"144\", \"145\", \"146\", \"147\", \"148\", \"149\", \"150\", \"151\", \"152\", \"153\", \"154\", \"155\", \"156\", \"157\", \"158\", \"159\", \"160\", \"161\", \"162\", \"163\", \"164\", \"165\", \"166\", \"167\", \"168\", \"169\", \"170\", \"171\", \"172\", \"173\", \"174\", \"175\", \"176\", \"177\", \"178\", \"179\", \"180\", \"181\", \"182\", \"183\", \"184\", \"185\", \"186\", \"187\", \"188\", \"189\", \"190\", \"191\", \"192\", \"193\", \"194\", \"195\", \"196\", \"197\", \"198\", \"199\", \"200\", \"201\", \"202\", \"203\", \"204\", \"205\", \"206\", \"207\", \"208\", \"209\", \"210\", \"211\", \"212\", \"213\", \"214\", \"215\", \"216\", \"217\", \"218\", \"219\", \"220\", \"221\", \"222\", \"223\", \"224\", \"225\", \"226\", \"227\", \"228\", \"229\", \"230\", \"231\", \"232\", \"233\", \"234\", \"235\", \"236\", \"237\", \"238\", \"239\", \"240\", \"241\", \"242\", \"243\", \"244\", \"245\", \"246\", \"247\", \"248\", \"249\", \"250\", \"251\", \"252\", \"253\", \"254\", \"255\"];\n DecimalString.encode = function (binaryBytes) {\n var resultArray = [];\n for (var i = 0; i < binaryBytes.length; i++)\n resultArray.push(lookupTable[binaryBytes[i]]);\n return resultArray.join(\" \");\n };\n })(DecimalString = Encoding.DecimalString || (Encoding.DecimalString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var StorageBinaryString;\n (function (StorageBinaryString) {\n StorageBinaryString.encode = function (input) {\n return Encoding.BinaryString.encode(input).replace(/\\0/g, '\\u8002');\n };\n StorageBinaryString.decode = function (input) {\n return Encoding.BinaryString.decode(input.replace(/\\u8002/g, '\\0'));\n };\n })(StorageBinaryString = Encoding.StorageBinaryString || (Encoding.StorageBinaryString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var UTF8;\n (function (UTF8) {\n var nativeTextEncoder;\n var nativeTextDecoder;\n UTF8.encode = function (str) {\n if (!str || str.length == 0)\n return new Uint8Array(0);\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.bufferToUint8Array(new Buffer(str, \"utf8\"));\n }\n else if (UTF8.createNativeTextEncoderAndDecoderIfAvailable()) {\n return nativeTextEncoder.encode(str);\n }\n else {\n return UTF8.encodeWithJS(str);\n }\n };\n UTF8.decode = function (utf8Bytes) {\n if (!utf8Bytes || utf8Bytes.length == 0)\n return \"\";\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.uint8ArrayToBuffer(utf8Bytes).toString(\"utf8\");\n }\n else if (UTF8.createNativeTextEncoderAndDecoderIfAvailable()) {\n return nativeTextDecoder.decode(utf8Bytes);\n }\n else {\n return UTF8.decodeWithJS(utf8Bytes);\n }\n };\n UTF8.encodeWithJS = function (str, outputArray) {\n if (!str || str.length == 0)\n return new Uint8Array(0);\n if (!outputArray)\n outputArray = new Uint8Array(str.length * 4);\n var writeIndex = 0;\n for (var readIndex = 0; readIndex < str.length; readIndex++) {\n var charCode = Encoding.CodePoint.encodeFromString(str, readIndex);\n if (charCode <= 0x7F) {\n outputArray[writeIndex++] = charCode;\n }\n else if (charCode <= 0x7FF) {\n outputArray[writeIndex++] = 0xC0 | (charCode >>> 6);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n }\n else if (charCode <= 0xFFFF) {\n outputArray[writeIndex++] = 0xE0 | (charCode >>> 12);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 6) & 63);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n }\n else if (charCode <= 0x10FFFF) {\n outputArray[writeIndex++] = 0xF0 | (charCode >>> 18);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 12) & 63);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 6) & 63);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n readIndex++;\n }\n else\n throw new Error(\"Invalid UTF-16 string: Encountered a character unsupported by UTF-8/16 (RFC 3629)\");\n }\n return outputArray.subarray(0, writeIndex);\n };\n UTF8.decodeWithJS = function (utf8Bytes, startOffset, endOffset) {\n if (startOffset === void 0) { startOffset = 0; }\n if (!utf8Bytes || utf8Bytes.length == 0)\n return \"\";\n if (endOffset === undefined)\n endOffset = utf8Bytes.length;\n var output = new LZUTF8.StringBuilder();\n var outputCodePoint;\n var leadByte;\n for (var readIndex = startOffset, length_6 = endOffset; readIndex < length_6;) {\n leadByte = utf8Bytes[readIndex];\n if ((leadByte >>> 7) === 0) {\n outputCodePoint = leadByte;\n readIndex += 1;\n }\n else if ((leadByte >>> 5) === 6) {\n if (readIndex + 1 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 31) << 6) | (utf8Bytes[readIndex + 1] & 63);\n readIndex += 2;\n }\n else if ((leadByte >>> 4) === 14) {\n if (readIndex + 2 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 15) << 12) | ((utf8Bytes[readIndex + 1] & 63) << 6) | (utf8Bytes[readIndex + 2] & 63);\n readIndex += 3;\n }\n else if ((leadByte >>> 3) === 30) {\n if (readIndex + 3 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 7) << 18) | ((utf8Bytes[readIndex + 1] & 63) << 12) | ((utf8Bytes[readIndex + 2] & 63) << 6) | (utf8Bytes[readIndex + 3] & 63);\n readIndex += 4;\n }\n else\n throw new Error(\"Invalid UTF-8 stream: An invalid lead byte value encountered at position \" + readIndex);\n output.appendCodePoint(outputCodePoint);\n }\n return output.getOutputString();\n };\n UTF8.createNativeTextEncoderAndDecoderIfAvailable = function () {\n if (nativeTextEncoder)\n return true;\n if (typeof TextEncoder == \"function\") {\n nativeTextEncoder = new TextEncoder(\"utf-8\");\n nativeTextDecoder = new TextDecoder(\"utf-8\");\n return true;\n }\n else\n return false;\n };\n })(UTF8 = Encoding.UTF8 || (Encoding.UTF8 = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n function compress(input, options) {\n if (options === void 0) { options = {}; }\n if (input == null)\n throw new TypeError(\"compress: undefined or null input received\");\n var inputEncoding = LZUTF8.CompressionCommon.detectCompressionSourceEncoding(input);\n options = LZUTF8.ObjectTools.override({ inputEncoding: inputEncoding, outputEncoding: \"ByteArray\" }, options);\n var compressor = new LZUTF8.Compressor();\n var compressedBytes = compressor.compressBlock(input);\n return LZUTF8.CompressionCommon.encodeCompressedBytes(compressedBytes, options.outputEncoding);\n }\n LZUTF8.compress = compress;\n function decompress(input, options) {\n if (options === void 0) { options = {}; }\n if (input == null)\n throw new TypeError(\"decompress: undefined or null input received\");\n options = LZUTF8.ObjectTools.override({ inputEncoding: \"ByteArray\", outputEncoding: \"String\" }, options);\n var inputBytes = LZUTF8.CompressionCommon.decodeCompressedBytes(input, options.inputEncoding);\n var decompressor = new LZUTF8.Decompressor();\n var decompressedBytes = decompressor.decompressBlock(inputBytes);\n return LZUTF8.CompressionCommon.encodeDecompressedBytes(decompressedBytes, options.outputEncoding);\n }\n LZUTF8.decompress = decompress;\n function compressAsync(input, options, callback) {\n if (callback == null)\n callback = function () { };\n var inputEncoding;\n try {\n inputEncoding = LZUTF8.CompressionCommon.detectCompressionSourceEncoding(input);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n options = LZUTF8.ObjectTools.override({\n inputEncoding: inputEncoding,\n outputEncoding: \"ByteArray\",\n useWebWorker: true,\n blockSize: 65536\n }, options);\n LZUTF8.enqueueImmediate(function () {\n if (options.useWebWorker && LZUTF8.WebWorker.createGlobalWorkerIfNeeded()) {\n LZUTF8.WebWorker.compressAsync(input, options, callback);\n }\n else {\n LZUTF8.AsyncCompressor.compressAsync(input, options, callback);\n }\n });\n }\n LZUTF8.compressAsync = compressAsync;\n function decompressAsync(input, options, callback) {\n if (callback == null)\n callback = function () { };\n if (input == null) {\n callback(undefined, new TypeError(\"decompressAsync: undefined or null input received\"));\n return;\n }\n options = LZUTF8.ObjectTools.override({\n inputEncoding: \"ByteArray\",\n outputEncoding: \"String\",\n useWebWorker: true,\n blockSize: 65536\n }, options);\n var normalizedInput = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n LZUTF8.EventLoop.enqueueImmediate(function () {\n if (options.useWebWorker && LZUTF8.WebWorker.createGlobalWorkerIfNeeded()) {\n LZUTF8.WebWorker.decompressAsync(normalizedInput, options, callback);\n }\n else {\n LZUTF8.AsyncDecompressor.decompressAsync(input, options, callback);\n }\n });\n }\n LZUTF8.decompressAsync = decompressAsync;\n function createCompressionStream() {\n return LZUTF8.AsyncCompressor.createCompressionStream();\n }\n LZUTF8.createCompressionStream = createCompressionStream;\n function createDecompressionStream() {\n return LZUTF8.AsyncDecompressor.createDecompressionStream();\n }\n LZUTF8.createDecompressionStream = createDecompressionStream;\n function encodeUTF8(str) {\n return LZUTF8.Encoding.UTF8.encode(str);\n }\n LZUTF8.encodeUTF8 = encodeUTF8;\n function decodeUTF8(input) {\n return LZUTF8.Encoding.UTF8.decode(input);\n }\n LZUTF8.decodeUTF8 = decodeUTF8;\n function encodeBase64(input) {\n return LZUTF8.Encoding.Base64.encode(input);\n }\n LZUTF8.encodeBase64 = encodeBase64;\n function decodeBase64(str) {\n return LZUTF8.Encoding.Base64.decode(str);\n }\n LZUTF8.decodeBase64 = decodeBase64;\n function encodeBinaryString(input) {\n return LZUTF8.Encoding.BinaryString.encode(input);\n }\n LZUTF8.encodeBinaryString = encodeBinaryString;\n function decodeBinaryString(str) {\n return LZUTF8.Encoding.BinaryString.decode(str);\n }\n LZUTF8.decodeBinaryString = decodeBinaryString;\n function encodeStorageBinaryString(input) {\n return LZUTF8.Encoding.StorageBinaryString.encode(input);\n }\n LZUTF8.encodeStorageBinaryString = encodeStorageBinaryString;\n function decodeStorageBinaryString(str) {\n return LZUTF8.Encoding.StorageBinaryString.decode(str);\n }\n LZUTF8.decodeStorageBinaryString = decodeStorageBinaryString;\n})(LZUTF8 || (LZUTF8 = {}));\n","\r\n\r\n/**\r\n * Singleton. Responsible for storing and exeucting changes to objects over time.\r\n */\r\nexport default class DataObjectAnimator {\r\n static withBlockv (bv) {\r\n if (!bv.animator)\r\n bv.animator = new DataObjectAnimator(bv)\r\n return bv.animator\r\n }\r\n /** Constructor */\r\n constructor(bv) {\r\n // blockv\r\n this.blockv = bv\r\n\r\n // Store regions\r\n this.regions = []\r\n\r\n // List of changes\r\n this.changes = []\r\n\r\n // Update timer\r\n this.updateTimer = null\r\n\r\n // Time skew, for syncing server time to client time. This time is added to the device's \"current time\".\r\n this.timeSkew = 0\r\n\r\n // Add listeners for the WebSocket\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n this.blockv.WebSockets.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n\r\n }\r\n\r\n /** Called when a new message comes down the WebSocket */\r\n onWebSocketMessage(msg) {\r\n\r\n // We only handle state update messages here.\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Only handle brain updates\r\n if (msg.payload.action_name != 'brain-update')\r\n return\r\n\r\n // Check if the brain has given us a set of next positions\r\n let nextPositions = msg.payload.new_object.next_positions\r\n if (nextPositions) {\r\n\r\n // Map coordinates to sparse object updates\r\n let updates = nextPositions.map(p => { return {\r\n id: msg.payload.id,\r\n time: p.time,\r\n new_data: {\r\n 'vAtom::vAtomType': {\r\n 'geo_pos': {\r\n 'coordinates': p.geo_pos\r\n }\r\n }\r\n }\r\n }})\r\n\r\n // Fetch earliest time\r\n let earliestTime = updates[0].time\r\n for (let update of updates)\r\n if (earliestTime > update.time)\r\n earliestTime = update.time\r\n\r\n // Clear old data from animator\r\n this.clearUpdatesFor(msg.payload.id, earliestTime)\r\n\r\n // Hand off to the animator\r\n this.add(updates)\r\n\r\n }\r\n\r\n }\r\n\r\n /** Add a region */\r\n addRegion(region) {\r\n this.regions.push(region)\r\n }\r\n\r\n /** Remove a region */\r\n removeRegion(region) {\r\n this.regions = this.regions.filter(r => r != region)\r\n }\r\n\r\n /** Check if any of our regions has this data object */\r\n isMonitoringID(id) {\r\n\r\n for (let region of this.regions)\r\n if (region.objects.get(id))\r\n return true\r\n\r\n // No, we don't care about this object\r\n return false\r\n\r\n }\r\n\r\n /** Add updates to be executed */\r\n add(updates) {\r\n\r\n // Add updates to the array\r\n let now = Date.now() + this.timeSkew\r\n for (let u of updates) {\r\n\r\n // Ensure we care about this object\r\n if (!this.isMonitoringID(u.id))\r\n continue\r\n \r\n // Ensure this time entry has not passed already\r\n if (!u.time || u.time < now)\r\n continue\r\n\r\n // Add it\r\n this.changes.push(u)\r\n\r\n }\r\n\r\n // Sort changes oldest to newest\r\n this.changes.sort((a, b) => a.time - b.time)\r\n\r\n // Start update timer if needed\r\n if (!this.updateTimer)\r\n this.updateTimer = setInterval(this.doNextUpdate.bind(this), 50)\r\n\r\n }\r\n\r\n /** Remove pending updates for the specified object ID */\r\n clearUpdatesFor(id, afterTime = 0) {\r\n\r\n // Remove items\r\n for (let i = 0 ; i < this.changes.length ; i++)\r\n if (this.changes[i].id == id && this.changes[i].time > afterTime)\r\n this.changes.splice(i--, 1)\r\n\r\n }\r\n\r\n /** @private Run the next update */\r\n doNextUpdate() {\r\n\r\n // Stop if no more entries\r\n if (this.changes.length == 0) {\r\n clearInterval(this.updateTimer)\r\n this.updateTimer = null\r\n return\r\n }\r\n\r\n // Check if the first entry has passed yet\r\n let now = Date.now() + this.timeSkew\r\n if (this.changes[0].time > now)\r\n return\r\n\r\n // Get change to execute\r\n let change = this.changes.shift()\r\n\r\n // Do it on all regions\r\n for (let region of this.regions)\r\n region.updateObjects([change])\r\n\r\n // If next entry time has also passed already, don't wait, just execute\r\n if (this.changes.length > 0 && this.changes[0].time < now)\r\n this.doNextUpdate()\r\n\r\n }\r\n\r\n}","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","//\r\n// EventEmitter class - This class provides simple event functionality for classes, with Promise support.\r\n//\r\n//\tUsage for once-off event listeners:\r\n//\r\n//\t\tmyObj.when(\"closed\").then(function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage for permanent event listeners:\r\n//\r\n//\t\tmyObj.on(\"closed\", function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage when triggering an event from a subclass:\r\n//\r\n//\t\tthis.emit(\"closed\", \"customData\");\r\n//\r\n\r\nexport default class EventEmitter {\r\n\r\n\r\n\t/** Adds an event listener. If callback is null, a Promise will be returned. Note that if using the Promise\r\n\t * it will only be triggered on the first event emitted. */\r\n\twhen(eventName, callback = null) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n\t\t// Check if using promise form\r\n\t\tif (callback) {\r\n\r\n\t\t\t// Just add the callback\r\n\t\t\tthis._eventListeners[eventName].push(callback);\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Return the promise\r\n\t\t\treturn new Promise((onSuccess, onFail) => {\r\n\r\n\t\t\t\t// Promise callbacks can only be used once\r\n\t\t\t\tonSuccess._removeAfterCall = true;\r\n\r\n\t\t\t\t// Add success handler to event listener array\r\n\t\t\t\tthis._eventListeners[eventName].push(onSuccess);\r\n\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ton() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\taddEventListener() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\r\n\r\n /** Remove event listener */\r\n removeEventListener(eventName, callback) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n // Find and remove it\r\n for (var i = 0 ; i < this._eventListeners[eventName].length ; i++)\r\n if (this._eventListeners[eventName][i] == callback)\r\n this._eventListeners[eventName].splice(i--, 1)\r\n\r\n }\r\n\r\n off() {\r\n return this.removeEventListener.apply(this, arguments);\r\n }\r\n\r\n\r\n\r\n\r\n\t/** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n\temit(eventName, ...args) {\r\n\r\n\t\t// Setup the once-off promise if one of it's events were triggered\r\n\t\t//if (eventName == \"success\" || eventName == \"failed\")\r\n\t\t//\tthis._setupPromise();\r\n\r\n\t\t// Get list of callbacks\r\n\t\tvar callbacks = this._eventListeners && this._eventListeners[eventName] || [];\r\n\r\n\t\t// Call events\r\n\t\tfor (var callback of callbacks) {\r\n\r\n\t\t\t// Call it\r\n\t\t\tcallback.apply(this, args);\r\n\r\n\t\t}\r\n\r\n\t\t// Remove callbacks that can only be called once\r\n\t\tfor (var i = 0 ; i < callbacks.length ; i++)\r\n\t\t\tif (callbacks[i]._removeAfterCall)\r\n\t\t\t\tcallbacks.splice(i--, 1);\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ttrigger() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n\ttriggerEvent() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function(otherClass) {\r\n\r\n\tfor (var prop in EventEmitter.prototype)\r\n\t\tif (EventEmitter.prototype.hasOwnProperty(prop))\r\n\t\t\totherClass[prop] = EventEmitter.prototype[prop];\r\n\r\n}\r\n","/* gloabl Events */\nimport BLOCKvRegion from './BLOCKvRegion'\nimport DataObject from '../DataObject'\nimport Events from '../EventEmitter'\n\n/**\n * This region plugin provides access to a collection of vatoms that has been dropped within the specified region on the map.\n *\n * To get an instance, call `DataPool.region('geopos', { top_right: { lat: ..., lon: ... }, bottom_left: { lat: ..., lon: ... } })`\n */\nexport default class GeoPosRegion extends BLOCKvRegion {\n\n /** Plugin ID */\n static get id () { return 'geopos' }\n\n /** Constructor */\n constructor (dataPool, coordinates) {\n super(dataPool)\n\n // Don't cache this content\n this.noCache = true\n\n // Fail if coordinates are invalid\n if (!coordinates || !coordinates.top_right || !coordinates.top_right.lat || !coordinates.top_right.lon || !coordinates.bottom_left || !coordinates.bottom_left.lat || !coordinates.bottom_left.lon) {\n throw new Error('Please specify the top_right and bottom_left coordinates in the region descriptor.')\n }\n\n // Store coordinates\n this.coordinates = coordinates\n\n // Send region command to the WebSocket\n this.sendRegionCommand()\n\n // Listen for events\n this.onWebSocketOpen = this.onWebSocketOpen.bind(this)\n this.socket.addEventListener('connected', this.onWebSocketOpen)\n\n // Start refresh timer\n this.timer = setInterval(this.onTimer.bind(this), 30000)\n\n }\n\n /** Called when this region is going to be shut down */\n close () {\n super.close()\n\n // Remove listeners\n this.socket.removeEventListener('connected', this.onWebSocketOpen)\n\n // Remove timer\n clearInterval(this.timer)\n\n }\n\n /** Called on timer */\n onTimer() {\n this.forceSynchronize()\n }\n\n /** Called when the WebSocket connection re-opens */\n onWebSocketOpen () {\n\n // Full refresh this region, in case any messages were missed\n this.forceSynchronize()\n\n // Send region command again\n this.sendRegionCommand()\n\n }\n\n /** Sends the region command up the websocket to enable region monitoring */\n sendRegionCommand () {\n\n // Stop if WebSocket is not connected\n if (!this.socket.isOpen)\n return\n\n // Convert our coordinates into the ones needed by the command\n let topLeft = {\n lat: Math.max(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.min(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n let bottomRight = {\n lat: Math.min(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.max(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n\n // Create command payload\n let cmd = {\n id: '1',\n version: '1',\n type: 'command',\n cmd: 'monitor',\n payload: {\n top_left: topLeft,\n bottom_right: bottomRight\n }\n }\n\n // Send it up\n console.log('Sending WS command: ' + JSON.stringify(cmd))\n this.dataPool.Blockv.WebSockets.sendMessage(cmd)\n\n }\n\n /**\n * Returns true if the object with the specified ID exists in the cache.\n *\n * @param {*} id The object's ID\n * @returns {boolean} True if the object exists.\n */\n has (id) {\n\n // Check super implementation\n if(!super.has(id))\n return false\n \n // Check if dropped\n let object = this.objects.get(id)\n let props = object.data['vAtom::vAtomType'] || {}\n if (props.dropped && props.geo_pos && props.geo_pos.coordinates && props.geo_pos.coordinates[0])\n return true\n\n }\n\n /** Our state key is the region */\n get stateKey () {\n return 'geopos:' + this.coordinates.top_right.lat + ',' + this.coordinates.top_right.lon + ' ' + this.coordinates.bottom_left.lat + ',' + this.coordinates.bottom_left.lon\n }\n\n /** Check if a region request matches our region */\n matches (id, descriptor) {\n // Check all filters match\n if (id !== 'geopos') return false\n if (!descriptor || !descriptor.top_right || !descriptor.bottom_left) return false\n if (descriptor.top_right.lat !== this.coordinates.top_right.lat) return false\n if (descriptor.top_right.lon !== this.coordinates.top_right.lon) return false\n if (descriptor.bottom_left.lat !== this.coordinates.bottom_left.lat) return false\n if (descriptor.bottom_left.lon !== this.coordinates.bottom_left.lon) return false\n\n // Yes they do\n return true\n }\n\n /** Load current state from the server */\n async load () {\n // Pause websocket events\n this.pauseMessages()\n\n let payload = {\n top_right: this.coordinates.top_right,\n bottom_left: this.coordinates.bottom_left,\n filter: 'all',\n limit: 10000\n }\n\n if (this.coordinates.publisher_fqdn)\n payload['publisher_fqdn'] = this.coordinates.publisher_fqdn\n // Fetch data\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/geodiscover', payload, true)\n\n // Add vatom to new objects list\n let objects = []\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n\n // Resume websocket messages\n this.resumeMessages()\n\n // Return array of IDs\n return objects.map(o => o.id)\n }\n\n /** This region type should not be cached */\n save () {}\n\n /** Override to only return dropped vatoms */\n map (object) {\n\n // Check FQDN filter\n if(this.coordinates.publisher_fqdn && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].publisher_fqdn !== this.coordinates.publisher_fqdn)\n return null\n \n // Check if dropped\n let props = object.data['vAtom::vAtomType'] || {}\n if (props.dropped && props.geo_pos && props.geo_pos.coordinates && props.geo_pos.coordinates[0])\n return super.map(object)\n \n // Vatom is not dropped!\n return null\n\n }\n\n /**\n * Processes a WebSocket message.\n *\n * @private Called by BVWebSocketRegion.\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\n * @param {Object} msg The raw JSON from the websocket event message\n */\n async processMessage(msg) {\n super.processMessage(msg)\n\n // Check for map add event\n if (msg.msg_type === 'map' && msg.payload.op === 'add') {\n\n // A vatom was added to the map. Fetch vatom, add components to data pool\n let objects = []\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [msg.payload.vatom_id] }, true)\n let vatom = new DataObject('vatom', response.vatoms[0].id, response.vatoms[0])\n objects.push(vatom)\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n this.addObjects(objects)\n return\n\n } else if (msg.msg_type === 'map' && msg.payload.op === 'remove') {\n\n // A vatom was removed from the map. Undrop it\n this.preemptiveChange(msg.payload.vatom_id, 'vAtom::vAtomType.dropped', false)\n return\n\n } else if (msg.msg_type == 'state_update') {\n\n // Get vatom ID\n let vatomID = msg.payload && msg.payload.id\n if (!vatomID) {\n throw new Error(`Got websocket message with no vatom ID in it.`)\n }\n\n // Check if this is a newly dropped vatom\n let dropped = msg.payload.new_object && msg.payload.new_object['vAtom::vAtomType'] && msg.payload.new_object['vAtom::vAtomType'].dropped\n if (!dropped) {\n return\n }\n\n // Check if we already have this vatom\n if (this.objects.get(vatomID)) {\n return\n }\n\n // A new vatom was dropped! Pause WebSocket message processing\n this.pauseMessages()\n\n // Fetch vatom payload\n this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true).then(response => {\n // Add vatom to new objects list\n let objects = []\n objects.push(new DataObject('vatom', response.vatoms[0].id, response.vatoms[0]))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n }).catch(err => {\n // Log it\n console.warn(`[DataPool > GeoPosRegion] A vatom was dropped, but we could not fetch it's payload! ` + err.message)\n }).then(e => {\n // Resume message processing\n this.resumeMessages()\n })\n\n }\n }\n}\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","module.exports = {tableFormat, titleFormat};\n\nfunction tableFormat(rows, {padding=2, indent=' '}={}) {\n const columnWidths = [];\n\n rows.forEach(cells => {\n cells.forEach((cell, columnNumber) => {\n columnWidths[columnNumber] = (\n Math.max(\n getStringWidth(cell),\n columnWidths[columnNumber]||0\n )\n );\n });\n });\n\n const lines = [];\n\n rows.forEach(cells => {\n let line = indent;\n cells.forEach((cell, columnNumber) => {\n const colWidth = columnWidths[columnNumber];\n const isLastColumn = columnNumber===cells.length-1;\n const paddingRight = (\n isLastColumn ? (\n ''\n ) : (\n getBar(colWidth+padding, ' ').slice(getStringWidth(cell))\n )\n );\n line += cell + paddingRight;\n });\n lines.push(line);\n });\n\n return lines.join('\\n');\n}\n\nfunction titleFormat(title, {padding=3}={}) {\n // resolve cyclic dependency reassert => @brillout/format-text => reassert\n const assert_warning = require('reassert/warning');\n\n const min_bar_length = 40;\n title = ' '+title+' ';\n const titleWidth = getStringWidth(title);\n const barWidth = Math.max(min_bar_length, titleWidth+padding*2);\n const stringWidth = require('string-width');\n const leftWidth = Math.floor((barWidth - titleWidth) / 2);\n const bar = getBar(barWidth);\n const title_bar = getBar(leftWidth) + title + getBar(barWidth - leftWidth - titleWidth);\n assert_warning(getStringWidth(bar)===getStringWidth(title_bar));\n return (\n [\n bar,\n title_bar,\n bar,\n ].join('\\n')\n );\n}\nfunction getStringWidth(str) {\n if( ! isNodejs() ) {\n return str.length;\n }\n const stringWidth = eval('require')('string-width');\n return stringWidth(str);\n}\nfunction isNodejs() {\n return typeof process !== \"undefined\" && typeof window === \"undefined\";\n}\n\nfunction getBar(barWidth, filler='*') {\n return new Array(barWidth).fill(filler).join('');\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","/* global localStorage */\nimport EventEmitter from './EventEmitter'\nimport DataObject from './DataObject'\nimport Filter from './Filter'\nimport LZString from 'lz-string'\nimport { merge, get, set } from 'lodash'\nimport Delayer from './Delayer'\nimport LocalStorageMap from './LocalStorageMap'\n\n/**\n * Base class for a region.\n *\n * @event updated When any data in the region changes. This also indicates that there is no longer an error.\n * @event object.updated When a data object changes. Called with the ID of the changed object.\n * @event object.removed When a data object is removed. Called with the ID of the removed object.\n * @event error When an error occurs.\n * @event closed When the inventory is closed. eg. When the user is logged out\n */\nexport default class Region extends EventEmitter {\n /** @private Subclasses should use this to update and start monitoring the region */\n constructor (dataPool) {\n super()\n\n /** If true, this region will not be cached to disk. */\n this.noCache = false\n\n /** Store reference to the data pool */\n this.dataPool = dataPool\n\n /** True if data in this region is entirely in sync with the backend */\n this.synchronized = false\n\n /** If there's an error, this contains the current error. */\n this.error = null\n\n // Try to make region stable immediately\n this._syncPromise = null\n Delayer.run(e => this.synchronize())\n }\n\n /** Lazy load the objects database */\n get objects() {\n\n // Check if loaded already\n if (this._objects)\n return this._objects\n\n // Create DB\n this._objects = new LocalStorageMap(this.stateKey, this.noCache)\n return this._objects\n\n }\n\n /**\n * Re-synchronizes the region by manually fetching everything from the server again.\n */\n forceSynchronize () {\n this.synchronized = false\n return this.synchronize()\n }\n\n /**\n * This will try to make the region stable by querying the backend for all data.\n *\n * @private Called by the Region superclass.\n * @returns {Promise} Resolves once the region is in sync with the backend.\n */\n synchronize () {\n // Stop if already running\n if (this._syncPromise) { return this._syncPromise }\n\n // Remove pending error\n this.error = null\n this.emit('updated')\n\n // Stop if already in sync\n if (this.synchronized) { return Promise.resolve() }\n\n // Do the sync\n this._syncPromise = this._synchronize().catch(err => {\n // Error handling, notify listeners of an error\n this._syncPromise = null\n this.error = err\n console.error(err)\n this.emit('error', err)\n })\n\n // Return promise\n return this._syncPromise\n\n }\n\n async _synchronize() {\n\n // Sync start\n console.log(`[DataPool > Region] Starting synchronization for region ${this.stateKey}`)\n\n // Create and load the database\n await this.objects.load()\n this.emit('updated')\n\n // Allow plugin to start loading content\n let loadedIDs = await this.load()\n\n // If the subclass load() returned an array of IDs, we can remove everything which is not in that list.\n if (loadedIDs && typeof loadedIDs.length === 'number') {\n\n let keysToRemove = []\n for (let id of this.objects.keys()) {\n\n // Skip 'extra' keys used internally for sync state vars\n if (id.startsWith('extra:')) continue\n\n // Check if it's in our list\n if (!loadedIDs.includes(id)) { keysToRemove.push(id) }\n\n }\n\n // Remove vatoms\n this.removeObjects(keysToRemove)\n \n }\n\n // All data is up to date!\n this.synchronized = true\n this._syncPromise = null\n this.emit('updated')\n console.log(`[DataPool > Region] Region '${this.stateKey}' is now in sync!`)\n \n }\n\n /**\n * A key which is unique for this exact region. This is used when saving/restoring state to disk.\n *\n * @abstract Subclasses should override this.\n * @returns {String} The state key.\n */\n get stateKey () {\n throw new Error(`Subclasses must override 'get stateKey()' in order to correctly handle saving/restoring state to disk.`)\n }\n\n /**\n * Start initial load. This should resolve once the region is up to date.\n *\n * @private Called by the Region superclass.\n * @abstract Subclasses should override this.\n * @returns {Promise<>} Once this promise resolves, the region should be stable.\n */\n async load () {\n throw new Error(`Subclasses must override Region.load()`)\n }\n\n /**\n * Stop and destroy this region.\n *\n * @abstract Subclasses should override this, but call super.close()\n */\n close () {\n // Notify data pool we have closed\n this.dataPool.removeRegion(this)\n this.emit('closed')\n }\n\n /**\n * Checks if the specified query matches our region. This is used to identify if a region request\n * can be satisfied by this region, or if a new region should be created.\n *\n * @private Called by DataPool.\n * @abstract Subclasses should override this.\n * @param {string} id The region plugin ID\n * @param {*} descriptor The region-specific filter data.\n */\n matches (id, descriptor) {\n throw new Error('Subclasses must override Region.matches()')\n }\n\n /**\n * Stores a collection of data objects which have been added to the pool.\n *\n * @private Called by subclasses.\n * @param {DataObject[]} objects List of new data objects added to the pool.\n */\n addObjects (objects) {\n\n // Go through each object\n for (let obj of objects) {\n\n // Check if object exists already\n let existingObject = this.objects.get(obj.id)\n if (existingObject) {\n\n // Notify\n this.willUpdateFields(existingObject, obj.data)\n\n // It exists already, update the object\n existingObject.data = obj.data\n existingObject.cached = null\n\n // Update database copy\n this.objects.set(obj.id, obj)\n\n } else {\n\n // Notify\n this.willAdd(obj)\n\n // It does not exist, add it\n this.objects.set(obj.id, obj)\n\n }\n\n // Emit event, on next run loop so all objects are added first\n Delayer.run(e => this.emit('object.updated', obj.id))\n\n }\n\n // Notify updated\n if (objects.length > 0) \n this.emit('updated')\n\n }\n\n /**\n * Updates data objects within our pool.\n *\n * @private Called by subclasses\n * @param {Object[]} objects An array of changes. Each object contains an `id` string and a `new_data` sparse object containing the changed fields.\n */\n updateObjects (objects) {\n // Go through each object\n let didUpdate = false\n for (let obj of objects) {\n // Fetch existing object\n let existingObject = this.objects.get(obj.id)\n if (!existingObject) { continue }\n\n // Stop if existing object doesn't have the full data\n if (!existingObject.data) { continue }\n\n // Notify\n this.willUpdateFields(existingObject, obj.new_data)\n\n // Update fields\n merge(existingObject.data, obj.new_data)\n\n // Clear cached values\n existingObject.cached = null\n\n // Emit event, on next run loop so all objects are updated first\n Delayer.run(e => this.emit('object.updated', obj.id))\n didUpdate = true\n }\n\n // Notify updated\n if (didUpdate) { this.emit('updated') }\n }\n\n /**\n * Removes the specified objects from our pool.\n *\n * @private Called by subclasses.\n * @param {String[]} ids An array of object IDs to remove.\n */\n removeObjects (ids) {\n // Remove all data objects with the specified IDs\n let didUpdate = false\n for (let id of ids) {\n // Notify\n this.willRemove(id)\n\n // Remove it\n if (this.objects.delete(id)) {\n // Emit event, on next run loop so all objects are updated first\n Delayer.run(e => this.emit('object.removed', id))\n didUpdate = true\n }\n }\n\n // Notify updated\n if (didUpdate) { this.emit('updated') }\n }\n\n /**\n * If a region plugin depends on the session data, it may override this method and `this.close()` itself if needed.\n *\n * @private Called by DataPool.\n * @abstract Subclasses can override this if they want.\n * @param {*} info The new session info.\n */\n onSessionInfoChanged (info) {}\n\n /**\n * If the plugin wants, it can map DataObjects to another type. This takes in a DataObject and returns a new type.\n * If you return null, the specified data object will not be returned.\n *\n * The default implementation simply returns the DataObject.\n *\n * @param {DataObject} object The input raw object\n * @returns {*} The output object.\n */\n map (object) {\n return object\n }\n\n /**\n * Iterate over each object in this region. Return `false` from the callback to stop. This does not wait\n * for the region to synchronize. This is a synchronous function.\n *\n * @param {Function(*)} callback Gets called once for each objbect in the region.\n */\n forEach (callback) {\n // Go through all data objects\n for (let object of this.objects.values()) {\n // Check for cached object\n let mapped = object.cached\n\n // Check if no cached object\n if (!mapped) {\n // Map to the plugin's intended type\n object.cached = mapped = this.map(object)\n }\n\n // Stop if no mapped object\n if (!mapped) { continue }\n\n // Call callback, stop if they returned false\n if (callback(mapped) === false) { break }\n }\n }\n\n /**\n * Returns all the objects within this region.\n *\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\n */\n get (waitUntilStable = true) {\n // Synchronize now\n if (waitUntilStable) {\n return this.synchronize().then(e => this.get(false))\n }\n\n // Create an array of all data objects\n let items = []\n for (let object of this.objects.values()) {\n // Check for cached object\n if (object.cached) {\n items.push(object.cached)\n continue\n }\n\n // Map to the plugin's intended type\n let mapped = this.map(object)\n if (!mapped) {\n continue\n }\n\n // Cache it\n object.cached = mapped\n\n // Add to list\n items.push(mapped)\n }\n\n // Done\n return items\n }\n\n /**\n * Returns an object within this region by it's ID.\n *\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\n * @returns {Promise<Object>} An object in this region. If `waitUntilStable` is false, returns immediately (without the promise).\n */\n getItem (id, waitUntilStable = true) {\n // Synchronize now\n if (waitUntilStable) {\n return this.synchronize().then(e => this.getItem(id, false))\n }\n\n // Get object\n let object = this.objects.get(id)\n if (!object) {\n return null\n }\n\n // Check for cached object\n if (object.cached) { return object.cached }\n\n // Map to the plugin's intended type\n let mapped = this.map(object)\n if (!mapped) { return null }\n\n // Cache it\n object.cached = mapped\n\n // Done\n return mapped\n }\n\n /**\n * Returns true if the object with the specified ID exists in the cache.\n *\n * @param {*} id The object's ID\n * @returns {boolean} True if the object exists.\n */\n has (id) {\n return this.objects.has(id)\n }\n\n /**\n * Change a field, and return a function which can be called to undo the change.\n *\n * @param {String} id Object ID\n * @param {String} keyPath The key to change\n * @param {*} value The new value\n * @returns {Function} An undo function\n */\n preemptiveChange (id, keyPath, value) {\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\n let object = this.objects.get(id)\n if (!object) { return function () {} }\n\n // Get current value\n let oldValue = get(object.data, keyPath)\n\n // Notify\n this.willUpdateField(object, keyPath, oldValue, value)\n\n // Update to new value\n set(object.data, keyPath, value)\n object.cached = null\n this.emit('object.updated', id)\n this.emit('updated')\n\n // Notify database of change\n this.objects.set(id, object)\n\n // Return undo function\n return e => {\n // Notify\n this.willUpdateField(object, keyPath, value, oldValue)\n\n // Revert\n set(object.data, keyPath, oldValue)\n object.cached = null\n this.emit('object.updated', id)\n this.emit('updated')\n\n // Notify database of change\n this.objects.set(id, object)\n }\n }\n\n /**\n * Remove an object, and return an undo function.\n *\n * @param {String} id The ID of the object to remove.\n * @returns {Function} An undo function\n */\n preemptiveRemove (id) {\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\n let object = this.objects.get(id)\n if (!object) { return function () {} }\n\n // Notify\n this.willRemove(object)\n\n // Remove object\n this.objects.delete(id)\n this.emit('updated')\n\n // Return undo function\n return e => {\n // Check that a new object wasn't added in the mean time\n if (this.objects.has(id)) { return }\n\n // Notify\n this.willAdd(object)\n\n // Revert\n this.addObjects([object])\n }\n }\n\n /**\n * Create a filter\n *\n * @param {String} keyPath The data path to check\n * @param {*} value The value to check for\n * @returns {Filter} The filtered region\n */\n filter (keyPath, value) {\n return new Filter(this, keyPath, value)\n }\n\n /**\n * Called when an object is about to be added.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be added.\n */\n willAdd (object) {}\n\n /**\n * Called when an object is about to be updated.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be updated.\n * @param {Object} newData The sparse object containing the changed fields\n */\n willUpdateFields (object, newData) {}\n\n /**\n * Called when an object is about to be updated.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be updated.\n * @param {String} keyPath The field which will be changed.\n * @param {*} oldValue The current field value.\n * @param {*} newValue The new field value.\n */\n willUpdateField (object, keyPath, oldValue, newValue) {}\n\n /**\n * Called when an object is about to be removed.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\n */\n willRemove (objectOrID) {}\n}\n","\r\nimport { get } from 'lodash'\r\n\r\n/**\r\n * A Filter exposes the same functions as a Region, except the returned data is filtered by the specified key.\r\n */\r\nexport default class Filter {\r\n\r\n /** Constructor */\r\n constructor(region, keyPath, value) {\r\n\r\n // Store values\r\n this.region = region\r\n this.keyPath = keyPath\r\n this.value = value\r\n\r\n }\r\n\r\n /** Passthrough */\r\n get objects() {\r\n return this.region.objects\r\n }\r\n\r\n /** Passthrough */\r\n synchronize() {\r\n return this.region.synchronize()\r\n }\r\n\r\n /** Passthrough */\r\n getItem(id, waitUntilStable = true) {\r\n return this.region.getItem(id, waitUntilStable)\r\n }\r\n\r\n /** Passthrough */\r\n map(object) {\r\n return this.region.map(object)\r\n }\r\n\r\n /**\r\n * Returns all the objects within this region, filtered by this filter.\r\n * \r\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\r\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\r\n */\r\n get(waitUntilStable = true) {\r\n\r\n // Synchronize now\r\n if (waitUntilStable)\r\n return this.synchronize().then(e => this.get(false))\r\n\r\n // Create an array of all data objects\r\n let items = []\r\n for (let object of this.objects.values()) {\r\n\r\n // Check filtered value\r\n let value = get(object.data, this.keyPath)\r\n if (value != this.value)\r\n continue\r\n\r\n // Check for cached object\r\n if (object.cached) {\r\n items.push(object.cached)\r\n continue\r\n }\r\n\r\n // Map to the plugin's intended type\r\n let mapped = this.map(object)\r\n if (!mapped)\r\n continue\r\n\r\n // Cache it\r\n object.cached = mapped\r\n\r\n // Add to list\r\n items.push(mapped)\r\n\r\n }\r\n\r\n // Done\r\n return items\r\n\r\n }\r\n\r\n /** \r\n * Create a filter.\r\n * \r\n * @param {String} keyPath The data path to check\r\n * @param {*} value The value to check for\r\n * @returns {Filter} The filtered region\r\n */\r\n // TODO: Implement subfiltering\r\n // filter(keyPath, value) {\r\n // return new Filter(this, keyPath, value)\r\n // }\r\n\r\n}","import DataObject from './DataObject'\r\nimport LZUTF8 from 'lzutf8'\r\nimport LZUTF8WorkerScript from './LZUTF8WorkerScript.js'\r\n\r\n/** \r\n * A version of the built-in Map class, but which synchronizes to localStorage for offline access. Key must be a string,\r\n * and value must be a DataObject.\r\n */\r\nexport default class Database {\r\n\r\n constructor(id, noStore) {\r\n\r\n // Store ID\r\n this.id = id\r\n this.noStore = noStore\r\n\r\n // Local cache of objects\r\n this.cache = new Map()\r\n\r\n }\r\n\r\n /** Load documents from storage. This must be called before the map can be used correctly. */\r\n async load() {\r\n \r\n // Only do once\r\n if (this.loaded) return\r\n this.loaded = true\r\n\r\n try {\r\n\r\n // Stop if no store\r\n if (this.noStore)\r\n return\r\n\r\n // Fetch compressed data\r\n let compressed = localStorage['sync.' + this.id]\r\n if (!compressed)\r\n return\r\n\r\n // Apply worker script if possible\r\n if (window.Blob && window.URL && window.Worker) {\r\n\r\n // Worker available\r\n let blob = new Blob([atob(LZUTF8WorkerScript)])\r\n let url = URL.createObjectURL(blob)\r\n LZUTF8.WebWorker.scriptURI = url\r\n\r\n } else {\r\n\r\n // Worker not available\r\n console.warn(`[DataPool > LocalStorageMap] Web worker unavailable, app performance may suffer while saving or loading.`)\r\n\r\n }\r\n\r\n // Decompress it\r\n // TODO: Ensure it's using a worker\r\n let startTime = Date.now()\r\n let uncompressed = await new Promise((resolve, reject) => {\r\n LZUTF8.decompressAsync(compressed, { inputEncoding: \"StorageBinaryString\" }, (result, error) => {\r\n if (error) reject(error)\r\n else resolve(result)\r\n })\r\n })\r\n\r\n // Store each item in the memory cache\r\n let rows = JSON.parse(uncompressed)\r\n for (let row of rows) {\r\n\r\n // Create and cache the DataObject\r\n let obj = new DataObject(row.type, row.id, row.data)\r\n this.cache.set(row.id, obj)\r\n\r\n }\r\n\r\n // Done!\r\n console.debug(`[DataPool > LocalStorageMap] Loaded ${rows.length} items from ${Math.floor(uncompressed.length / 1024)} KB of data (from ${Math.floor(compressed.length / 1024)} KB compressed) in ${Date.now() - startTime} ms`)\r\n\r\n } catch (err) {\r\n\r\n // Failed to load cached items\r\n console.warn(`[DataPool > LocalStorageMap] Unable to load cached items: ${err.message}`)\r\n\r\n }\r\n\r\n }\r\n\r\n /** Passthrough getter functions, these don't modify the database */\r\n get size() { return this.cache.size }\r\n entries() { return this.cache.entries() }\r\n forEach(callback, thisValue) { return this.cache.forEach(callback, thisValue) }\r\n get(key) { return this.cache.get(key) }\r\n has(key) { return this.cache.has(key) }\r\n keys() { return this.cache.keys() }\r\n values() { return this.cache.values() }\r\n [Symbol.iterator]() { return this.cache[Symbol.iterator]() }\r\n\r\n clear() {\r\n\r\n // Clear the array\r\n this.cache.clear()\r\n\r\n // Save soon\r\n this.saveSoon()\r\n\r\n }\r\n\r\n delete(key) {\r\n\r\n // Delete item\r\n let found = this.cache.delete(key)\r\n\r\n // Save soon\r\n if (found)\r\n this.saveSoon()\r\n\r\n // Done\r\n return found\r\n\r\n }\r\n\r\n /** Set a value. `value` must be a DataObject. */\r\n set(key, value) {\r\n\r\n // Set it in the memory cache\r\n this.cache.set(key, value)\r\n\r\n // Save soon\r\n this.saveSoon()\r\n\r\n }\r\n\r\n /** Get a string extra value */\r\n getExtra(key) {\r\n\r\n // Get item\r\n let itm = this.get('extra:' + key)\r\n if (itm)\r\n return itm.data\r\n else\r\n return null\r\n\r\n }\r\n\r\n /** Set a string extra */\r\n setExtra(key, value) {\r\n\r\n // Set item if it's changed\r\n if (this.getExtra(key) != value)\r\n this.set('extra:' + key, { type: '_extra', data: value })\r\n\r\n }\r\n\r\n /** @private Save changes soon */\r\n saveSoon() {\r\n\r\n // If web workers are supported, save as quick as possible. If not, add a delay to prevent freezing the browser main thread.\r\n let saveInterval = window.Worker ? 100 : 2000\r\n\r\n // Start a timer to save soon, unless one exists already\r\n if (!this.saveTimer) {\r\n\r\n // Create save timer\r\n this.saveTimer = setTimeout(this.save.bind(this), saveInterval)\r\n\r\n } else {\r\n\r\n // Changes still occurring, schedule another save\r\n this.changesStillOccurring = true\r\n\r\n }\r\n\r\n }\r\n\r\n /** @private Save to local storage now */\r\n async save() {\r\n\r\n // Stop if changes are still occurring\r\n if (this.changesStillOccurring) {\r\n\r\n // Wait until it stops\r\n this.saveTimer = null\r\n this.saveSoon()\r\n this.changesStillOccurring = false\r\n return\r\n\r\n }\r\n\r\n // Catch errors\r\n try {\r\n\r\n // Stop if no store\r\n if (this.noStore)\r\n return\r\n\r\n // Serialize data\r\n let startedAt = Date.now()\r\n let items = []\r\n this.cache.forEach((obj, id) => {\r\n items.push({ id, type: obj.type, data: obj.data })\r\n })\r\n let uncompressed = JSON.stringify(items)\r\n\r\n // Compress it\r\n let compressed = await new Promise((resolve, reject) => {\r\n LZUTF8.compressAsync(uncompressed, { outputEncoding: \"StorageBinaryString\" }, (result, error) => {\r\n if (error) reject(error)\r\n else resolve(result)\r\n })\r\n })\r\n\r\n // Save to storage\r\n localStorage['sync.' + this.id] = compressed\r\n\r\n // Done!\r\n console.debug(`[DataPool > LocalStorageMap] Saved ${items.length} items, using ${Math.floor(compressed.length / 1024)} KB of data (${Math.floor(uncompressed.length / 1024)} KB uncompressed) in ${Date.now() - startedAt} ms`)\r\n\r\n } catch (err) {\r\n\r\n // Failed!\r\n console.warn(`[DataPool > LocalStorageMap] Failed to save! ${err.message}`)\r\n\r\n }\r\n\r\n // Remove save timer\r\n this.saveTimer = null\r\n\r\n // If changes occurred during the save, save again\r\n if (this.changesStillOccurring) {\r\n this.changesStillOccurring = false\r\n this.saveSoon()\r\n }\r\n\r\n }\r\n\r\n}","export default `dmFyIExaVVRGODtpZighZnVuY3Rpb24obil7bi5ydW5uaW5nSW5Ob2RlSlM9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3MmJiJvYmplY3QiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmInN0cmluZyI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGV9LG4ucnVubmluZ0luTWFpbk5vZGVKU01vZHVsZT1mdW5jdGlvbigpe3JldHVybiBuLnJ1bm5pbmdJbk5vZGVKUygpJiZyZXF1aXJlLm1haW49PT1tb2R1bGV9LG4uY29tbW9uSlNBdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0c30sbi5ydW5uaW5nSW5XZWJXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5jbG9zZX0sbi5ydW5uaW5nSW5Ob2RlQ2hpbGRQcm9jZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucnVubmluZ0luTm9kZUpTKCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBwcm9jZXNzLnNlbmR9LG4ucnVubmluZ0luTnVsbE9yaWdpbj1mdW5jdGlvbigpe3JldHVybiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdy5sb2NhdGlvbiYmKCJodHRwOiIhPT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCYmImh0dHBzOiIhPT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCl9LG4ud2ViV29ya2Vyc0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXb3JrZXImJiFuLnJ1bm5pbmdJbk51bGxPcmlnaW4oKSYmKCFuLnJ1bm5pbmdJbk5vZGVKUygpJiYhKG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJBbmRyb2lkIDQuMyIpKSl9LG4ubG9nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmKGNvbnNvbGUubG9nKGUpLHQmJiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJihkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9ZSsiPGJyLz4iKSl9LG4uY3JlYXRlRXJyb3JNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9IlVuaGFuZGxlZCBleGNlcHRpb24iKSxudWxsPT1lKXJldHVybiB0O2lmKHQrPSI6ICIsIm9iamVjdCIhPXR5cGVvZiBlLmNvbnRlbnQpcmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLmNvbnRlbnQ/dCtlLmNvbnRlbnQ6dCtlO2lmKG4ucnVubmluZ0luTm9kZUpTKCkpcmV0dXJuIHQrZS5jb250ZW50LnN0YWNrO3ZhciByPUpTT04uc3RyaW5naWZ5KGUuY29udGVudCk7cmV0dXJuInt9IiE9PXI/dCtyOnQrZS5jb250ZW50fSxuLnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSJVbmhhbmRsZWQgZXhjZXB0aW9uIiksbi5sb2cobi5jcmVhdGVFcnJvck1lc3NhZ2UoZSx0KSl9LG4uZ2V0R2xvYmFsT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJvYmplY3QiPT10eXBlb2Ygd2luZG93P3dpbmRvdzoib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjp7fX0sbi50b1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG4uY29tbW9uSlNBdmFpbGFibGUoKSYmKG1vZHVsZS5leHBvcnRzPW4pfShMWlVURjg9TFpVVEY4fHx7fSksImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkmJjAhPT1uZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxKS5ieXRlTGVuZ3RoKXt2YXIgc3ViYXJyYXk9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZTx0P3Q6cjxlP3I6ZX1lfD0wLHR8PTAsYXJndW1lbnRzLmxlbmd0aDwxJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDImJih0PXRoaXMubGVuZ3RoKSxlPDAmJihlPXRoaXMubGVuZ3RoK2UpLHQ8MCYmKHQ9dGhpcy5sZW5ndGgrdCksZT1yKGUsMCx0aGlzLmxlbmd0aCk7dmFyIG49KHQ9cih0LDAsdGhpcy5sZW5ndGgpKS1lO3JldHVybiBuPDAmJihuPTApLG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYnVmZmVyLHRoaXMuYnl0ZU9mZnNldCtlKnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbil9LHR5cGVzPVsiSW50OEFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5Il0sZ2xvYmFsT2JqZWN0PXZvaWQgMDtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz9nbG9iYWxPYmplY3Q9d2luZG93OiJvYmplY3QiPT10eXBlb2Ygc2VsZiYmKGdsb2JhbE9iamVjdD1zZWxmKSx2b2lkIDAhPT1nbG9iYWxPYmplY3QpZm9yKHZhciBpPTA7aTx0eXBlcy5sZW5ndGg7aSsrKWdsb2JhbE9iamVjdFt0eXBlc1tpXV0mJihnbG9iYWxPYmplY3RbdHlwZXNbaV1dLnByb3RvdHlwZS5zdWJhcnJheT1zdWJhcnJheSl9IWZ1bmN0aW9uKGYpe3ZhciBlPSh0LmNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLG8pe3ZhciBpPW5ldyBmLlRpbWVyLHU9bmV3IGYuQ29tcHJlc3NvcjtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlbiIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSllPWYuZW5jb2RlVVRGOChlKTtlbHNlIGlmKG51bGw9PWV8fCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXJldHVybiB2b2lkIG8odm9pZCAwLG5ldyBUeXBlRXJyb3IoImNvbXByZXNzQXN5bmM6IEludmFsaWQgaW5wdXQgYXJndW1lbnQsIG9ubHkgJ3N0cmluZycgYW5kICdVaW50OEFycmF5JyBhcmUgc3VwcG9ydGVkIikpO3ZhciBzPWYuQXJyYXlUb29scy5zcGxpdEJ5dGVBcnJheShlLG4uYmxvY2tTaXplKSxhPVtdLGM9ZnVuY3Rpb24oZSl7aWYoZTxzLmxlbmd0aCl7dmFyIHQ9dm9pZCAwO3RyeXt0PXUuY29tcHJlc3NCbG9jayhzW2VdKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1hLnB1c2godCksaS5nZXRFbGFwc2VkVGltZSgpPD0yMD9jKGUrMSk6KGYuZW5xdWV1ZUltbWVkaWF0ZShmdW5jdGlvbigpe3JldHVybiBjKGUrMSl9KSxpLnJlc3RhcnQoKSl9ZWxzZXt2YXIgcj1mLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoYSk7Zi5lbnF1ZXVlSW1tZWRpYXRlKGZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9Zi5Db21wcmVzc2lvbkNvbW1vbi5lbmNvZGVDb21wcmVzc2VkQnl0ZXMocixuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1mLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gbyhlKX0pfSl9fTtmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYygwKX0pfSx0LmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7dmFyIG89bmV3IGYuQ29tcHJlc3NvcixpPW5ldyhyZXF1aXJlKCJzdHJlYW0iKS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gaS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjt0cnl7bj1mLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihvLmNvbXByZXNzQmxvY2soZi5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoZSkpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBpLmVtaXQoImVycm9yIixlKX1pLnB1c2gobikscigpfSxpfSx0KTtmdW5jdGlvbiB0KCl7fWYuQXN5bmNDb21wcmVzc29yPWV9KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihmKXt2YXIgZT0odC5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLG8pe2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoImRlY29tcHJlc3NBc3luYzogTm8gY2FsbGJhY2sgYXJndW1lbnQgZ2l2ZW4iKTt2YXIgaT1uZXcgZi5UaW1lcjt0cnl7ZT1mLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyhlLG4uaW5wdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbyh2b2lkIDAsZSl9dmFyIHU9bmV3IGYuRGVjb21wcmVzc29yLHM9Zi5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KGUsbi5ibG9ja1NpemUpLGE9W10sYz1mdW5jdGlvbihlKXtpZihlPHMubGVuZ3RoKXt2YXIgdD12b2lkIDA7dHJ5e3Q9dS5kZWNvbXByZXNzQmxvY2soc1tlXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbyh2b2lkIDAsZSl9YS5wdXNoKHQpLGkuZ2V0RWxhcHNlZFRpbWUoKTw9MjA/YyhlKzEpOihmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYyhlKzEpfSksaS5yZXN0YXJ0KCkpfWVsc2V7dmFyIHI9Zi5BcnJheVRvb2xzLmNvbmNhdFVpbnQ4QXJyYXlzKGEpO2YuZW5xdWV1ZUltbWVkaWF0ZShmdW5jdGlvbigpe3ZhciBlO3RyeXtlPWYuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXMocixuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1mLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gbyhlKX0pfSl9fTtmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYygwKX0pfSx0LmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXt2YXIgbz1uZXcgZi5EZWNvbXByZXNzb3IsaT1uZXcocmVxdWlyZSgic3RyZWFtIikuVHJhbnNmb3JtKSh7ZGVjb2RlU3RyaW5nczohMCxoaWdoV2F0ZXJNYXJrOjY1NTM2fSk7cmV0dXJuIGkuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7dmFyIG47dHJ5e249Zi5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIoby5kZWNvbXByZXNzQmxvY2soZi5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoZSkpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBpLmVtaXQoImVycm9yIixlKX1pLnB1c2gobikscigpfSxpfSx0KTtmdW5jdGlvbiB0KCl7fWYuQXN5bmNEZWNvbXByZXNzb3I9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGkpe3ZhciBlLHU7KHU9ZT1pLldlYldvcmtlcnx8KGkuV2ViV29ya2VyPXt9KSkuY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7aWYoIkJ5dGVBcnJheSIhPXQuaW5wdXRFbmNvZGluZ3x8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciBuPXt0b2tlbjpNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksdHlwZToiY29tcHJlc3MiLGRhdGE6ZSxpbnB1dEVuY29kaW5nOnQuaW5wdXRFbmNvZGluZyxvdXRwdXRFbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTt0JiZ0LnRva2VuPT1uLnRva2VuJiYodS5nbG9iYWxXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksImVycm9yIj09dC50eXBlP3Iodm9pZCAwLG5ldyBFcnJvcih0LmVycm9yKSk6cih0LmRhdGEpKX07dS5nbG9iYWxXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdS5nbG9iYWxXb3JrZXIucG9zdE1lc3NhZ2UobixbXSl9ZWxzZSByKHZvaWQgMCxuZXcgVHlwZUVycm9yKCJjb21wcmVzc0FzeW5jOiBpbnB1dCBpcyBub3QgYSBVaW50OEFycmF5IikpfSx1LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7dmFyIG49e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOiJkZWNvbXByZXNzIixkYXRhOmUsaW5wdXRFbmNvZGluZzp0LmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30sbz1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dCYmdC50b2tlbj09bi50b2tlbiYmKHUuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLCJlcnJvciI9PXQudHlwZT9yKHZvaWQgMCxuZXcgRXJyb3IodC5lcnJvcikpOnIodC5kYXRhKSl9O3UuZ2xvYmFsV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHUuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG4sW10pfSx1Lmluc3RhbGxXZWJXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpeyJvYmplY3QiPT10eXBlb2Ygc2VsZiYmdm9pZCAwPT09c2VsZi5kb2N1bWVudCYmbnVsbCE9c2VsZi5hZGRFdmVudExpc3RlbmVyJiYoc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7aWYoImNvbXByZXNzIj09dC50eXBlKXt2YXIgcj12b2lkIDA7dHJ5e3I9aS5jb21wcmVzcyh0LmRhdGEse291dHB1dEVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaChlKXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjp0LnRva2VuLHR5cGU6ImVycm9yIixlcnJvcjppLmNyZWF0ZUVycm9yTWVzc2FnZShlKX0sW10pfShuPXt0b2tlbjp0LnRva2VuLHR5cGU6ImNvbXByZXNzaW9uUmVzdWx0IixkYXRhOnIsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pLmRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYtMT09PW5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUgMTAiKT9zZWxmLnBvc3RNZXNzYWdlKG4sW24uZGF0YS5idWZmZXJdKTpzZWxmLnBvc3RNZXNzYWdlKG4sW10pfWVsc2UgaWYoImRlY29tcHJlc3MiPT10LnR5cGUpe3ZhciBuLG89dm9pZCAwO3RyeXtvPWkuZGVjb21wcmVzcyh0LmRhdGEse2lucHV0RW5jb2Rpbmc6dC5pbnB1dEVuY29kaW5nLG91dHB1dEVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaChlKXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjp0LnRva2VuLHR5cGU6ImVycm9yIixlcnJvcjppLmNyZWF0ZUVycm9yTWVzc2FnZShlKX0sW10pfShuPXt0b2tlbjp0LnRva2VuLHR5cGU6ImRlY29tcHJlc3Npb25SZXN1bHQiLGRhdGE6byxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSAxMCIpP3NlbGYucG9zdE1lc3NhZ2Uobixbbi5kYXRhLmJ1ZmZlcl0pOnNlbGYucG9zdE1lc3NhZ2UobixbXSl9fSksc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oZSl7aS5sb2coaS5jcmVhdGVFcnJvck1lc3NhZ2UoZS5lcnJvciwiVW5leHBlY3RlZCBMWlVURjggV2ViV29ya2VyIGV4Y2VwdGlvbiIpKX0pKX0sdS5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHUuZ2xvYmFsV29ya2VyKXJldHVybiEwO2lmKCFpLndlYldvcmtlcnNBdmFpbGFibGUoKSlyZXR1cm4hMTtpZighdS5zY3JpcHRVUkkmJiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsenV0ZjgiKTtudWxsIT1lJiYodS5zY3JpcHRVUkk9ZS5nZXRBdHRyaWJ1dGUoInNyYyIpfHx2b2lkIDApfXJldHVybiEhdS5zY3JpcHRVUkkmJih1Lmdsb2JhbFdvcmtlcj1uZXcgV29ya2VyKHUuc2NyaXB0VVJJKSwhMCl9LHUudGVybWluYXRlPWZ1bmN0aW9uKCl7dS5nbG9iYWxXb3JrZXImJih1Lmdsb2JhbFdvcmtlci50ZXJtaW5hdGUoKSx1Lmdsb2JhbFdvcmtlcj12b2lkIDApfSxlLmluc3RhbGxXZWJXb3JrZXJJZk5lZWRlZCgpfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQ9KHIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK2VdfSxyLnByb3RvdHlwZS5nZXRJblJldmVyc2VkT3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbit0aGlzLmxlbmd0aC0xLWVdfSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV09dH0scik7ZnVuY3Rpb24gcihlLHQscil7dGhpcy5jb250YWluZXI9ZSx0aGlzLnN0YXJ0UG9zaXRpb249dCx0aGlzLmxlbmd0aD1yfWUuQXJyYXlTZWdtZW50PXR9KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihlKXt2YXIgdDsodD1lLkFycmF5VG9vbHN8fChlLkFycmF5VG9vbHM9e30pKS5jb3B5RWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIsbixvKXtmb3IoO28tLTspcltuKytdPWVbdCsrXX0sdC56ZXJvRWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcig7ci0tOyllW3QrK109MH0sdC5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiZ0Kys7cmV0dXJuIHR9LHQudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8PXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRydW5jYXRlU3RhcnRpbmdFbGVtZW50czogUmVxdWVzdGVkIGxlbmd0aCBzaG91bGQgYmUgc21hbGxlciB0aGFuIGFycmF5IGxlbmd0aCIpO2Zvcih2YXIgcj1lLmxlbmd0aC10LG49MDtuPHQ7bisrKWVbbl09ZVtyK25dO2UubGVuZ3RoPXR9LHQuZG91YmxlQnl0ZUFycmF5Q2FwYWNpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7cmV0dXJuIHQuc2V0KGUpLHR9LHQuY29uY2F0VWludDhBcnJheXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0wLG49ZTtyPG4ubGVuZ3RoO3IrKyl7dCs9KGE9bltyXSkubGVuZ3RofWZvcih2YXIgbz1uZXcgVWludDhBcnJheSh0KSxpPTAsdT0wLHM9ZTt1PHMubGVuZ3RoO3UrKyl7dmFyIGE9c1t1XTtvLnNldChhLGkpLGkrPWEubGVuZ3RofXJldHVybiBvfSx0LnNwbGl0Qnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPGUubGVuZ3RoOyl7dmFyIG89TWF0aC5taW4odCxlLmxlbmd0aC1uKTtyLnB1c2goZS5zdWJhcnJheShuLG4rbykpLG4rPW99cmV0dXJuIHJ9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9ZS5CdWZmZXJUb29sc3x8KGUuQnVmZmVyVG9vbHM9e30pKS5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKGUpP3QuYnVmZmVyVG9VaW50OEFycmF5KGUpOmV9LHQudWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe2lmKEJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXt2YXIgdD1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsQnVmZmVyLnByb3RvdHlwZSksdH1mb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQnVmZmVyKHIpLG89MDtvPHI7bysrKW5bb109ZVtvXTtyZXR1cm4gbn0sdC5idWZmZXJUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24oZSl7aWYoQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn19KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihvKXt2YXIgZTsoZT1vLkNvbXByZXNzaW9uQ29tbW9ufHwoby5Db21wcmVzc2lvbkNvbW1vbj17fSkpLmdldENyb3BwZWRCdWZmZXI9ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49MCk7dmFyIG89bmV3IFVpbnQ4QXJyYXkocituKTtyZXR1cm4gby5zZXQoZS5zdWJhcnJheSh0LHQrcikpLG99LGUuZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBvLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW2Uuc3ViYXJyYXkodCx0K3IpLG5dKX0sZS5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZzogaW5wdXQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIlN0cmluZyI7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJmdW5jdGlvbiI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcihlKSlyZXR1cm4iQnl0ZUFycmF5Ijt0aHJvdyBuZXcgVHlwZUVycm9yKCJkZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nOiBpbnB1dCBtdXN0IGJlIG9mIHR5cGUgJ3N0cmluZycsICdVaW50OEFycmF5JyBvciAnQnVmZmVyJyIpfSxlLmVuY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkJ5dGVBcnJheSI6cmV0dXJuIGU7Y2FzZSJCdWZmZXIiOnJldHVybiBvLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKTtjYXNlIkJhc2U2NCI6cmV0dXJuIG8uZW5jb2RlQmFzZTY0KGUpO2Nhc2UiQmluYXJ5U3RyaW5nIjpyZXR1cm4gby5lbmNvZGVCaW5hcnlTdHJpbmcoZSk7Y2FzZSJTdG9yYWdlQmluYXJ5U3RyaW5nIjpyZXR1cm4gby5lbmNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RlQ29tcHJlc3NlZEJ5dGVzOiBpbnZhbGlkIG91dHB1dCBlbmNvZGluZyByZXF1ZXN0ZWQiKX19LGUuZGVjb2RlQ29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvZGVDb21wcmVzc2VkRGF0YTogSW5wdXQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtzd2l0Y2godCl7Y2FzZSJCeXRlQXJyYXkiOmNhc2UiQnVmZmVyIjp2YXIgcj1vLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZChlKTtpZighKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ0J5dGVBcnJheScgb3IgJ0J1ZmZlcicgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBVaW50OEFycmF5IG9yIEJ1ZmZlciIpO3JldHVybiByO2Nhc2UiQmFzZTY0IjppZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCYXNlNjQnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIG8uZGVjb2RlQmFzZTY0KGUpO2Nhc2UiQmluYXJ5U3RyaW5nIjppZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCaW5hcnlTdHJpbmcnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIG8uZGVjb2RlQmluYXJ5U3RyaW5nKGUpO2Nhc2UiU3RvcmFnZUJpbmFyeVN0cmluZyI6aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImRlY29kZUNvbXByZXNzZWREYXRhOiAnU3RvcmFnZUJpbmFyeVN0cmluZycgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gby5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6IGludmFsaWQgaW5wdXQgZW5jb2RpbmcgcmVxdWVzdGVkOiAnIit0KyInIil9fSxlLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiU3RyaW5nIjpyZXR1cm4gby5kZWNvZGVVVEY4KGUpO2Nhc2UiQnl0ZUFycmF5IjpyZXR1cm4gZTtjYXNlIkJ1ZmZlciI6aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEJ1ZmZlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogYSAnQnVmZmVyJyB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIGN1cnJlbnQgZW52aXJubWVudCIpO3JldHVybiBvLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kZURlY29tcHJlc3NlZEJ5dGVzOiBpbnZhbGlkIG91dHB1dCBlbmNvZGluZyByZXF1ZXN0ZWQiKX19fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24obyl7dmFyIHQsZSxpLHU7ZT10PW8uRXZlbnRMb29wfHwoby5FdmVudExvb3A9e30pLHU9W10sZS5lbnF1ZXVlSW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3UucHVzaChlKSwxPT09dS5sZW5ndGgmJmkoKX0sZS5pbml0aWFsaXplU2NoZWR1bGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgZT0wLHQ9dTtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTt0cnl7ci5jYWxsKHZvaWQgMCl9Y2F0Y2goZSl7by5wcmludEV4Y2VwdGlvbkFuZFN0YWNrVHJhY2VUb0NvbnNvbGUoZSwiZW5xdWV1ZUltbWVkaWF0ZSBleGNlcHRpb24iKX19dS5sZW5ndGg9MH1pZihvLnJ1bm5pbmdJbk5vZGVKUygpJiYoaT1mdW5jdGlvbigpe3JldHVybiBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSl9KSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LnBvc3RNZXNzYWdlKXt2YXIgZSxyPSJlbnF1ZXVlSW1tZWRpYXRlLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtlLmRhdGE9PT1yJiZ0KCl9KSxlPW8ucnVubmluZ0luTnVsbE9yaWdpbigpPyIqIjp3aW5kb3cubG9jYXRpb24uaHJlZixpPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZShyLGUpfX1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmImZ1bmN0aW9uIj09dHlwZW9mIE1lc3NhZ2VQb3J0KXt2YXIgbj1uZXcgTWVzc2FnZUNoYW5uZWw7bi5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWVsc2UgaT1mdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0sMCl9fSxlLmluaXRpYWxpemVTY2hlZHVsZXIoKSxvLmVucXVldWVJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZW5xdWV1ZUltbWVkaWF0ZShlKX19KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihlKXt2YXIgcjsocj1lLk9iamVjdFRvb2xzfHwoZS5PYmplY3RUb29scz17fSkpLm92ZXJyaWRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZXh0ZW5kKGUsdCl9LHIuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvYmogaXMgbnVsbCBvciB1bmRlZmluZWQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib2JqIGlzIG5vdCBhbiBvYmplY3QiKTtpZihudWxsPT10JiYodD17fSksIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld1Byb3BlcnRpZXMgaXMgbm90IGFuIG9iamVjdCIpO2lmKG51bGwhPXQpZm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG8pe28uZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSkpfSxvLmdldFJhbmRvbVVURjE2U3RyaW5nT2ZMZW5ndGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSIiLHI9MDtyPGU7cisrKXtmb3IodmFyIG49dm9pZCAwOzU1Mjk2PD0obj1vLmdldFJhbmRvbUludGVnZXJJblJhbmdlKDAsMTExNDExMikpJiZuPD01NzM0MzspO3QrPW8uRW5jb2RpbmcuQ29kZVBvaW50LmRlY29kZVRvU3RyaW5nKG4pfXJldHVybiB0fX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGUpe3ZhciB0PShyLnByb3RvdHlwZS5hcHBlbmRDaGFyQ29kZT1mdW5jdGlvbihlKXt0aGlzLm91dHB1dEJ1ZmZlclt0aGlzLm91dHB1dFBvc2l0aW9uKytdPWUsdGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHkmJnRoaXMuZmx1c2hCdWZmZXJUb091dHB1dFN0cmluZygpfSxyLnByb3RvdHlwZS5hcHBlbmRDaGFyQ29kZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXRoaXMuYXBwZW5kQ2hhckNvZGUoZVt0XSl9LHIucHJvdG90eXBlLmFwcGVuZFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspdGhpcy5hcHBlbmRDaGFyQ29kZShlLmNoYXJDb2RlQXQodCkpfSxyLnByb3RvdHlwZS5hcHBlbmRDb2RlUG9pbnQ9ZnVuY3Rpb24oZSl7aWYoZTw9NjU1MzUpdGhpcy5hcHBlbmRDaGFyQ29kZShlKTtlbHNle2lmKCEoZTw9MTExNDExMSkpdGhyb3cgbmV3IEVycm9yKCJhcHBlbmRDb2RlUG9pbnQ6IEEgY29kZSBwb2ludCBvZiAiK2UrIiBjYW5ub3QgYmUgZW5jb2RlZCBpbiBVVEYtMTYiKTt0aGlzLmFwcGVuZENoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4+MTApKSx0aGlzLmFwcGVuZENoYXJDb2RlKDU2MzIwKyhlLTY1NTM2JjEwMjMpKX19LHIucHJvdG90eXBlLmdldE91dHB1dFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmcoKSx0aGlzLm91dHB1dFN0cmluZ30sci5wcm90b3R5cGUuZmx1c2hCdWZmZXJUb091dHB1dFN0cmluZz1mdW5jdGlvbigpe3RoaXMub3V0cHV0UG9zaXRpb249PT10aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5P3RoaXMub3V0cHV0U3RyaW5nKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdGhpcy5vdXRwdXRCdWZmZXIpOnRoaXMub3V0cHV0U3RyaW5nKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdGhpcy5vdXRwdXRCdWZmZXIuc3ViYXJyYXkoMCx0aGlzLm91dHB1dFBvc2l0aW9uKSksdGhpcy5vdXRwdXRQb3NpdGlvbj0wfSxyKTtmdW5jdGlvbiByKGUpe3ZvaWQgMD09PWUmJihlPTEwMjQpLHRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHk9ZSx0aGlzLm91dHB1dFBvc2l0aW9uPTAsdGhpcy5vdXRwdXRTdHJpbmc9IiIsdGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQxNkFycmF5KHRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHkpfWUuU3RyaW5nQnVpbGRlcj10fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24obyl7dmFyIGU9KHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZT10LmdldFRpbWVzdGFtcCgpfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZT1mdW5jdGlvbigpe3JldHVybiB0LmdldFRpbWVzdGFtcCgpLXRoaXMuc3RhcnRUaW1lfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZUFuZFJlc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEVsYXBzZWRUaW1lKCk7cmV0dXJuIHRoaXMucmVzdGFydCgpLGV9LHQucHJvdG90eXBlLmxvZ0FuZFJlc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIHI9dGhpcy5nZXRFbGFwc2VkVGltZSgpLG49ZSsiOiAiK3IudG9GaXhlZCgzKSsibXMiO3JldHVybiBvLmxvZyhuLHQpLHRoaXMucmVzdGFydCgpLHJ9LHQuZ2V0VGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wRnVuY3x8dGhpcy5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbigpLHRoaXMudGltZXN0YW1wRnVuYygpfSx0LmdldE1pY3Jvc2Vjb25kVGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMWUzKnQuZ2V0VGltZXN0YW1wKCkpfSx0LmNyZWF0ZUdsb2JhbFRpbWVzdGFtcEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzJiYiZnVuY3Rpb24iPT10eXBlb2YgcHJvY2Vzcy5ocnRpbWUpe3ZhciByPTA7dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7dmFyIGU9cHJvY2Vzcy5ocnRpbWUoKSx0PTFlMyplWzBdK2VbMV0vMWU2O3JldHVybiByK3R9LHI9RGF0ZS5ub3coKS10aGlzLnRpbWVzdGFtcEZ1bmMoKX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiZjaHJvbWUuSW50ZXJ2YWwpe3ZhciBlPURhdGUubm93KCksdD1uZXcgY2hyb21lLkludGVydmFsO3Quc3RhcnQoKSx0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gZSt0Lm1pY3Jvc2Vjb25kcygpLzFlM319ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpe3ZhciBuPURhdGUubm93KCktcGVyZm9ybWFuY2Uubm93KCk7dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIG4rcGVyZm9ybWFuY2Uubm93KCl9fWVsc2UgRGF0ZS5ub3c/dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9OnRoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sdCk7ZnVuY3Rpb24gdCgpe3RoaXMucmVzdGFydCgpfW8uVGltZXI9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG4pe3ZhciBlPSh0LnByb3RvdHlwZS5jb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiY29tcHJlc3NCbG9jazogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPW4uZW5jb2RlVVRGOChlKSksZT1uLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZChlKSx0aGlzLmNvbXByZXNzVXRmOEJsb2NrKGUpfSx0LnByb3RvdHlwZS5jb21wcmVzc1V0ZjhCbG9jaz1mdW5jdGlvbihlKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcihlKSxyPXRoaXMuaW5wdXRCdWZmZXIsbj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aDt0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCk7Zm9yKHZhciBvPXRoaXMub3V0cHV0QnVmZmVyUG9zaXRpb249MCxpPXQ7aTxuO2krKyl7dmFyIHU9cltpXSxzPWk8bztpZihpPm4tdGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgpc3x8dGhpcy5vdXRwdXRSYXdCeXRlKHUpO2Vsc2V7dmFyIGE9dGhpcy5nZXRCdWNrZXRJbmRleEZvclByZWZpeChpKTtpZighcyl7dmFyIGM9dGhpcy5maW5kTG9uZ2VzdE1hdGNoKGksYSk7bnVsbCE9YyYmKHRoaXMub3V0cHV0UG9pbnRlckJ5dGVzKGMubGVuZ3RoLGMuZGlzdGFuY2UpLG89aStjLmxlbmd0aCxzPSEwKX1zfHx0aGlzLm91dHB1dFJhd0J5dGUodSk7dmFyIGY9dGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCtpO3RoaXMucHJlZml4SGFzaFRhYmxlLmFkZFZhbHVlVG9CdWNrZXQoYSxmKX19cmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbil9LHQucHJvdG90eXBlLmZpbmRMb25nZXN0TWF0Y2g9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnByZWZpeEhhc2hUYWJsZS5nZXRBcnJheVNlZ21lbnRGb3JCdWNrZXRJbmRleCh0LHRoaXMucmV1c2FibGVBcnJheVNlZ21lbnRPYmplY3QpO2lmKG51bGw9PXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuLG89dGhpcy5pbnB1dEJ1ZmZlcixpPTAsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgcz1yLmdldEluUmV2ZXJzZWRPcmRlcih1KS10aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0LGE9ZS1zLGM9dm9pZCAwO2lmKGM9dm9pZCAwPT09bj90aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aC0xOm48MTI4JiYxMjg8PWE/aSsoaT4+PjEpOmksYT50aGlzLk1heGltdW1NYXRjaERpc3RhbmNlfHxjPj10aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aHx8ZStjPj1vLmxlbmd0aClicmVhaztpZihvW3MrY109PT1vW2UrY10pZm9yKHZhciBmPTA7O2YrKyl7aWYoZStmPT09by5sZW5ndGh8fG9bcytmXSE9PW9bZStmXSl7YzxmJiYobj1hLGk9Zik7YnJlYWt9aWYoZj09PXRoaXMuTWF4aW11bVNlcXVlbmNlTGVuZ3RoKXJldHVybntkaXN0YW5jZTphLGxlbmd0aDp0aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aH19fXJldHVybiB2b2lkIDAhPT1uP3tkaXN0YW5jZTpuLGxlbmd0aDppfTpudWxsfSx0LnByb3RvdHlwZS5nZXRCdWNrZXRJbmRleEZvclByZWZpeD1mdW5jdGlvbihlKXtyZXR1cm4oNzg4MDU5OSp0aGlzLmlucHV0QnVmZmVyW2VdKzM5NjAxKnRoaXMuaW5wdXRCdWZmZXJbZSsxXSsxOTkqdGhpcy5pbnB1dEJ1ZmZlcltlKzJdK3RoaXMuaW5wdXRCdWZmZXJbZSszXSkldGhpcy5QcmVmaXhIYXNoVGFibGVTaXplfSx0LnByb3RvdHlwZS5vdXRwdXRQb2ludGVyQnl0ZXM9ZnVuY3Rpb24oZSx0KXt0PDEyOD8odGhpcy5vdXRwdXRSYXdCeXRlKDE5MnxlKSx0aGlzLm91dHB1dFJhd0J5dGUodCkpOih0aGlzLm91dHB1dFJhd0J5dGUoMjI0fGUpLHRoaXMub3V0cHV0UmF3Qnl0ZSh0Pj4+OCksdGhpcy5vdXRwdXRSYXdCeXRlKDI1NSZ0KSl9LHQucHJvdG90eXBlLm91dHB1dFJhd0J5dGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbisrXT1lfSx0LnByb3RvdHlwZS5jcm9wQW5kQWRkTmV3Qnl0ZXNUb0lucHV0QnVmZmVyPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PXRoaXMuaW5wdXRCdWZmZXIpcmV0dXJuIHRoaXMuaW5wdXRCdWZmZXI9ZSwwO3ZhciB0PU1hdGgubWluKHRoaXMuaW5wdXRCdWZmZXIubGVuZ3RoLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2UpLHI9dGhpcy5pbnB1dEJ1ZmZlci5sZW5ndGgtdDtyZXR1cm4gdGhpcy5pbnB1dEJ1ZmZlcj1uLkNvbXByZXNzaW9uQ29tbW9uLmdldENyb3BwZWRBbmRBcHBlbmRlZEJ5dGVBcnJheSh0aGlzLmlucHV0QnVmZmVyLHIsdCxlKSx0aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0Kz1yLHR9LHQpO2Z1bmN0aW9uIHQoZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoPTQsdGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGg9MzEsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLlByZWZpeEhhc2hUYWJsZVNpemU9NjU1MzcsdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldD0xLGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50MzJBcnJheT90aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgbi5Db21wcmVzc29yQ3VzdG9tSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSk6dGhpcy5wcmVmaXhIYXNoVGFibGU9bmV3IG4uQ29tcHJlc3NvclNpbXBsZUhhc2hUYWJsZSh0aGlzLlByZWZpeEhhc2hUYWJsZVNpemUpfW4uQ29tcHJlc3Nvcj1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGU9KHQucHJvdG90eXBlLmFkZFZhbHVlVG9CdWNrZXQ9ZnVuY3Rpb24oZSx0KXtlPDw9MSx0aGlzLnN0b3JhZ2VJbmRleD49dGhpcy5zdG9yYWdlLmxlbmd0aD4+PjEmJnRoaXMuY29tcGFjdCgpO3ZhciByLG49dGhpcy5idWNrZXRMb2NhdG9yc1tlXTtpZigwPT09biluPXRoaXMuc3RvcmFnZUluZGV4LHI9MSx0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXhdPXQsdGhpcy5zdG9yYWdlSW5kZXgrPXRoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5O2Vsc2V7KHI9dGhpcy5idWNrZXRMb2NhdG9yc1tlKzFdKT09PXRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LTEmJihyPXRoaXMudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHMobixyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpKTt2YXIgbz1uK3I7MD09PXRoaXMuc3RvcmFnZVtvXT8odGhpcy5zdG9yYWdlW29dPXQsbz09PXRoaXMuc3RvcmFnZUluZGV4JiYodGhpcy5zdG9yYWdlSW5kZXgrPXIpKToocy5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbix0aGlzLnN0b3JhZ2UsdGhpcy5zdG9yYWdlSW5kZXgsciksbj10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLnN0b3JhZ2VJbmRleCs9cix0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXgrK109dCx0aGlzLnN0b3JhZ2VJbmRleCs9cikscisrfXRoaXMuYnVja2V0TG9jYXRvcnNbZV09bix0aGlzLmJ1Y2tldExvY2F0b3JzW2UrMV09cn0sdC5wcm90b3R5cGUudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUrdC1yO3JldHVybiBzLkFycmF5VG9vbHMuY29weUVsZW1lbnRzKHRoaXMuc3RvcmFnZSxuLHRoaXMuc3RvcmFnZSxlLHIpLHMuQXJyYXlUb29scy56ZXJvRWxlbWVudHModGhpcy5zdG9yYWdlLGUrcix0LXIpLHJ9LHQucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1Y2tldExvY2F0b3JzLHQ9dGhpcy5zdG9yYWdlO3RoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoKSx0aGlzLnN0b3JhZ2VJbmRleD0xO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Mil7dmFyIG49ZVtyKzFdOzAhPT1uJiYodGhpcy5idWNrZXRMb2NhdG9yc1tyXT10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV09bix0aGlzLnN0b3JhZ2VJbmRleCs9TWF0aC5tYXgoTWF0aC5taW4oMipuLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5KSx0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eSkpfWZvcih0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDgqdGhpcy5zdG9yYWdlSW5kZXgpLHI9MDtyPGUubGVuZ3RoO3IrPTIpe3ZhciBvPWVbcl07aWYoMCE9PW8pe3ZhciBpPXRoaXMuYnVja2V0TG9jYXRvcnNbcl0sdT10aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV07cy5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0LG8sdGhpcy5zdG9yYWdlLGksdSl9fX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24oZSx0KXtlPDw9MTt2YXIgcj10aGlzLmJ1Y2tldExvY2F0b3JzW2VdO3JldHVybiAwPT09cj9udWxsOih2b2lkIDA9PT10JiYodD1uZXcgcy5BcnJheVNlZ21lbnQodGhpcy5zdG9yYWdlLHIsdGhpcy5idWNrZXRMb2NhdG9yc1tlKzFdKSksdCl9LHQucHJvdG90eXBlLmdldFVzZWRCdWNrZXRDb3VudD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHMuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMpLzIpfSx0LnByb3RvdHlwZS5nZXRUb3RhbEVsZW1lbnRDb3VudD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoO3QrPTIpZSs9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdO3JldHVybiBlfSx0KTtmdW5jdGlvbiB0KGUpe3RoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5PTQsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHk9NjQsdGhpcy5idWNrZXRMb2NhdG9ycz1uZXcgVWludDMyQXJyYXkoMiplKSx0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDIqZSksdGhpcy5zdG9yYWdlSW5kZXg9MX1zLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGU9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG4pe3ZhciBlPSh0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3ZvaWQgMD09PXI/dGhpcy5idWNrZXRzW2VdPVt0XTooci5sZW5ndGg9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiZuLkFycmF5VG9vbHMudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzKHIsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHkvMiksci5wdXNoKHQpKX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDoodm9pZCAwPT09dCYmKHQ9bmV3IG4uQXJyYXlTZWdtZW50KHIsMCxyLmxlbmd0aCkpLHQpfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5BcnJheVRvb2xzLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXkodGhpcy5idWNrZXRzKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldHMubGVuZ3RoO3QrKyl2b2lkIDAhPT10aGlzLmJ1Y2tldHNbdF0mJihlKz10aGlzLmJ1Y2tldHNbdF0ubGVuZ3RoKTtyZXR1cm4gZX0sdCk7ZnVuY3Rpb24gdChlKXt0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldHM9bmV3IEFycmF5KGUpfW4uQ29tcHJlc3NvclNpbXBsZUhhc2hUYWJsZT1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZil7dmFyIGU9KHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9ja1RvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBlPWYuQnVmZmVyVG9vbHMuY29udmVydFRvVWludDhBcnJheUlmTmVlZGVkKGUpLGYuZGVjb2RlVVRGOCh0aGlzLmRlY29tcHJlc3NCbG9jayhlKSl9LHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9jaz1mdW5jdGlvbihlKXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyJiYoZT1mLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXIsZV0pLHRoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dm9pZCAwKTtmb3IodmFyIHQ9dGhpcy5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplKE1hdGgubWF4KDQqZS5sZW5ndGgsMTAyNCkpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBvPWVbcl07aWYobz4+PjY9PTMpe3ZhciBpPW8+Pj41O2lmKHI9PW4tMXx8cj09bi0yJiY3PT1pKXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyPWUuc3ViYXJyYXkocik7YnJlYWt9aWYoZVtyKzFdPj4+Nz09MSl0aGlzLm91dHB1dEJ5dGUobyk7ZWxzZXt2YXIgdT0zMSZvLHM9dm9pZCAwOzY9PWk/KHM9ZVtyKzFdLHIrPTEpOihzPWVbcisxXTw8OHxlW3IrMl0scis9Mik7Zm9yKHZhciBhPXRoaXMub3V0cHV0UG9zaXRpb24tcyxjPTA7Yzx1O2MrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJbYStjXSl9fWVsc2UgdGhpcy5vdXRwdXRCeXRlKG8pfXJldHVybiB0aGlzLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZSgpLGYuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcix0LHRoaXMub3V0cHV0UG9zaXRpb24tdCl9LHQucHJvdG90eXBlLm91dHB1dEJ5dGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyLmxlbmd0aCYmKHRoaXMub3V0cHV0QnVmZmVyPWYuQXJyYXlUb29scy5kb3VibGVCeXRlQXJyYXlDYXBhY2l0eSh0aGlzLm91dHB1dEJ1ZmZlcikpLHRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24rK109ZX0sdC5wcm90b3R5cGUuY3JvcE91dHB1dEJ1ZmZlclRvV2luZG93QW5kSW5pdGlhbGl6ZT1mdW5jdGlvbihlKXtpZighdGhpcy5vdXRwdXRCdWZmZXIpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLDA7dmFyIHQ9TWF0aC5taW4odGhpcy5vdXRwdXRQb3NpdGlvbix0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKTtpZih0aGlzLm91dHB1dEJ1ZmZlcj1mLkNvbXByZXNzaW9uQ29tbW9uLmdldENyb3BwZWRCdWZmZXIodGhpcy5vdXRwdXRCdWZmZXIsdGhpcy5vdXRwdXRQb3NpdGlvbi10LHQsZSksdGhpcy5vdXRwdXRQb3NpdGlvbj10LHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyKXtmb3IodmFyIHI9MDtyPHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyLmxlbmd0aDtyKyspdGhpcy5vdXRwdXRCeXRlKHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyW3JdKTt0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDB9cmV0dXJuIHR9LHQucHJvdG90eXBlLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0xO2U8PTQmJjA8PXRoaXMub3V0cHV0UG9zaXRpb24tZTtlKyspe3ZhciB0PXRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24tZV07aWYoZTw0JiZ0Pj4+Mz09MzB8fGU8MyYmdD4+PjQ9PTE0fHxlPDImJnQ+Pj41PT02KXJldHVybiB0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj10aGlzLm91dHB1dEJ1ZmZlci5zdWJhcnJheSh0aGlzLm91dHB1dFBvc2l0aW9uLWUsdGhpcy5vdXRwdXRQb3NpdGlvbiksdm9pZCh0aGlzLm91dHB1dFBvc2l0aW9uLT1lKX19LHQpO2Z1bmN0aW9uIHQoKXt0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlPTMyNzY3LHRoaXMub3V0cHV0UG9zaXRpb249MH1mLkRlY29tcHJlc3Nvcj1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGUsdCxhLGM7ZT1zLkVuY29kaW5nfHwocy5FbmNvZGluZz17fSksdD1lLkJhc2U2NHx8KGUuQmFzZTY0PXt9KSxhPW5ldyBVaW50OEFycmF5KFs2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDQzLDQ3XSksYz1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDYyLDI1NSwyNTUsMjU1LDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDI1NSwyNTUsMjU1LDAsMjU1LDI1NSwyNTUsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSwyNTUsMjU1LDI1NSwyNTVdKSx0LmVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMCE9ZS5sZW5ndGg/cy5ydW5uaW5nSW5Ob2RlSlMoKT9zLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKS50b1N0cmluZygiYmFzZTY0Iik6dC5lbmNvZGVXaXRoSlMoZSk6IiJ9LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlP3MucnVubmluZ0luTm9kZUpTKCk/cy5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobmV3IEJ1ZmZlcihlLCJiYXNlNjQiKSk6dC5kZWNvZGVXaXRoSlMoZSk6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZW5jb2RlV2l0aEpTPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITApLCFlfHwwPT1lLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHIsbj1hLG89bmV3IHMuU3RyaW5nQnVpbGRlcixpPTAsdT1lLmxlbmd0aDtpPHU7aSs9MylpPD11LTM/KHI9ZVtpXTw8MTZ8ZVtpKzFdPDw4fGVbaSsyXSxvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobltyPj4+NiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobls2MyZyXSkscj0wKTppPT09dS0yPyhyPWVbaV08PDE2fGVbaSsxXTw8OCxvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobltyPj4+NiY2M10pLHQmJm8uYXBwZW5kQ2hhckNvZGUoNjEpKTppPT09dS0xJiYocj1lW2ldPDwxNixvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLHQmJihvLmFwcGVuZENoYXJDb2RlKDYxKSxvLmFwcGVuZENoYXJDb2RlKDYxKSkpO3JldHVybiBvLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZVdpdGhKUz1mdW5jdGlvbihlLHQpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHI9ZS5sZW5ndGglNDtpZigxPT1yKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBCYXNlNjQgc3RyaW5nOiBsZW5ndGggJSA0ID09IDEiKTsyPT1yP2UrPSI9PSI6Mz09ciYmKGUrPSI9IiksdD10fHxuZXcgVWludDhBcnJheShlLmxlbmd0aCk7Zm9yKHZhciBuPTAsbz1lLmxlbmd0aCxpPTA7aTxvO2krPTQpe3ZhciB1PWNbZS5jaGFyQ29kZUF0KGkpXTw8MTh8Y1tlLmNoYXJDb2RlQXQoaSsxKV08PDEyfGNbZS5jaGFyQ29kZUF0KGkrMildPDw2fGNbZS5jaGFyQ29kZUF0KGkrMyldO3RbbisrXT11Pj4+MTYmMjU1LHRbbisrXT11Pj4+OCYyNTUsdFtuKytdPTI1NSZ1fXJldHVybiA2MT09ZS5jaGFyQ29kZUF0KG8tMSkmJm4tLSw2MT09ZS5jaGFyQ29kZUF0KG8tMikmJm4tLSx0LnN1YmFycmF5KDAsbil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGUsdDtlPXMuRW5jb2Rpbmd8fChzLkVuY29kaW5nPXt9KSwodD1lLkJpbmFyeVN0cmluZ3x8KGUuQmluYXJ5U3RyaW5nPXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluYXJ5U3RyaW5nLmVuY29kZTogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IHMuU3RyaW5nQnVpbGRlcixuPTAsbz0xLGk9MDtpPHQ7aSs9Mil7dmFyIHU9dm9pZCAwO3U9aT09dC0xP2VbaV08PDg6ZVtpXTw8OHxlW2krMV0sci5hcHBlbmRDaGFyQ29kZShuPDwxNi1vfHU+Pj5vKSxuPXUmKDE8PG8pLTEsMTU9PT1vPyhyLmFwcGVuZENoYXJDb2RlKG4pLG49MCxvPTEpOm8rPTEsdC0yPD1pJiZyLmFwcGVuZENoYXJDb2RlKG48PDE2LW8pfXJldHVybiByLmFwcGVuZENoYXJDb2RlKDMyNzY4fHQlMiksci5nZXRPdXRwdXRTdHJpbmcoKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkJpbmFyeVN0cmluZy5kZWNvZGU6IGludmFsaWQgaW5wdXQgdHlwZSIpO2lmKCIiPT1lKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHQscj1uZXcgVWludDhBcnJheSgzKmUubGVuZ3RoKSxuPTAsbz0wLGk9MCx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBzPWUuY2hhckNvZGVBdCh1KTszMjc2ODw9cz8oMzI3Njk9PXMmJm4tLSxpPTApOihvPTA9PWk/czoodD1vPDxpfHM+Pj4xNS1pLHJbbisrXT10Pj4+OCxyW24rK109MjU1JnQscyYoMTw8MTUtaSktMSksMTU9PWk/aT0wOmkrPTEpfXJldHVybiByLnN1YmFycmF5KDAsbil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQscjt0PWUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSwocj10LkNvZGVQb2ludHx8KHQuQ29kZVBvaW50PXt9KSkuZW5jb2RlRnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByPWUuY2hhckNvZGVBdCh0KTtpZihyPDU1Mjk2fHw1NjMxOTxyKXJldHVybiByO3ZhciBuPWUuY2hhckNvZGVBdCh0KzEpO2lmKDU2MzIwPD1uJiZuPD01NzM0MylyZXR1cm4gbi01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2O3Rocm93IG5ldyBFcnJvcigiZ2V0VW5pY29kZUNvZGVQb2ludDogUmVjZWl2ZWQgYSBsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIsIGNoYXIgY29kZSAiK3IrIiwgZm9sbG93ZWQgYnkgIituKyIsIHdoaWNoIGlzIG5vdCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29kZS4iKX0sci5kZWNvZGVUb1N0cmluZz1mdW5jdGlvbihlKXtpZihlPD02NTUzNSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtpZihlPD0xMTE0MTExKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4+MTApLDU2MzIwKyhlLTY1NTM2JjEwMjMpKTt0aHJvdyBuZXcgRXJyb3IoImdldFN0cmluZ0Zyb21Vbmljb2RlQ29kZVBvaW50OiBBIGNvZGUgcG9pbnQgb2YgIitlKyIgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTE2Iil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQscixuO3Q9ZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pLHI9dC5EZWNpbWFsU3RyaW5nfHwodC5EZWNpbWFsU3RyaW5nPXt9KSxuPVsiMDAwIiwiMDAxIiwiMDAyIiwiMDAzIiwiMDA0IiwiMDA1IiwiMDA2IiwiMDA3IiwiMDA4IiwiMDA5IiwiMDEwIiwiMDExIiwiMDEyIiwiMDEzIiwiMDE0IiwiMDE1IiwiMDE2IiwiMDE3IiwiMDE4IiwiMDE5IiwiMDIwIiwiMDIxIiwiMDIyIiwiMDIzIiwiMDI0IiwiMDI1IiwiMDI2IiwiMDI3IiwiMDI4IiwiMDI5IiwiMDMwIiwiMDMxIiwiMDMyIiwiMDMzIiwiMDM0IiwiMDM1IiwiMDM2IiwiMDM3IiwiMDM4IiwiMDM5IiwiMDQwIiwiMDQxIiwiMDQyIiwiMDQzIiwiMDQ0IiwiMDQ1IiwiMDQ2IiwiMDQ3IiwiMDQ4IiwiMDQ5IiwiMDUwIiwiMDUxIiwiMDUyIiwiMDUzIiwiMDU0IiwiMDU1IiwiMDU2IiwiMDU3IiwiMDU4IiwiMDU5IiwiMDYwIiwiMDYxIiwiMDYyIiwiMDYzIiwiMDY0IiwiMDY1IiwiMDY2IiwiMDY3IiwiMDY4IiwiMDY5IiwiMDcwIiwiMDcxIiwiMDcyIiwiMDczIiwiMDc0IiwiMDc1IiwiMDc2IiwiMDc3IiwiMDc4IiwiMDc5IiwiMDgwIiwiMDgxIiwiMDgyIiwiMDgzIiwiMDg0IiwiMDg1IiwiMDg2IiwiMDg3IiwiMDg4IiwiMDg5IiwiMDkwIiwiMDkxIiwiMDkyIiwiMDkzIiwiMDk0IiwiMDk1IiwiMDk2IiwiMDk3IiwiMDk4IiwiMDk5IiwiMTAwIiwiMTAxIiwiMTAyIiwiMTAzIiwiMTA0IiwiMTA1IiwiMTA2IiwiMTA3IiwiMTA4IiwiMTA5IiwiMTEwIiwiMTExIiwiMTEyIiwiMTEzIiwiMTE0IiwiMTE1IiwiMTE2IiwiMTE3IiwiMTE4IiwiMTE5IiwiMTIwIiwiMTIxIiwiMTIyIiwiMTIzIiwiMTI0IiwiMTI1IiwiMTI2IiwiMTI3IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiMTUyIiwiMTUzIiwiMTU0IiwiMTU1IiwiMTU2IiwiMTU3IiwiMTU4IiwiMTU5IiwiMTYwIiwiMTYxIiwiMTYyIiwiMTYzIiwiMTY0IiwiMTY1IiwiMTY2IiwiMTY3IiwiMTY4IiwiMTY5IiwiMTcwIiwiMTcxIiwiMTcyIiwiMTczIiwiMTc0IiwiMTc1IiwiMTc2IiwiMTc3IiwiMTc4IiwiMTc5IiwiMTgwIiwiMTgxIiwiMTgyIiwiMTgzIiwiMTg0IiwiMTg1IiwiMTg2IiwiMTg3IiwiMTg4IiwiMTg5IiwiMTkwIiwiMTkxIiwiMTkyIiwiMTkzIiwiMTk0IiwiMTk1IiwiMTk2IiwiMTk3IiwiMTk4IiwiMTk5IiwiMjAwIiwiMjAxIiwiMjAyIiwiMjAzIiwiMjA0IiwiMjA1IiwiMjA2IiwiMjA3IiwiMjA4IiwiMjA5IiwiMjEwIiwiMjExIiwiMjEyIiwiMjEzIiwiMjE0IiwiMjE1IiwiMjE2IiwiMjE3IiwiMjE4IiwiMjE5IiwiMjIwIiwiMjIxIiwiMjIyIiwiMjIzIiwiMjI0IiwiMjI1IiwiMjI2IiwiMjI3IiwiMjI4IiwiMjI5IiwiMjMwIiwiMjMxIiwiMjMyIiwiMjMzIiwiMjM0IiwiMjM1IiwiMjM2IiwiMjM3IiwiMjM4IiwiMjM5IiwiMjQwIiwiMjQxIiwiMjQyIiwiMjQzIiwiMjQ0IiwiMjQ1IiwiMjQ2IiwiMjQ3IiwiMjQ4IiwiMjQ5IiwiMjUwIiwiMjUxIiwiMjUyIiwiMjUzIiwiMjU0IiwiMjU1Il0sci5lbmNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2gobltlW3JdXSk7cmV0dXJuIHQuam9pbigiICIpfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGUpe3ZhciB0LHI7dD1lLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSksKHI9dC5TdG9yYWdlQmluYXJ5U3RyaW5nfHwodC5TdG9yYWdlQmluYXJ5U3RyaW5nPXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0LkJpbmFyeVN0cmluZy5lbmNvZGUoZSkucmVwbGFjZSgvXDAvZywi6ICCIil9LHIuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0LkJpbmFyeVN0cmluZy5kZWNvZGUoZS5yZXBsYWNlKC9cdTgwMDIvZywiXDAiKSl9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oYSl7dmFyIGksdCxyLG47aT1hLkVuY29kaW5nfHwoYS5FbmNvZGluZz17fSksKHQ9aS5VVEY4fHwoaS5VVEY4PXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYwIT1lLmxlbmd0aD9hLnJ1bm5pbmdJbk5vZGVKUygpP2EuQnVmZmVyVG9vbHMuYnVmZmVyVG9VaW50OEFycmF5KG5ldyBCdWZmZXIoZSwidXRmOCIpKTp0LmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlKCk/ci5lbmNvZGUoZSk6dC5lbmNvZGVXaXRoSlMoZSk6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYwIT1lLmxlbmd0aD9hLnJ1bm5pbmdJbk5vZGVKUygpP2EuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKGUpLnRvU3RyaW5nKCJ1dGY4Iik6dC5jcmVhdGVOYXRpdmVUZXh0RW5jb2RlckFuZERlY29kZXJJZkF2YWlsYWJsZSgpP24uZGVjb2RlKGUpOnQuZGVjb2RlV2l0aEpTKGUpOiIifSx0LmVuY29kZVdpdGhKUz1mdW5jdGlvbihlLHQpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dD10fHxuZXcgVWludDhBcnJheSg0KmUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBvPWkuQ29kZVBvaW50LmVuY29kZUZyb21TdHJpbmcoZSxuKTtpZihvPD0xMjcpdFtyKytdPW87ZWxzZSBpZihvPD0yMDQ3KXRbcisrXT0xOTJ8bz4+PjYsdFtyKytdPTEyOHw2MyZvO2Vsc2UgaWYobzw9NjU1MzUpdFtyKytdPTIyNHxvPj4+MTIsdFtyKytdPTEyOHxvPj4+NiY2Myx0W3IrK109MTI4fDYzJm87ZWxzZXtpZighKG88PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtMTYgc3RyaW5nOiBFbmNvdW50ZXJlZCBhIGNoYXJhY3RlciB1bnN1cHBvcnRlZCBieSBVVEYtOC8xNiAoUkZDIDM2MjkpIik7dFtyKytdPTI0MHxvPj4+MTgsdFtyKytdPTEyOHxvPj4+MTImNjMsdFtyKytdPTEyOHxvPj4+NiY2Myx0W3IrK109MTI4fDYzJm8sbisrfX1yZXR1cm4gdC5zdWJhcnJheSgwLHIpfSx0LmRlY29kZVdpdGhKUz1mdW5jdGlvbihlLHQscil7aWYodm9pZCAwPT09dCYmKHQ9MCksIWV8fDA9PWUubGVuZ3RoKXJldHVybiIiO3ZvaWQgMD09PXImJihyPWUubGVuZ3RoKTtmb3IodmFyIG4sbyxpPW5ldyBhLlN0cmluZ0J1aWxkZXIsdT10LHM9cjt1PHM7KXtpZigobz1lW3VdKT4+Pjc9PTApbj1vLHUrPTE7ZWxzZSBpZihvPj4+NT09Nil7aWYocjw9dSsxKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtuPSgzMSZvKTw8Nnw2MyZlW3UrMV0sdSs9Mn1lbHNlIGlmKG8+Pj40PT0xNCl7aWYocjw9dSsyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtuPSgxNSZvKTw8MTJ8KDYzJmVbdSsxXSk8PDZ8NjMmZVt1KzJdLHUrPTN9ZWxzZXtpZihvPj4+MyE9MzApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVURi04IHN0cmVhbTogQW4gaW52YWxpZCBsZWFkIGJ5dGUgdmFsdWUgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtpZihyPD11KzMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVURi04IHN0cmVhbTogVHJ1bmNhdGVkIGNvZGVwb2ludCBzZXF1ZW5jZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiAiK3UpO249KDcmbyk8PDE4fCg2MyZlW3UrMV0pPDwxMnwoNjMmZVt1KzJdKTw8Nnw2MyZlW3UrM10sdSs9NH1pLmFwcGVuZENvZGVQb2ludChuKX1yZXR1cm4gaS5nZXRPdXRwdXRTdHJpbmcoKX0sdC5jcmVhdGVOYXRpdmVUZXh0RW5jb2RlckFuZERlY29kZXJJZkF2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEhcnx8ImZ1bmN0aW9uIj09dHlwZW9mIFRleHRFbmNvZGVyJiYocj1uZXcgVGV4dEVuY29kZXIoInV0Zi04Iiksbj1uZXcgVGV4dERlY29kZXIoInV0Zi04IiksITApfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG8pe28uY29tcHJlc3M9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksbnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wcmVzczogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTt2YXIgcj1vLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcoZSk7dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOnIsb3V0cHV0RW5jb2Rpbmc6IkJ5dGVBcnJheSJ9LHQpO3ZhciBuPShuZXcgby5Db21wcmVzc29yKS5jb21wcmVzc0Jsb2NrKGUpO3JldHVybiBvLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZUNvbXByZXNzZWRCeXRlcyhuLHQub3V0cHV0RW5jb2RpbmcpfSxvLmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksbnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZCIpO3Q9by5PYmplY3RUb29scy5vdmVycmlkZSh7aW5wdXRFbmNvZGluZzoiQnl0ZUFycmF5IixvdXRwdXRFbmNvZGluZzoiU3RyaW5nIn0sdCk7dmFyIHI9by5Db21wcmVzc2lvbkNvbW1vbi5kZWNvZGVDb21wcmVzc2VkQnl0ZXMoZSx0LmlucHV0RW5jb2RpbmcpLG49KG5ldyBvLkRlY29tcHJlc3NvcikuZGVjb21wcmVzc0Jsb2NrKHIpO3JldHVybiBvLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzKG4sdC5vdXRwdXRFbmNvZGluZyl9LG8uY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7dmFyIG47bnVsbD09ciYmKHI9ZnVuY3Rpb24oKXt9KTt0cnl7bj1vLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcoZSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOm4sb3V0cHV0RW5jb2Rpbmc6IkJ5dGVBcnJheSIsdXNlV2ViV29ya2VyOiEwLGJsb2NrU2l6ZTo2NTUzNn0sdCksby5lbnF1ZXVlSW1tZWRpYXRlKGZ1bmN0aW9uKCl7dC51c2VXZWJXb3JrZXImJm8uV2ViV29ya2VyLmNyZWF0ZUdsb2JhbFdvcmtlcklmTmVlZGVkKCk/by5XZWJXb3JrZXIuY29tcHJlc3NBc3luYyhlLHQscik6by5Bc3luY0NvbXByZXNzb3IuY29tcHJlc3NBc3luYyhlLHQscil9KX0sby5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PXImJihyPWZ1bmN0aW9uKCl7fSksbnVsbCE9ZSl7dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOiJCeXRlQXJyYXkiLG91dHB1dEVuY29kaW5nOiJTdHJpbmciLHVzZVdlYldvcmtlcjohMCxibG9ja1NpemU6NjU1MzZ9LHQpO3ZhciBuPW8uQnVmZmVyVG9vbHMuY29udmVydFRvVWludDhBcnJheUlmTmVlZGVkKGUpO28uRXZlbnRMb29wLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXt0LnVzZVdlYldvcmtlciYmby5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9vLldlYldvcmtlci5kZWNvbXByZXNzQXN5bmMobix0LHIpOm8uQXN5bmNEZWNvbXByZXNzb3IuZGVjb21wcmVzc0FzeW5jKGUsdCxyKX0pfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcigiZGVjb21wcmVzc0FzeW5jOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZCIpKX0sby5jcmVhdGVDb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBvLkFzeW5jQ29tcHJlc3Nvci5jcmVhdGVDb21wcmVzc2lvblN0cmVhbSgpfSxvLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gby5Bc3luY0RlY29tcHJlc3Nvci5jcmVhdGVEZWNvbXByZXNzaW9uU3RyZWFtKCl9LG8uZW5jb2RlVVRGOD1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5VVEY4LmVuY29kZShlKX0sby5kZWNvZGVVVEY4PWZ1bmN0aW9uKGUpe3JldHVybiBvLkVuY29kaW5nLlVURjguZGVjb2RlKGUpfSxvLmVuY29kZUJhc2U2ND1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CYXNlNjQuZW5jb2RlKGUpfSxvLmRlY29kZUJhc2U2ND1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CYXNlNjQuZGVjb2RlKGUpfSxvLmVuY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZW5jb2RlKGUpfSxvLmRlY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZGVjb2RlKGUpfSxvLmVuY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uRW5jb2RpbmcuU3RvcmFnZUJpbmFyeVN0cmluZy5lbmNvZGUoZSl9LG8uZGVjb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmRlY29kZShlKX19KExaVVRGOD1MWlVURjh8fHt9KTs=`","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport jwtDecode from 'jwt-decode'\r\n\r\nexport default class Store {\r\n constructor (prefix) {\r\n this.prefix = prefix\r\n }\r\n\r\n get server () {\r\n return this.serverAddress\r\n }\r\n\r\n set server (address) {\r\n this.serverAddress = address\r\n }\r\n\r\n set userID (userid) {\r\n // this.USERID = userid\r\n }\r\n\r\n get userID () {\r\n try {\r\n let dCode = jwtDecode(this.refreshToken)\r\n return dCode.user_id\r\n } catch (err) {\r\n console.warn(\"Decoding failed!\")\r\n }\r\n\r\n }\r\n\r\n get appID () {\r\n return this.APPID\r\n }\r\n\r\n set appID (appid) {\r\n this.APPID = appid\r\n }\r\n\r\n get websocketAddress () {\r\n return this.wssocketAddress\r\n }\r\n\r\n set websocketAddress (websocAddress) {\r\n this.wssocketAddress = websocAddress\r\n }\r\n\r\n set token (token) {\r\n this.accessToken = token\r\n }\r\n\r\n get token () {\r\n return this.accessToken\r\n }\r\n\r\n set refreshToken (refresh) {\r\n this.token = ''\r\n this.privateRefreshToken = refresh\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_refresh`, refresh)\r\n }\r\n }\r\n\r\n get refreshToken () {\r\n if (this.privateRefreshToken) {\r\n return this.privateRefreshToken\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n const rT = localStorage.getItem(`${this.prefix}_refresh`)\r\n if (rT) {\r\n return rT\r\n }\r\n }\r\n return null\r\n }\r\n\r\n set assetProvider (provider) {\r\n this.privateAssetProvider = provider\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_asset_provider`, JSON.stringify(provider))\r\n }\r\n }\r\n\r\n get assetProvider () {\r\n if (this.privateAssetProvider) {\r\n return this.privateAssetProvider\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n try {\r\n return JSON.parse(localStorage.getItem(`${this.prefix}_asset_provider`))\r\n } catch (err) {\r\n console.warn('Unable to parse JSON payload ', err)\r\n }\r\n }\r\n return null\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport urlParse from 'url-parse'\r\nimport User from '../../../../model/User'\r\n\r\nexport default class UserApi {\r\n constructor (bv) {\r\n this.Blockv = bv\r\n this.client = bv.client\r\n this.store = bv.store\r\n this.dataPool = bv.dataPool\r\n }\r\n\r\n /**\r\n * Registers a user on the Blockv platform.\r\n *\r\n * @param registration contains properties of the user.\r\n * Only the properties to be registered should be set.\r\n * @return new Observable<User> instance\r\n */\r\n\r\n getAccessToken () {\r\n return this.store.token\r\n }\r\n\r\n setAccessToken (token) {\r\n this.store.token = ''\r\n this.store.token = token\r\n }\r\n\r\n getRefreshToken () {\r\n return this.store.refreshToken\r\n }\r\n\r\n setRefreshToken (token) {\r\n this.store.token = ''\r\n this.store.refreshToken = token\r\n }\r\n\r\n register (registration) {\r\n return this.client.request('POST', '/v1/users', registration, false)\r\n .then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a user token (phone or email).\r\n *\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param password the user's password.\r\n * @return JSON Object\r\n */\r\n\r\n login (token, tokenType, password) {\r\n const payload = {\r\n token,\r\n token_type: tokenType,\r\n auth_data: {\r\n password\r\n }\r\n }\r\n\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n if (!password) {\r\n const error = new Error('Login Failed, Password Reset')\r\n error.code = 'PASSWORD_RESET'\r\n throw error\r\n } else {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id,\r\n client: this.client\r\n })\r\n return data\r\n }\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a guest id\r\n *\r\n * @param guestId the user's guest id.\r\n * @return JSON Object\r\n */\r\n loginGuest (guestId) {\r\n const payload = {\r\n token: guestId,\r\n token_type: 'guest_id'\r\n }\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n uploadAvatar (request) {\r\n // get file\r\n // change to formData\r\n return this.client.request('POST', '/v1/user/avatar', request, true)\r\n }\r\n\r\n /**\r\n * Fetches the current user's profile information from the Blockv platform.\r\n *\r\n * @return JSON Object\r\n */\r\n\r\n getCurrentUser (payload) {\r\n // get the current authenticated in user\r\n return this.client.request('GET', '/v1/user', payload, true).then(data => new User(data))\r\n }\r\n\r\n /**\r\n * Updates the current user's profile on the Blockv platform.\r\n * @param update holds the properties of the user, e.g. their first name.\r\n * Only the properties to be updated should be set.\r\n * @return JSON Object\r\n */\r\n updateUser (update) {\r\n return this.client.request('PATCH', '/v1/user', update, true)\r\n }\r\n\r\n /**\r\n * Gets a list of the current users tokens\r\n * @return JSON Object\r\n */\r\n\r\n getUserTokens () {\r\n return this.client.request('GET', '/v1/user/tokens', '', true)\r\n }\r\n\r\n /**\r\n * Verifies ownership of a token by submitting the verification code to the Blockv platform.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param code the verification code send to the user's token (phone or email).\r\n * @return JSON Object\r\n */\r\n verifyUserToken (verification) {\r\n return this.client.request('POST', '/v1/user/verify_token', verification, true)\r\n }\r\n\r\n /**\r\n * Sends a One-Time-Pin (OTP) to the user's token (phone or email).\r\n * This OTP may be used in place of a password to login.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n resetPassword (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token', payload, false)\r\n }\r\n\r\n /**\r\n * Sends a verification code to the user's token (phone or email).\r\n * This verification code should be used to verifiy the user's ownership\r\n * of the token (phone or email).\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token_verification', payload, false)\r\n }\r\n\r\n /**\r\n * Returns a server generated guest id\r\n * @return Object payload containing a guest user generated by the server\r\n */\r\n\r\n getGuestToken () {\r\n return this.client.request('POST', '/v1/user/guest', '', false).then(data => data.properties.guest_id)\r\n }\r\n\r\n /**\r\n * Log out the current user.\r\n * The current user will not longer be authorized to perform user\r\n * scoped requests on the Blockv platfrom.\r\n * @return new JSON\r\n */\r\n logout (noRequest = false) {\r\n this.Blockv.emit('logout')\r\n this.Blockv.WebSockets.close()\r\n console.log('trying to logout')\r\n if (noRequest) {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n } else {\r\n return this.client.request('POST', '/v1/user/logout', {}, true).then(() => {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n }).catch((err) => {\r\n console.warn(err)\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n throw err\r\n })\r\n }\r\n \r\n }\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeAssetProvider (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = UserApi.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n addUserToken (payload) {\r\n /**\r\n * payload is\r\n * {\r\n * \"token\": \"another.email@domain.com\",\r\n * \"token_type\": \"email\",\r\n * \"is_primary\": false\r\n * }\r\n */\r\n return this.client.request('POST', '/v1/user/tokens', payload, true)\r\n }\r\n\r\n setDefaultToken (tokenId) {\r\n return this.client.request('PUT', `/v1/user/tokens/${tokenId}/default`, null, true)\r\n }\r\n\r\n /**\r\n * Deletes a Users Token\r\n * @param {String} tokenId\r\n * @return {Promise<Object>} returns a success\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.client.request('DELETE', `/v1/user/tokens/${tokenId}`, null, true)\r\n }\r\n\r\n /**\r\n * Adds a redeemable the users account\r\n * @param {Object} payload Object containing the redeemable information\r\n * @return {Promise<Object>} returns a Object containing the new redeemable\r\n */\r\n async addRedeemable (payload) {\r\n const { userID } = this.store\r\n return this.client.request('POST', `/v1/users/${userID}/redeemables`, payload, true)\r\n }\r\n\r\n async getPublicUserProfile (userID) {\r\n return this.client.request('GET', `/v1/users/${userID}`, '', true)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n async loginOAuthPopup () {\r\n // Ensure SDK has been initialized\r\n if (!this.store.appID) throw new Error('Please initialize the SDK and set your App ID first.')\r\n\r\n // Generate random state ID\r\n const stateID = Math.random().toString(36).substr(2)\r\n\r\n // Generate the oauth URL\r\n const redirectURI = 'https://login.blockv.io/send-event.html'\r\n const uri = `https://login.blockv.io/?response_type=code&client_id=${this.store.appID}&redirect_uri=${encodeURIComponent(redirectURI)}&scope=all&state=${stateID}`\r\n\r\n // Create popup window\r\n const newWindow = window.open(uri, '_blank', 'left=200,top=200,width=360,height=480,chrome,centerscreen')\r\n if (!newWindow) {\r\n throw new Error('Unable to login, popups have been blocked')\r\n }\r\n // Create pending promise\r\n let promiseResolved = false\r\n let promiseSuccess = null\r\n let promiseFail = null\r\n const promise = new Promise((resolve, reject) => {\r\n promiseSuccess = resolve\r\n promiseFail = reject\r\n })\r\n\r\n // Create window close checker\r\n const closeChecker = setInterval(() => {\r\n // Check if window was closed\r\n if (!newWindow.closed) return false\r\n\r\n // It was, cancel timer\r\n clearInterval(closeChecker)\r\n\r\n // If promise was never resolved, the user must have closed the popup before logging in. Resolve the promise.\r\n if (!promiseResolved) promiseSuccess(false)\r\n }, 250)\r\n\r\n // Create message listener\r\n const messageListener = async (e) => {\r\n // Ensure it's from the correct origin\r\n if (e.origin !== 'https://login.blockv.io') return false\r\n\r\n // Ensure the state matches\r\n if (e.data.state !== stateID) return false\r\n\r\n // Ensure the action matches\r\n if (e.data.action !== 'oauth-response') return false\r\n console.log(e.data)\r\n // Check response type\r\n if (e.data.code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.Blockv.store.appID,\r\n 'code': e.data.code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n\r\n // Done\r\n promiseResolved = true\r\n promiseSuccess(true)\r\n } else {\r\n // Login failed, return error\r\n const err = new Error(e.data.error_text || 'Unable to login.')\r\n err.code = e.data.error\r\n promiseResolved = true\r\n promiseFail(err)\r\n }\r\n\r\n // Cleanup, remove event listener\r\n newWindow.close()\r\n window.removeEventListener('message', messageListener)\r\n clearInterval(closeChecker)\r\n return true\r\n }\r\n\r\n // Attach message listener\r\n window.addEventListener('message', messageListener)\r\n\r\n // Done, return promise\r\n return promise\r\n }\r\n\r\n // Used for manual OAuth Login flow\r\n async loginOauthCode (redirectURI, code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.store.appID,\r\n 'code': code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\nimport fetch from '@brillout/fetch'\nimport jwtDecode from 'jwt-decode'\nimport EventEmitter from '../EventEmitter'\n\n/* global FormData */\n\n/** List of known error messages to replace the server-supplied ones */\nconst ErrorCodes = {\n 2: 'Blank App ID',\n 17: 'Invalid App ID',\n 401: 'Token has Expired',\n 516: 'Invalid Payload',\n 517: 'Invalid Payload',\n 521: 'Token Unavailable',\n 527: 'Invalid Date Format',\n 1004: 'Invalid Request Payload',\n 1701: 'vAtom Unrecognized',\n 1708: 'vAtom Unvailable',\n 2030: 'No user found, Please register an account first.',\n 2031: 'Authentication Failed',\n 2032: 'Login Failed, Please try again',\n 2034: 'Invalid Token',\n 2037: 'Upload Avatar Failed',\n 2049: 'Refresh Token Expired / Not Whitelisted',\n 2051: 'Too many login attempts, Please try again later.',\n 2552: 'Unable To Retrieve Token',\n 2553: 'Token ID Invalid',\n 2562: 'Cannot Delete Primary Token',\n 2563: 'Token Already Confirmed',\n 2564: 'Invalid Verification Code',\n 2566: 'Token Already Confirmed',\n 2567: 'Invalid Verification Code',\n 2569: 'Invalid Token Type',\n 2571: 'Invalid Email',\n 2572: 'Invalid Phone Number'\n}\n\nexport default class Client extends EventEmitter {\n /** @private */\n constructor (bv) {\n super()\n this.Blockv = bv\n this.store = bv.store\n }\n\n /**\n * Sends a request to the backend.\n * @param {string} method The HTTP method, ie. \"GET\", \"POST\"\n * @param {string} endpoint The backend API endpoint, ie. \"/v1/user\"\n * @param {string|object|FormData} payload The request body. Can be null.\n * @param {boolean} auth `true` if this request should contain the current user's access token.\n * @param {object} headers Optional extra HTTP headers to add to the request.\n * @returns {Promise<object>} The server's response payload.\n */\n async request (method, endpoint, payload, auth, headers) {\n // Ensure our access token is up to date, if this is an authenticated request\n if (auth) await this.checkToken()\n\n // Attach headers\n if (!headers) headers = {}\n headers['App-Id'] = this.store.appID\n if (auth) headers['Authorization'] = `Bearer ${this.store.token}`\n\n // Send request\n return this.authRequest(method, endpoint, payload, headers)\n }\n\n /** @private */\n async authRequest (method, endpoint, payload, headers) {\n \n // Send request start event\n let t0 = performance.now();\n let statekey = Math.random().toString(36).substr(2)\n this.emit('requestTimerStart', {\n url: this.store.server + endpoint,\n method,\n event: 'start',\n statekey,\n time: t0\n })\n\n // Check payload type\n let body = null\n if (!payload) {\n // If no body, make it undefined so that fetch() doesn't complain about having a payload on GET requests\n body = undefined\n } else if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n // Don't add Content-Type header, fetch() adds it's own, which is required because it specifies the form data boundary\n body = payload\n } else if (typeof body === 'object') {\n // Convert to JSON\n body = JSON.stringify(payload)\n headers['Content-Type'] = 'application/json'\n } else {\n // Unknown payload type, assume application/json content type, unless specified in extra headers\n body = payload\n if (!extraHeaders['Content-Type']) headers['Content-Type'] = 'application/json'\n }\n \n // try get a response\n let response = null\n let json = null\n try {\n\n // Send request\n response = await fetch(this.store.server + endpoint, { method, body, headers })\n\n // Decode JSON\n json = await response.json()\n\n // Send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n } catch (err) {\n\n // Request failed, send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n throw err\n\n }\n \n \n // Check for server error\n if (json.payload === undefined && json.error === 2051) {\n\n // Check for the special login locked error\n // We need to pull the timestamp that is in the reponse.message to show when they\n // can login agin\n\n // HACK: Pull time from original server error string\n const dateString = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/g.exec(response.message)\n let lockedUntil = new Date(dateString)\n\n // Throw error\n const error = new Error(`Too many login attempts, try again at ${lockedUntil}`)\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n error.lockedUntil = lockedUntil\n throw error\n\n } else if (json && json.payload === undefined && response.status == 200) {\n\n // Sometimes, just sometimes, the backend will send a response outside of the usual `payload` param.\n // In this case, just wrap it.\n json = {\n payload: json\n }\n \n } else if (json.payload === undefined) {\n\n // Throw the error returned by the server\n const error = new Error(ErrorCodes[response.error] || json.message || 'An unknown server error has occurred')\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n throw error\n \n }\n\n // Check for main reactor error payload\n if (json.payload && json.payload.main && json.payload.main.error) {\n // Reactor error\n var err = json.payload.main.error.Code || response.status || 0\n const error = new Error(ErrorCodes[err] || json.payload.main.error.Msg || 'An unknown server error occurred.')\n error.code = err\n error.serverMessage = json.payload.main.error.Msg || ''\n error.httpStatus = response.status\n error.requestID = json.request_id\n throw error\n }\n \n // No error, continue\n return json.payload\n }\n\n /**\n * Uses the refresh token to fetch and store a new access token from the backend.\n * @private\n */\n refreshToken () {\n\n // Check if currently fetching an access token\n if (this.tokenFetchPromise)\n return this.tokenFetchPromise\n\n // Start fetching\n this.tokenFetchPromise = this.request('POST', '/v1/access_token', '', false, {\n Authorization: `Bearer ${this.store.refreshToken}`\n }).then(data => {\n\n // Store it\n this.store.token = data.access_token.token\n this.tokenFetchPromise = null\n\n }).catch(err => {\n\n // Failed to fetch the token! Keep throwing the error up the chain\n console.warn('Failed to fetch a fresh access token from the backend.', err)\n this.tokenFetchPromise = null\n if (err.code == '2049' || err.message.includes('Bad token')) {\n this.Blockv.UserManager.logout(true)\n }\n throw err\n\n })\n\n // Return promise\n return this.tokenFetchPromise\n\n }\n\n /**\n * Checks if the current access token is still valid and has not expired yet. If it is, it will fetch a new one.\n * @private\n * @returns {Promise} Resolves when the access token is valid.\n */\n async checkToken () {\n // define our vars\n let decodedToken\n let nowDate\n let expirationTime\n\n // Catch errors with decoding the current access token\n try {\n decodedToken = jwtDecode(this.store.token)\n expirationTime = (decodedToken.exp * 1000)\n nowDate = Date.now()\n\n // quick calc to determine if the token has expired\n if ((nowDate + 5000) > expirationTime) throw new Error('Token expired.')\n } catch (e) {\n // There was an error with the access token. Fetch a new one.\n return this.refreshToken()\n }\n\n // Done\n return true\n }\n}\n","\"use strict\";\n\nvar assert = require('@brillout/assert');\n\nvar fetch;\n\nif( isBrowser() ) {\n assert.usage(\n window.fetch!==undefined,\n [\n \"This browser doesn't support `fetch` (`window.fetch===undefined`).\",\n \"Is this running in Internet Explorer?\",\n \"Note that the `@brillout/fetch` library doesn't support IE. If you want to support IE then use another fetch library.\"\n ].join('\\n')\n );\n fetch = window.fetch.bind(window);\n} else {\n // We use `eval('require')` instead of `require` to\n // make sure that webpack doesn't bundle `node-fetch`.\n fetch = eval('require')('node-fetch');\n}\n\nmodule.exports = fetch;\n\nfunction isBrowser() {\n return typeof window !== \"undefined\";\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\n\r\nexport default class WebSockets extends EventEmitter {\r\n constructor (store, client, address) {\r\n super()\r\n this.store = store\r\n this.client = client\r\n this.address = address\r\n\r\n /** The WebSocket connection */\r\n this.socket = null\r\n\r\n /** Time until the next retry */\r\n this.delayTime = 1000\r\n\r\n /** If true, the websocket will continue to retry the connection if it fails */\r\n this.shouldRetry = false\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n return this.socket && this.socket.readyState === 1\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<WebSockets>}\r\n */\r\n async connect () {\r\n // Stay connected after this point\r\n this.shouldRetry = true\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // before we connect, make sure the token is valid, or else retry again soon\r\n try {\r\n await this.client.checkToken()\r\n } catch (err) {\r\n console.warn('WebSocket unable to get client token! Will retry soon...')\r\n this.retryConnection()\r\n return this\r\n }\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // Create the websocket\r\n const url = `${this.address}/ws?app_id=${encodeURIComponent(this.store.appID)}&token=${encodeURIComponent(this.store.token)}`\r\n this.socket = new WebSocket(url)\r\n this.socket.addEventListener('open', this.handleConnected.bind(this))\r\n this.socket.addEventListener('message', this.handleMessage.bind(this))\r\n this.socket.addEventListener('error', this.handleError.bind(this))\r\n this.socket.addEventListener('close', this.handleClose.bind(this))\r\n\r\n // Done\r\n return this\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n if (this.socket && this.socket.readyState === 1) {\r\n this.socket.send(JSON.stringify(cmd))\r\n } else {\r\n console.warn('WebSocket: Attempted to send message up, but the socket is not ready.')\r\n }\r\n }\r\n\r\n /**\r\n * The handleMessage function allows the different types of messages to be returned:\r\n * stateUpdate, inventory, activity, and, info.\r\n * @private\r\n * @param {JSON<Object>} e A JSON Object that is passed into the function from connect()\r\n * @return {JSON<Object>} A JSON Object is returned containing the list of chosen message types\r\n */\r\n handleMessage (e) {\r\n const ed = JSON.parse(e.data)\r\n this.trigger('websocket.raw', ed)\r\n\r\n // if the message is a RPC message\r\n if (ed.msg_type === 'rpc') {\r\n this.trigger('websocket.rpc', ed)\r\n }\r\n // if the user only wants state updates\r\n if (ed.msg_type === 'state_update') {\r\n this.trigger('stateUpdate', ed)\r\n }\r\n\r\n // if the user only wants inventory updates\r\n if (ed.msg_type === 'inventory') {\r\n this.trigger('inventory', ed)\r\n }\r\n\r\n // if the user only wants activity updates\r\n if (ed.msg_type === 'my_events') {\r\n this.trigger('activity', ed)\r\n }\r\n\r\n // if the user only wants info updates\r\n if (ed.msg_type === 'info') {\r\n this.trigger('info', ed)\r\n }\r\n\r\n if (ed) {\r\n this.trigger('all', ed)\r\n }\r\n }\r\n\r\n /**\r\n * Lets the User know that the connection is connected\r\n * @private\r\n * @param {Event<SocketStatus>} e no need for inputting the parameter\r\n * @return {Function<connected>} triggers the connected function\r\n */\r\n handleConnected (e) {\r\n this.delayTime = 1000\r\n this.trigger('connected', e)\r\n }\r\n\r\n /**\r\n * When the connection drops or the Websocket is closed.\r\n * This function will auto-retry connection until successfully connected\r\n * @private\r\n * @return {Promise<WebSockets>} returns the connection function\r\n */\r\n retryConnection () {\r\n // Clear previous retry timer\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n }\r\n\r\n // Create a new retry timer\r\n this.retryTimer = setTimeout(() => {\r\n // Clear timer\r\n this.retryTimer = null\r\n\r\n // Check if we want to be connected\r\n if (!this.shouldRetry) {\r\n return\r\n }\r\n\r\n // Increase retry delay for next time\r\n if (this.delayTime < 8000) {\r\n this.delayTime *= 2\r\n }\r\n\r\n // connect again\r\n this.connect()\r\n }, this.delayTime)\r\n }\r\n\r\n /**\r\n * Handles the Web socket error event. We don't need to retry, because handleClose is also called on errors.\r\n * @private\r\n * @param {Error} err The error that happened\r\n */\r\n handleError (err) {\r\n this.socket = null\r\n console.warn('[WebSocket] Connection failed: ' + err.message)\r\n }\r\n\r\n /**\r\n * Handles the Web socket close event\r\n * @private\r\n * @param {Event} e no need for inputting, It is a Websocket Event\r\n */\r\n handleClose () {\r\n this.socket = null\r\n this.retryConnection()\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n // Prevent retrying\r\n this.shouldRetry = false\r\n\r\n // Cancel retry timer if there is one\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n this.retryTimer = null\r\n }\r\n\r\n // Close socket if it's open\r\n if (this.socket) {\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n}\r\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = now\n\nfunction now() {\n return new Date().getTime()\n}\n","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\nimport BLOCKvRegion from './BLOCKvRegion'\nimport DataObject from '../DataObject'\n/**\n * This region plugin provides access to the current user's inventory.\n *\n * To get an instance, call `DataPool.region('inventory')`\n */\nexport default class InventoryRegion extends BLOCKvRegion {\n /** Plugin ID */\n static get id () { return 'inventory' }\n\n /** Constructor */\n constructor (dataPool) {\n super(dataPool)\n // Make sure we have a valid current user\n if (!this.dataPool.sessionInfo || !this.dataPool.sessionInfo.userID) {\n throw new Error('You cannot query the inventory region without being logged in.')\n }\n // Store current user ID\n this.currentUserID = this.dataPool.sessionInfo.userID\n }\n\n /** Our state key is the current user's ID */\n get stateKey () {\n return 'inventory:' + this.currentUserID\n }\n\n /** There should only be one inventory region */\n matches (id, descriptor) {\n return id === 'inventory'\n }\n\n /** Shut down this region if the current user changes */\n onSessionInfoChanged () {\n this.close()\n }\n\n /** \n * Load current state from the server. The process is as follows:\n * \n * 1. Call /hash API to get the current inventory hash, if it matches our local copy then stop.\n * 2. Call /sync API to fetch all vatom sync numbers\n * 3. For all vatoms in our db which is not returned by /sync, remove\n * 4. For all vatoms which are not in our dbb, or whose sync number is different, fetch via individual GET (batched)\n * \n * If at any point the above process throws an error, fall back to the v1 approach:\n * \n * 1. Fetch all vatoms from the /inventory API\n * 2. For any vatoms in our db not returned by /inventory, remove\n * \n */\n async load () {\n\n // Pause websocket events\n this.pauseMessages()\n\n let ids = null\n try {\n\n // Load via new method\n await this.loadV2()\n\n // Synchronize faces and actions\n await this.loadV2FacesActions()\n\n } catch (err) {\n\n // Failed! Try via the v1 method\n console.warn('[DataPool > InventoryRegion] Unable to sync via the new method! Attempting the old method now. Reason:', err)\n ids = await this.loadV1()\n\n }\n\n // Resume websocket events\n this.resumeMessages()\n return ids\n\n }\n\n /** Fetches changed faces and actions since the last vatom was modified. */\n async loadV2FacesActions() {\n\n // Get details\n let templateIDs = []\n let lastStableSync = this.objects.getExtra('last-stable-sync')\n for (let vatom of this.get(false))\n if (!templateIDs.includes(vatom.properties.template))\n templateIDs.push(vatom.properties.template)\n\n console.debug(`[DataPool > InventoryRegion] Synchronizing faces using v2 method... Starting from date ${new Date(lastStableSync).toLocaleString()} and using ${templateIDs.length} templates.`)\n\n // Server only supports a few at a time, so batch these.\n // Convert the server's data to an array of:\n //\n // { \n // operation: \"create\" | \"update\" | \"delete\",\n // type: \"face\" | \"action\",\n // id: \"...\",\n // template: \"...\",\n // data: {...}\n // }\n // \n let maxPerRequest = 100\n let allChanges = []\n for (let i = 0 ; i < templateIDs.length ; i += maxPerRequest) {\n\n // Load next page\n let data = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/actions/changes', {\n templates: templateIDs.slice(i, Math.min(i + maxPerRequest, templateIDs.length)),\n since: lastStableSync\n }, true)\n\n // Add changes for each key\n for (let templateID in data.actions_changes)\n for (let change of data.actions_changes[templateID])\n allChanges.push({ operation: change.operation, template: templateID, id: change.action.name, type: \"action\", data: change.action })\n\n console.debug(`[DataPool > InventoryRegion] Fetched action changes for templates ${i} to ${Math.min(i + maxPerRequest, templateIDs.length)}`)\n\n }\n \n for (let i = 0 ; i < templateIDs.length ; i += maxPerRequest) {\n\n // Load next page\n let data = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/faces/changes', {\n templates: templateIDs.slice(i, Math.min(i + maxPerRequest, templateIDs.length)),\n since: lastStableSync\n }, true)\n\n // Add changes for each key\n for (let templateID in data.faces_changes)\n for (let change of data.faces_changes[templateID])\n allChanges.push({ operation: change.operation, template: templateID, id: change.face.id, type: \"face\", data: change.face })\n\n console.debug(`[DataPool > InventoryRegion] Fetched face changes for templates ${i} to ${Math.min(i + maxPerRequest, templateIDs.length)}`)\n\n }\n\n // Apply changes\n console.debug(`[DataPool > InventoryRegion] Applying ${allChanges.length} face/action changes`)\n let clearCacheForTemplates = []\n for (let change of allChanges) {\n\n // Check if delete or update\n if (change.operation == 'delete') {\n\n // Remove it\n console.log('Removing ' + change.id)\n this.removeObjects([change.id])\n\n } else {\n\n // Create or update it\n console.log('Creating or updating ' + change.id)\n this.addObjects([new DataObject(change.type, change.id, change.data)])\n\n }\n\n // Add template\n if (!clearCacheForTemplates.includes(change.template))\n clearCacheForTemplates.push(change.template)\n\n }\n\n // Clear cache for all affected vatoms\n for (let object of this.objects.values()) {\n\n // Skip if not modified\n let objectTemplate = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].template\n if (!clearCacheForTemplates.includes(objectTemplate))\n continue\n\n // Stop if no cached vatom\n if (!object.cached)\n continue\n \n // Remove cached vatom and notify\n object.cached = null\n this.emit('object.updated', object.id)\n\n }\n\n // Notify region updated, if there were changes\n if (clearCacheForTemplates.length > 0) {\n this.emit('updated')\n }\n \n // Store latest sync date\n this.objects.setExtra('last-stable-sync', Date.now())\n\n }\n\n /** Synchronize inventory using the v2 sync method, ie checking the hash, using sync numbers, etc. */\n async loadV2() {\n\n // Check SDK config to see if the new sync method is disabled\n if (this.dataPool.disableSyncV2)\n throw new Error('V2 synchronization algorithm is disabled in the config.')\n\n // Stop if no vatoms\n if (!Array.from(this.objects.values()).find(obj => obj.type == 'vatom'))\n throw new Error(`V2 synchronization is disabled if the inventory is empty, since it's faster to use the old method for initial sync.`)\n\n // Stop if faces and actions sync date has not bee set\n let lastStableSync = this.objects.getExtra('last-stable-sync')\n if (!lastStableSync)\n throw new Error(`V2 synchronization is disabled, since we don't know when the last stable sync was.`)\n\n // Get current inventory hash and compare with server's\n let currentHash = this.objects.getExtra('hash')\n let serverHashReq = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/hash', null, true)\n if (!serverHashReq.hash)\n throw new Error('The server did not return a hash for our current inventory.')\n if (currentHash && currentHash == serverHashReq.hash)\n return console.log('[DataPool > InventoryRegion] Sync complete, our hash matches the server, no changes needed.')\n \n // We are not in sync with the server. Fetch all vatom IDs and their sync numbers\n var allSyncs = []\n var page = 0\n var nextToken = null\n while (true) {\n\n // Fetch next page of IDs\n page += 1\n console.log(`[DataPool > InventoryRegion] Fetching page ${page} of sync statuses...`)\n let res = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/index?limit=1000' + (nextToken ? `&next_token=${nextToken}` : ''), null, true)\n\n // Add to array\n allSyncs = allSyncs.concat(res.vatoms || [])\n\n // Get next token\n nextToken = res.next_token\n if (!nextToken)\n break\n\n }\n\n // Remove vatoms which are no longer here\n let keysToRemove = Array.from(this.objects.values()).filter(obj => obj.type == 'vatom' && !allSyncs.find(sync => sync.id == obj.id)).map(obj => obj.id)\n this.removeObjects(keysToRemove)\n if (keysToRemove.length > 0)\n console.log(`DataPool > InventoryRegion] Removed ${keysToRemove.length} vatoms which are no longer in the inventory`)\n\n // Check which vatoms are out of sync\n var idsToFetch = []\n for (let syncInfo of allSyncs) {\n\n // Get local vatom\n let vatom = this.getItem(syncInfo.id, false)\n if (!vatom || vatom.sync != syncInfo.sync)\n idsToFetch.push(syncInfo.id)\n\n }\n\n // Fetch vatoms in bulk\n let VatomsPerPage = 100\n let remainingIds = idsToFetch\n while (remainingIds.length > 0) {\n\n // Fetch next 100 vatoms\n let ids = remainingIds.slice(0, VatomsPerPage)\n remainingIds = remainingIds.slice(VatomsPerPage)\n console.log(`[DataPool > InventoryRegion] Fetching ${ids.length} updates, ${remainingIds.length} vatoms left...`)\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids }, true)\n\n // Create list of new objects\n let newObjects = []\n\n // Add vatoms to the list\n for (let v of response.vatoms)\n newObjects.push(new DataObject('vatom', v.id, v))\n\n // Add faces to the list\n for (let f of response.faces)\n newObjects.push(new DataObject('face', f.id, f))\n\n // Add actions to the list\n for (let a of response.actions)\n newObjects.push(new DataObject('action', a.name, a))\n\n // Update the pool\n this.addObjects(newObjects)\n\n }\n\n // Done! Store the inventory hash for next sync\n this.objects.setExtra('hash', serverHashReq.hash)\n console.log(`[DataPool > InventoryRegion] Sync complete! We fetched ${idsToFetch.length} vatoms, and removed ${keysToRemove.length} vatoms.`)\n\n }\n\n /** Synchronize inventory using the v1 method, ie fetching everything using /user/vatom/inventory. */\n async loadV1() {\n\n // Go through all pages on the server, we want _everything_\n let pageCount = 1\n let loadedIDs = []\n while (true) {\n \n // Fetch all vatoms the user owns, via a Discover call\n console.debug(`[DataPool > InventoryRegion] Fetching owned vatoms, page ${pageCount}...`)\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/inventory', { \n parent_id: \"*\",\n limit: 1000,\n page: pageCount\n }, true)\n\n // Create list of new objects\n let newObjects = []\n\n // Add vatoms to the list\n for (let v of response.vatoms) {\n loadedIDs.push(v.id)\n newObjects.push(new DataObject('vatom', v.id, v))\n }\n\n // Add faces to the list\n for (let f of response.faces) {\n loadedIDs.push(f.id)\n newObjects.push(new DataObject('face', f.id, f))\n }\n\n // Add actions to the list\n for (let a of response.actions) {\n loadedIDs.push(a.name)\n newObjects.push(new DataObject('action', a.name, a))\n }\n // Update the pool\n this.addObjects(newObjects)\n\n // Increase page index for next iteration\n pageCount += 1\n\n // Stop if no items were returned\n if (newObjects.length === 0) {\n break\n }\n }\n\n // We have completed a full sync! Store this date.\n this.objects.setExtra('last-stable-sync', Date.now())\n\n // Return array of all items\n return loadedIDs\n\n }\n\n /** @override Called on WebSocket message. */\n async processMessage (msg) {\n // Call super\n super.processMessage(msg)\n // We only handle inventory update messages after this.\n if (msg.msg_type !== 'inventory') {\n return\n }\n\n // Get vatom ID\n let vatomID = msg.payload && msg.payload.id\n if (!vatomID) {\n return console.warn(`[DataPool > BVWebSocketRegion] Got websocket message with no vatom ID in it: `, msg)\n }\n // Check if this is an incoming or outgoing vatom\n if (msg.payload.old_owner === this.currentUserID && msg.payload.new_owner !== this.currentUserID) {\n // Vatom is no longer owned by us\n this.removeObjects([vatomID])\n } else if (msg.payload.old_owner !== this.currentUserID && msg.payload.new_owner === this.currentUserID) {\n\n // Vatom is now our inventory! Fetch vatom payload\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true)\n \n // Add vatom to new objects list\n let objects = []\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(v => objects.push(v))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n // Add new objects\n this.addObjects(objects)\n } else {\n // Logic error, old owner and new owner cannot be the same\n console.warn(`[DataPool > BVWebSocketRegion] Logic error in WebSocket message, old_owner and new_owner shouldn't be the same: ${vatomRef.id}`)\n }\n }\n\n /** \n * Override the get() function to not return vatoms with a different owner. This can happen during a preemptive transfer,\n * where the vatom is given a new owner ID but not removed entirely from this region. The host app should still see it as removed though.\n */\n get(waitUntilStable = true) {\n\n // Pass on if we should wait\n if (waitUntilStable)\n return super.get(true)\n\n // Filter array of vatoms\n return super.get(false).filter(v => v.properties.owner == this.currentUserID)\n\n }\n\n // When a preemptive change occurs, clear our stored hash so that the next inventory refresh will query with the server.\n // Normally this should not be needed since the hash on the server should change as well, but sometimes if an action fails\n // and we fail to rollback the DB we'll be stuck with an outdated vatom.\n willAdd (object) {\n super.willAdd(object)\n this.onObjectPreemptivelyChanged(object) \n }\n \n willUpdateFields (object, newData) {\n super.willUpdateFields(object, newData)\n this.onObjectPreemptivelyChanged(object) \n }\n\n willUpdateField (object, keyPath, oldValue, newValue) {\n super.willUpdateField(object, keyPath, oldValue, newValue)\n this.onObjectPreemptivelyChanged(object)\n }\n \n willRemove (objectOrID) {\n super.willRemove(objectOrID)\n this.objects.setExtra('hash', '')\n }\n \n onObjectPreemptivelyChanged(object) {\n\n // Update object's sync # so that on the next refresh we fetch it's state from the server.\n object.data.sync = -1\n\n // Clear our hash\n this.objects.setExtra('hash', '')\n\n }\n\n}\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms identified by their IDs.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned bby the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * TODO: Retry a few times\r\n *\r\n * To get an instance, call `DataPool.region('ids', [\"id1\", \"id2\"])`\r\n */\r\nexport default class VatomIDRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'ids' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, ids) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store IDs. Sort them to keep our stateKey in check.\r\n this.ids = ids.sort()\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'ids:' + this.ids.join(',')\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n // Check all filters match\r\n if (id !== 'ids') return false\r\n if (!descriptor || descriptor.length !== this.ids.length) return false\r\n for (let i = 0; i < this.ids.length; i++) {\r\n if (descriptor[i] !== this.ids[i]) {\r\n return false\r\n }\r\n }\r\n\r\n // Yes they do\r\n return true\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: this.ids }, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport Discover from '../../../client/Discover'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms that are children of another vatom.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned by the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * To get an instance, call `DataPool.region('children', \"parent-id\")`\r\n */\r\nexport default class VatomChildrenRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'children' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, parentID) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store ID\r\n this.parentID = parentID\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'children:' + this.parentID\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n return id === 'children' && descriptor === this.parentID\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let payload = new Discover().setScope(Discover.FieldParentID, this.parentID).getPayload()\r\n let response = await this.dataPool.Blockv.client.request('POST', '/vatom/discover', payload, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.results.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n var code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n}\n\nmodule.exports = function(str) {\n var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n\n try{\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n};\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n var str = String(input).replace(/=+$/, '');\n if (str.length % 4 == 1) {\n throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = '';\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","const assert = require('./assert');\nconst assert_internal = require('./internal');\nconst assert_usage = require('./usage');\nconst assert_warning = require('./warning');\nconst log = require('./log');\n\nmodule.exports = assert;\nmodule.exports.internal = assert_internal;\nmodule.exports.usage = assert_usage;\nmodule.exports.warning = assert_warning;\nmodule.exports.log = log;\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = reassert;\n\nfunction reassert(condition) {\n // assert\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('reassert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('Reassert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/reassert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\n\nmodule.exports = str => {\n\tif (typeof str !== 'string' || str.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstr = stripAnsi(str);\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst code = str.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input;\n","'use strict';\n\nmodule.exports = () => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[a-zA-Z\\\\d]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, 'g');\n};\n","'use strict';\n/* eslint-disable yoda */\nmodule.exports = x => {\n\tif (Number.isNaN(x)) {\n\t\treturn false;\n\t}\n\n\t// code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tx >= 0x1100 && (\n\t\t\tx <= 0x115f || // Hangul Jamo\n\t\t\tx === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tx === 0x232a || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= x && x <= 0x4dbf) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4e00 <= x && x <= 0xa4c6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xa960 <= x && x <= 0xa97c) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xac00 <= x && x <= 0xd7a3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xf900 <= x && x <= 0xfaff) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xfe10 <= x && x <= 0xfe19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xfe30 <= x && x <= 0xfe6b) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xff01 <= x && x <= 0xff60) ||\n\t\t\t(0xffe0 <= x && x <= 0xffe6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1b000 <= x && x <= 0x1b001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1f200 <= x && x <= 0x1f251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= x && x <= 0x3fffd)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_internal: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_usage: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","\n/**\n * This is Version 2 of the Mempool. This version supports region monitoring, as well as timed updates.\n * Once this class is generic enough and the Data Pool Protocol is implemented, we can split this out into it's own npm module.\n *\n * This aims to follow what is described in https://github.com/BLOCKvIO/Data-Pool-Protocol/blob/master/Data%20Pool%20Protocol.md\n *\n */\nexport default class DataPool {\n constructor () {\n // Region plugins\n this.plugins = [\n require('./plugins/InventoryRegion').default,\n require('./plugins/VatomIDRegion').default,\n require('./plugins/VatomChildrenRegion').default,\n require('./plugins/GeoPosRegion').default\n ]\n\n // Currently active regions\n this.regions = []\n\n // Session information\n this.sessionInfo = {}\n }\n\n /**\n * Fetches or creates a vatom region.\n *\n * @param {string} id The plugin ID.\n * @param {*} descriptor Region-specific filtering information. See plugins for more info.\n */\n region (id, descriptor) {\n // Find existing region\n let region = this.regions.find(r => r.matches(id, descriptor))\n if (region) {\n return region\n }\n // We need to create a new region. Find region plugin\n let Region = this.plugins.find(p => p.id === id)\n if (!Region) {\n throw new Error(`Region with ID '${id}' not found.`)\n }\n // Create and store region\n region = new Region(this, descriptor)\n this.regions.push(region)\n\n // Return new region\n return region\n }\n\n /** Removes the specified region */\n removeRegion (region) {\n for (let i = 0; i < this.regions.length; i++) {\n if (this.regions[i] === region) {\n return this.regions.splice(i, 1)\n }\n }\n }\n\n /**\n * Update session-specific information used by plugins.\n */\n setSessionInfo (info) {\n // Store it\n this.sessionInfo = info\n\n // Notify regions\n for (let r of this.regions) {\n r.onSessionInfoChanged(info)\n }\n }\n\n /** Retrieve information about storage etc */\n stats() {\n\n // Calculate size of local storage\n let sizeBytes = 0\n for (let key in localStorage)\n if (key.startsWith('sync.'))\n sizeBytes += localStorage[key].length\n\n // Done\n return {\n estimatedSize: sizeBytes\n }\n\n }\n\n /** Clear cached items */\n clearCache() {\n\n // Remove local storage cached items\n for (let key in localStorage)\n if (key.startsWith('sync.'))\n localStorage.removeItem(key)\n\n }\n\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport jwtDecode from 'jwt-decode'\r\n\r\n/* global window */\r\n\r\nexport default class UserManager {\r\n constructor (UserApi, store) {\r\n this.UserApi = UserApi\r\n this.store = store\r\n }\r\n\r\n /**\r\n * An Alternate version of the register function\r\n * @param {Object} registration An Object containing all the information to register a user.\r\n * @return {Promise<Object>} returns a success Object containing user specific information\r\n */\r\n register (registration) {\r\n return this.UserApi.register(registration)\r\n }\r\n\r\n /**\r\n * Allows the user to login to the platform\r\n * @param {String} token Email / Phone Number of the user\r\n * @param {String} tokenType Description of the token : ie. \"phone_number\" or \"email\"\r\n * @param {String} password The password that the user has set\r\n * @return {Promise<Object>} returns a object containing the user that has logged in.\r\n */\r\n login (token, tokenType, password) {\r\n return this.UserApi.login(token, tokenType, password)\r\n }\r\n\r\n /**\r\n * Login with an Account without registering. A unique login string is generated by the server.\r\n * @param {String} guestId A String generated by the server used to login.\r\n * A Guest account can be made into a registered account by patching\r\n * @return {Promise<Object>} A Object that contains the guest user that was logged in.\r\n */\r\n loginGuest (guestId) {\r\n return this.UserApi.loginGuest(guestId)\r\n }\r\n\r\n /**\r\n * Logs out the currently logged in user.\r\n * @return {Promise<Object>} Logout success message\r\n */\r\n logout (noRequest = false) {\r\n return this.UserApi.logout(noRequest)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n loginOAuthPopup() {\r\n return this.UserApi.loginOAuthPopup()\r\n }\r\n\r\n /**\r\n * Gets information about the currently logged in user.\r\n * @return {Promise<Object>} Contains the users information such as ID, Avatar, Name etc.\r\n */\r\n getCurrentUser () {\r\n return this.UserApi.getCurrentUser()\r\n }\r\n\r\n /**\r\n * Returns a list of user tokens\r\n * @return {Promise<Object>} An Object containing a list of Email Address's and Phone Number's.\r\n */\r\n getCurrentUserTokens () {\r\n return this.UserApi.getUserTokens()\r\n }\r\n\r\n /**\r\n * Allows the uploading of a new avatar for the user.\r\n * @param {FormData} formData Uploads the FormData containing the new avatar for the user\r\n * @return {Promise<Object>} An Object containing a upload success message\r\n */\r\n uploadAvatar (formData) {\r\n return this.UserApi.uploadAvatar(formData)\r\n }\r\n\r\n /**\r\n * Allows the user to be edited\r\n * @param {Object} payload A payload containg the fields to be changed for the user.\r\n * @return {Promise<Object>} returns a user Object containing the updated users info.\r\n */\r\n updateUser (payload) {\r\n return this.UserApi.updateUser(payload)\r\n }\r\n\r\n /**\r\n * Returns the Access Token\r\n * @return {Promise<Object>} Returns a Object containing the Access Token String.\r\n */\r\n getAccessToken () {\r\n return this.UserApi.getAccessToken()\r\n }\r\n\r\n /**\r\n * Automatically Encodes the Asset Provides URI's\r\n * @param {String} url The URL that needs to be encoded\r\n */\r\n encodeAssetProvider (url) {\r\n return this.UserApi.encodeAssetProvider(url)\r\n }\r\n\r\n /**\r\n * Sends a Verification Token to verify the token is valid\r\n * @param {String} token Phone Number / Email Address\r\n * @param {String} token_type Description of the Token above ie. \"phone_number\" / \"email\"\r\n * @return {} An Email / SMS will be sent to the token with a verification code.\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n return this.UserApi.sendTokenVerification(token, tokenType)\r\n }\r\n\r\n getRefreshToken () {\r\n return this.UserApi.getRefreshToken()\r\n }\r\n\r\n setRefreshToken (token) {\r\n return this.UserApi.setRefreshToken(token)\r\n }\r\n\r\n /**\r\n * Verify a users Token\r\n * @param {Object} verify An Object containing the token, token_type and the verification code.\r\n * {\"token\" : \"someone@blockv.org\", \"token_type\" : \"email\", \"verify_code\" : \"00000\" }\r\n * @return {Promise<Object>} An Object containing the outcome of the verification of the token.\r\n */\r\n verifyUserToken (verify) {\r\n return this.UserApi.verifyUserToken(verify)\r\n }\r\n\r\n /**\r\n * Allows additional tokens to be added to the user\r\n * @param {Object} payload An Object containing the tokens that need to be added to the user.\r\n * @return {Promise<Object>} An Object with the updated user profile.\r\n */\r\n addUserToken (payload) {\r\n return this.UserApi.addUserToken(payload)\r\n }\r\n\r\n /**\r\n * Sets the token to be the primary option\r\n * @param {[type]} tokenID id of the token that needs to be set as the defualt\r\n */\r\n setDefaultToken (tokenID) {\r\n return this.UserApi.setDefaultToken(tokenID)\r\n }\r\n\r\n /**\r\n * Removes a Token from the user's profile.\r\n * @param {String} tokenId ID of the token that needs to be deleted\r\n * @return {Promise<Object>} A Success / Faile object with the outcome of the deletion.\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.UserApi.deleteUserToken(tokenId)\r\n }\r\n\r\n getGuestToken () {\r\n return this.UserApi.getGuestToken()\r\n }\r\n\r\n /**\r\n * Sends a verification token to the token that was supplied.\r\n * NB! this will reset the current password.\r\n * @param {String} token The Token that needs to be reset (Phone Number / Email Address)\r\n * @param {String} token_type Description of the Token to be reset\r\n */\r\n resetPassword (token, tokenType) {\r\n return this.UserApi.resetPassword(token, tokenType)\r\n }\r\n\r\n /**\r\n * Returns a Public User Profile\r\n * @param {String} userID Public User ID\r\n * @return {Promise<Object>} Returns a Public User Object\r\n */\r\n getPublicUserProfile (userID) {\r\n return this.UserApi.getPublicUserProfile(userID)\r\n }\r\n\r\n addRedeemable (payload) {\r\n return this.UserApi.addRedeemable(payload)\r\n }\r\n\r\n /**\r\n * Checked to see if the refresh token is valid\r\n * @return {Boolean} returns True / False if the refresh token is valid\r\n */\r\n get isLoggedIn () {\r\n // stop if no access provider credentials exist\r\n if (!this.store.assetProvider)\r\n return false\r\n // define our vars\r\n let decodedToken\r\n let nowDate\r\n let expirationTime\r\n const { refreshToken } = this.store\r\n // if no refreshToken\r\n if (!refreshToken) {\r\n return false\r\n }\r\n try {\r\n // decode token\r\n decodedToken = jwtDecode(refreshToken)\r\n expirationTime = (decodedToken.exp * 1000)\r\n nowDate = Date.now()\r\n // quick calc to determine if the token has expired\r\n return nowDate < (expirationTime - 30000)\r\n } catch (e) {\r\n // decoding fails\r\n return false\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nimport Vatom from '../../../../model/Vatom'\r\n\r\nexport default class VatomApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n getActions (templateID) {\r\n return this.client.request('GET', `/v1/user/actions/${templateID}`, {}, true)\r\n .then((data) => {\r\n const len = data.length\r\n const actions = []\r\n for (let i = 0; i < len;) {\r\n const action = data[i].name.split('::Action::')\r\n actions.push(\r\n {\r\n template_id: action[0],\r\n action: action[1]\r\n }\r\n )\r\n i += 1\r\n }\r\n return actions\r\n })\r\n }\r\n\r\n performAction (action, payload) {\r\n return this.client.request('POST', `/v1/user/vatom/action/${action}`, payload, true).then(data => data.main.output)\r\n }\r\n\r\n getUserInventory (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/inventory', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n if (template !== 'vatomic::v1::vAtom::Avatar') {\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n getUserVatoms (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/get', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscover (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscover', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscoverGroups (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscovergroups', payload, true).then(data => data)\r\n }\r\n\r\n getVatomChildren (parentID) {\r\n return this.client.request('POST', '/v1/vatom/discover', { \r\n scope: {\r\n key: \"vAtom::vAtomType.parent_id\" ,\r\n value: parentID\r\n },\r\n return: {\r\n type: \"*\",\r\n fields: []\r\n }\r\n }, true).then(data => {\r\n const { actions, faces, results } = data\r\n const vatoms = results\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n setParent (payload) {\r\n return this.client.request('PATCH', '/v1/vatoms', payload, true).then(data => data)\r\n }\r\n\r\n trashVatom (vatomID) {\r\n const payload = {\r\n 'this.id': vatomID\r\n }\r\n return this.client.request('POST', '/v1/user/vatom/trash', payload, true).then(data => data)\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\n\nimport VatomApi from '../../internal/net/rest/api/VatomApi'\nimport GeoPosRegion from '../../internal/DataPool/plugins/GeoPosRegion'\nexport default class Vatoms {\n constructor (blockv) {\n this.Blockv = blockv\n this.vatomApi = new VatomApi(blockv.client)\n }\n\n /**\n * Returns a list of actions that can be performed on a template\n * @param {[String]} templateID Template ID is the vAtom template iD\n * @return {[Promise<Object>]} returns a object containing a list of available actions\n */\n\n getActions (templateID) {\n return this.vatomApi.getActions(templateID)\n }\n\n /**\n * [performAction description]\n * @param {String} vatomId id of the vatom to perform action\n * @param {String} action can be either of the following : Drop, Pickup , Transfer , Require\n * @param {Object} payload contains geo-coordianates or anything else sent along with vatomid\n * @return {Promise<Object>} json payload nested\n */\n\n transferTo (user, actionName = 'Transfer', vatomId) {\n // Check if user is a VatomUser\n var payload = {}\n if (typeof user === 'string') {\n // Check if string is email or phone number\n if (/^0x[a-fA-F0-9]{40}$/.test(user)) {\n // HACK: Sending to an Ethereum address, append \"Eth\" to the action name\n if (!actionName.startsWith('Eth')) {\n actionName = 'Eth' + actionName\n }\n\n // Use this address\n payload['new.owner.eth_address'] = user\n } else if (user.indexOf('@') !== -1) {\n payload['new.owner.email'] = user\n } else if (user.indexOf('+') === 0) {\n payload['new.owner.phone_number'] = user\n } else {\n payload['new.owner.id'] = user\n }\n } else {\n // This must be a VatomUser, fetch the identifying property\n if (user.userID) {\n payload['new.owner.id'] = user.userID\n } else if (user.phoneNumber) {\n payload['new.owner.phone_number'] = user.phoneNumber\n } else if (user.email) {\n payload['new.owner.email'] = user.email\n } else {\n return Promise.reject({ code: 'INVALID_PARAMETER', message: `The user object supplied didn't have any identifying fields. It must have either a userID, an email, or a phoneNumber.` })\n }\n }\n\n // Send request\n return this.performAction(vatomId, actionName, payload)\n }\n\n performAction (vatomId, action, payload) {\n\n // Create pre-emptive action in DataPool for known actions\n let undos = []\n switch (action) {\n case 'Transfer':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\n break\n\n case 'Drop':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.geo_pos', payload))\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', true))\n break\n\n case 'Pickup':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', false))\n break\n\n case 'Redeem':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\n break\n\n default:\n break\n }\n\n // Perform the action\n return this.vatomApi.performAction(action, Object.assign({ 'this.id': vatomId }, payload)).catch(err => {\n\n // An error occurred, undo preemptive actions\n undos.map(u => u())\n\n // Workaround: If error was an attempt to pick up a vatom but the vatom is already picked up, it's possible\n // that the GeoPos region missed an update. Notify all GeoPos regions that this vatom is no longer available.\n if (err.code == 1645)\n this.Blockv.dataPool.regions.filter(r => r instanceof GeoPosRegion).forEach(r => r.preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', false))\n\n // Pass on the error\n throw err\n\n })\n\n }\n\n /** Called to combine the specified vatom into this one. Note that some faces override the Combine action,\n * so in order to get those actions as well you should use `combineWith()` on `VatomView` instead. */\n combineWith (vatom, otherVatom) {\n // Pre-emptively set the parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(otherVatom.id, 'vAtom::vAtomType.parent_id', vatom.id)\n // Set parent\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [otherVatom.id], parent_id: vatom.id }, true).catch(err => {\n // Failed, reset vatom reference\n undo()\n throw err\n })\n }\n\n /** Called to remove all child vatoms from this vatom */\n split (vatom) {\n // Get vatom's parent ID\n let newParentID = vatom.properties.parent_id || '.'\n // Get all children\n return this.getVatomChildren(vatom.id).then(children => {\n // Remove parent IDs\n return Promise.all(children.map(child => {\n // Pre-emptively update parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(child.id, 'vAtom::vAtomType.parent_id', newParentID)\n // Do patch\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [child.id], parent_id: newParentID }, true).catch(err => {\n // Failed, reset vatom reference\n undo()\n throw err\n })\n }))\n })\n }\n\n /**\n * Gets the current users vAtom inventory\n * @return {Promise<Array<Object>>} return a list of JSON Objects that contain the users inventory\n * No parameters are required for this call\n */\n\n getUserInventory () {\n return this.Blockv.dataPool.region('inventory').get()\n }\n\n /**\n * Gets a vAtom based on the vAtom ID\n * @param {[String]} vatomId ID of the vAtom that is being searched for\n * @return {[Promise<Object>} returns a JSON Object containing the vAtom.\n */\n\n async getUserVatoms (vatomIds) {\n // Make sure it's an array\n if (typeof vatomIds === 'string') {\n vatomIds = [vatomIds]\n }\n\n // Load all from inventory\n let vatoms = []\n for (let id of vatomIds) {\n let vatom = await this.Blockv.dataPool.region('inventory').getItem(id)\n if (vatom) {\n vatoms.push(vatom)\n } else {\n break\n }\n }\n // If all found, stop\n if (vatoms.length === vatomIds.length) {\n return vatoms\n }\n\n // Not all the vatoms were in the inventory, create a new region\n return this.Blockv.dataPool.region('ids', vatomIds).get()\n }\n\n /**\n * Gets a list of vAtoms based on the coordinates.\n * @param {[Object]} bottomLeft containing a \"lat\" and \"lon\" coordinate\n * @param {[Object]} topRight containing a \"lat\" and \"lon\" coordinate\n * @param {[String]} filter defaults to \"all\"\n * @return {[Promise<Object>} returns a list of vAtoms, faces and actions\n */\n geoDiscover (bottomLeft, topRight, filter = 'vatoms') {\n const payload = {\n bottom_left: {\n lat: bottomLeft.lat,\n lon: bottomLeft.lon\n },\n top_right: {\n lat: topRight.lat,\n lon: topRight.lon\n },\n filter\n }\n\n return this.vatomApi.geoDiscover(payload)\n }\n\n /**\n * Discover groups of vAtoms with Keys\n * @param {Object} bottomLeft contains a lat and lon coordinate.\n * Coordinate must be integers and not string\n * @param {Object} topRight contains a lat and lon coordinate.\n * Coordinate must be integers and not strings\n * @param {Integer} precision 1 - 12 defines the accuracy of the combination.\n * @param {String} filter defaults to all\n * @return {Promise<Object>} Returns a list of groups\n */\n geoDiscoverGroups (bottomLeft, topRight, precision = 2, filter = 'all') {\n const payload = {\n bottom_left: {\n lat: bottomLeft.lat,\n lon: bottomLeft.lon\n },\n top_right: {\n lat: topRight.lat,\n lon: topRight.lon\n },\n precision,\n filter\n }\n\n return this.vatomApi.geoDiscoverGroups(payload)\n }\n\n /**\n *\n * @param {String} parentID ID of the vatom that you would like to list the children\n * @returns {Promise<Vatom[]>} Array of vatoms\n */\n getVatomChildren (parentID) {\n\n // Check if vatom is in the inventory\n if (this.Blockv.dataPool.region('inventory').has(parentID)) {\n\n // It is, read children from inventory region\n return this.Blockv.dataPool.region('inventory').get().then(children => {\n return children.filter(v => v.properties.parent_id === parentID)\n })\n\n }\n\n // Not in inventory region, read from API\n return this.vatomApi.getVatomChildren(parentID)\n \n }\n\n setParentID(childID, newParentID) {\n\n // Pre-emptively update parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(childID, 'vAtom::vAtomType.parent_id', newParentID)\n\n // Do patch\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [childID], parent_id: newParentID }, true).catch(err => {\n\n // Failed, reset vatom reference\n undo()\n throw err\n\n })\n\n }\n\n /**\n * \n * @param {*} vatomIds Array of vatoms that will be changed \n * @param {*} parentId ID or . to set the children to\n */\n setParent (payload) {\n let parentPayload = {\n ids: [payload.id],\n parent_id: payload.parent_id\n }\n return this.vatomApi.setParent(parentPayload)\n }\n\n /**\n * Removes the specified vAtom from the current user's inventory\n * @param {String} vatomID Id of the vAtom you want to remove\n * @return {Promise<Object>} An object containing a success message\n */\n trashVatom (vatomID) {\n let undos = []\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomID, 'vAtom::vAtomType.owner', '.'))\n return this.vatomApi.trashVatom(vatomID).catch(err => {\n undos.map(u => u())\n throw err\n })\n }\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nexport default class Activity {\r\n constructor (activityApi) {\r\n this.activityApi = activityApi\r\n }\r\n\r\n /**\r\n * Returns a list of messages of activity\r\n * @return {Promise<Object>} JSON array containing all the activity from the user.\r\n */\r\n myThreads () {\r\n return this.activityApi.threads()\r\n }\r\n\r\n /**\r\n * Returns a single activity message thread\r\n * @param {String} name Unique identifier from the myThreads response\r\n * @return {Promise<Object>} returns a detailed object containing the thread\r\n */\r\n myThreadMessages (name) {\r\n return this.activityApi.threadMessages(name)\r\n }\r\n\r\n /**\r\n * Send a message to a user that appears in the \"activity\" tab\r\n * @param {String} id id of the user that is going to receive the message\r\n * @param {String} message Message that will get sent to the user\r\n * @return {Promise<Object>} Success Object\r\n */\r\n sendMessage (id, message) {\r\n return this.activityApi.sendMessage(id, message)\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nexport default class ActivityApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n threads () {\r\n return this.client.request('POST', '/v1/activity/mythreads', {}, true).then(data => data.threads)\r\n }\r\n\r\n threadMessages (name) {\r\n const payload = {\r\n name,\r\n cursor: '',\r\n count: 100\r\n }\r\n return this.client.request('POST', '/v1/activity/mythreadmessages', payload, true).then(data => data)\r\n }\r\n\r\n sendMessage (id, message) {\r\n const payload = {\r\n message,\r\n id\r\n }\r\n return this.client.request('POST', '/v1/user/message', payload, true).then(data => data)\r\n }\r\n}\r\n","//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\nimport WebSockets from './WebSockets'\r\n\r\n// This is a wrapper around the WebSockets class, which allows for multiple sockets to be active at once.\r\n// It matches the API of that class exactly.\r\nexport default class MultiWebSockets extends EventEmitter {\r\n\r\n constructor (store, client) {\r\n super()\r\n\r\n this.store = store\r\n this.client = client\r\n this.sockets = []\r\n\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n\r\n // Return true if any of the websockets are open\r\n return !!this.sockets.find(s => s.isOpen)\r\n\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<MultiWebSockets>}\r\n */\r\n connect() {\r\n\r\n // Create sockets if needed\r\n if (this.sockets.length == 0) {\r\n\r\n // Get array of socket addresses\r\n let addresses = this.store.websocketAddress\r\n if (typeof addresses == 'string')\r\n addresses = [addresses]\r\n\r\n // Create sockets\r\n for (let address of addresses)\r\n this.sockets.push(new WebSockets(this.store, this.client, address))\r\n\r\n // Override the newly created socket's trigger() and emit() to instead trigger and emit on us\r\n for (let socket of this.sockets) {\r\n socket.trigger = this.trigger.bind(this)\r\n socket.triggerEvent = this.triggerEvent.bind(this)\r\n socket.emit = this.emit.bind(this)\r\n }\r\n\r\n }\r\n\r\n // Connect them all\r\n return Promise.all(this.sockets.map(s => s.connect())).then(e => this)\r\n\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n \r\n // Send message to all sockets\r\n for (let socket of this.sockets)\r\n socket.sendMessage(cmd)\r\n\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n * Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n \r\n // Close all sockets\r\n for (let socket of this.sockets) socket.close()\r\n this.sockets = []\r\n \r\n }\r\n\r\n}","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport DataPool from '../internal/DataPool'\r\nimport Store from '../internal/repo/Store'\r\nimport UserManager from './manager/UserManager'\r\nimport UserApi from '../internal/net/rest/api/UserApi'\r\nimport Vatoms from './manager/Vatoms'\r\nimport Activity from './manager/Activity'\r\nimport ActivityApi from '../internal/net/rest/api/ActivityApi'\r\nimport Client from '../internal/net/Client'\r\nimport MultiWebSockets from './manager/MultiWebSockets'\r\nimport EventEmitter from '../internal/EventEmitter';\r\n\r\nexport default class Blockv extends EventEmitter {\r\n constructor (payload) {\r\n super()\r\n const prefix = payload.prefix || payload.appID\r\n\r\n this.store = new Store(prefix)\r\n this.store.appID = payload.appID\r\n this.store.server = payload.server || 'https://api.blockv.io'\r\n this.store.websocketAddress = payload.websocketAddress || 'wss://newws.blockv.io'\r\n\r\n this.dataPool = new DataPool(this)\r\n this.dataPool.Blockv = this\r\n this.dataPool.disableSyncV2 = payload.disableSyncV2\r\n this.client = new Client(this)\r\n\r\n const userApi = new UserApi(this)\r\n const activityApi = new ActivityApi(this.client)\r\n\r\n this.Activity = new Activity(activityApi)\r\n this.WebSockets = new MultiWebSockets(this.store, this.client)\r\n this.UserManager = new UserManager(userApi, this.store)\r\n this.Vatoms = new Vatoms(this)\r\n\r\n if (this.UserManager.isLoggedIn) {\r\n this.dataPool.setSessionInfo({ userID: this.store.userID, client: this.client })\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n// This is the entry point when importing this library into a web app.\r\n\r\nexport { default } from './client/Blockv'\r\nexport { default as Discover } from './client/Discover'\r\n\r\n// Attach SDK version information to the window\r\nif (typeof window != 'undefined') window.BlockvSDKInfo = {\r\n version: require('../package.json').version\r\n}"],"sourceRoot":""}
\No newline at end of file