{
  "version": 3,
  "sources": ["../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/base64-vlq.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/util.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/array-set.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/mapping-list.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-generator.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/binary-search.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/quick-sort.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-map-consumer.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/lib/source-node.js", "../../../../node_modules/.pnpm/source-map@0.6.1/node_modules/source-map/source-map.js", "../../../../node_modules/.pnpm/buffer-from@1.1.2/node_modules/buffer-from/index.js", "../../../../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support/source-map-support.js", "../../../../node_modules/.pnpm/emoji-regex@10.6.0/node_modules/emoji-regex/index.js", "../../../../node_modules/.pnpm/get-caller-file@2.0.5/node_modules/get-caller-file/index.ts", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNil.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObject.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_freeGlobal.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_root.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Symbol.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getRawTag.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_objectToString.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseGetTag.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isArray.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObjectLike.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isString.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isNumber.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isFunction.js", "../../../../node_modules/.pnpm/list@2.0.19/node_modules/list/dist/index.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/lodash.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/lodash.min.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/fp/_mapping.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/fp/placeholder.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/fp/_baseConvert.js", "../../../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/fp.js", "../../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/json-typings.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/base64.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/protobufjs-utf8.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/binary-format-contract.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/goog-varint.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/pb-long.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/binary-reader.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/assert.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/binary-writer.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/json-format-contract.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/message-type-contract.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/lower-camel-case.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-info.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/oneof.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-type-check.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-long-convert.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-json-reader.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-json-writer.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-scalar-default.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-binary-reader.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-binary-writer.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-create.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-merge-partial.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-equals.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/message-type.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/reflection-contains-message-type.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/enum-object.js", "../../../../node_modules/.pnpm/@protobuf-ts+runtime@2.11.1/node_modules/@protobuf-ts/runtime/build/commonjs/index.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/es5.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/util.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/schedule.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/queue.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/async.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/errors.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/thenables.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/promise_array.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/context.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/debuggability.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/catch_filter.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/finally.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/nodeback.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/method.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/bind.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/cancel.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/direct_resolve.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/synchronous_inspection.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/join.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/call_get.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/generators.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/map.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/nodeify.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/promisify.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/props.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/race.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/reduce.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/settle.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/some.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/timers.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/using.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/any.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/each.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/filter.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/promise.js", "../../../../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird/js/release/bluebird.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/constants.js", "../../../../node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node-gyp-build.js", "../../../../node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/index.js", "../../../../node_modules/.pnpm/bufferutil@4.1.0/node_modules/bufferutil/fallback.js", "../../../../node_modules/.pnpm/bufferutil@4.1.0/node_modules/bufferutil/index.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/buffer-util.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/limiter.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/permessage-deflate.js", "../../../../node_modules/.pnpm/utf-8-validate@6.0.6/node_modules/utf-8-validate/fallback.js", "../../../../node_modules/.pnpm/utf-8-validate@6.0.6/node_modules/utf-8-validate/index.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/validation.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/receiver.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/sender.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/event-target.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/extension.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/websocket.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/stream.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/subprotocol.js", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/lib/websocket-server.js", "../../../../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support/register.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/lib/platform-shims/esm.mjs", "../../../../node_modules/.pnpm/cliui@9.0.1/node_modules/cliui/build/lib/index.js", "../../../../node_modules/.pnpm/ansi-regex@6.2.2/node_modules/ansi-regex/index.js", "../../../../node_modules/.pnpm/strip-ansi@7.2.0/node_modules/strip-ansi/index.js", "../../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup-data.js", "../../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/utilities.js", "../../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/lookup.js", "../../../../node_modules/.pnpm/get-east-asian-width@1.6.0/node_modules/get-east-asian-width/index.js", "../../../../node_modules/.pnpm/string-width@7.2.0/node_modules/string-width/index.js", "../../../../node_modules/.pnpm/ansi-styles@6.2.3/node_modules/ansi-styles/index.js", "../../../../node_modules/.pnpm/wrap-ansi@9.0.2/node_modules/wrap-ansi/index.js", "../../../../node_modules/.pnpm/cliui@9.0.1/node_modules/cliui/index.mjs", "../../../../node_modules/.pnpm/escalade@3.2.0/node_modules/escalade/sync/index.mjs", "../../../../node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/index.js", "../../../../node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/string-utils.js", "../../../../node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/tokenize-arg-string.js", "../../../../node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser-types.js", "../../../../node_modules/.pnpm/yargs-parser@22.0.0/node_modules/yargs-parser/build/lib/yargs-parser.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/process-argv.js", "../../../../node_modules/.pnpm/y18n@5.0.8/node_modules/y18n/build/lib/platform-shims/node.js", "../../../../node_modules/.pnpm/y18n@5.0.8/node_modules/y18n/build/lib/index.js", "../../../../node_modules/.pnpm/y18n@5.0.8/node_modules/y18n/index.mjs", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/typings/common-types.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/is-promise.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/yerror.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/parse-command.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/argsert.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/middleware.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/maybe-async-result.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/command.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/obj-filter.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/set-blocking.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/usage.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/completion-templates.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/completion.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/levenshtein.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/validation.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/utils/apply-extends.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/build/lib/yargs-factory.js", "../../../../node_modules/.pnpm/yargs@18.0.0/node_modules/yargs/index.mjs", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/errors/NestedError.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/guards/primitive.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/guards/applyTypeGuardExtras.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/guards/assert.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/guards/guard-tools.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/helpers/Deferred.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/Level.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Value.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Comparison.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/toStringHelper.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Contract.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/ISet.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/LinkedList.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/internal/hamt_plus/hamt.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/HashSet.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Lazy.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Stream.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/SeqHelpers.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/HashMap.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Vector.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/decorators/Bind.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Either.ts", "../../../../node_modules/.pnpm/@3fv+guard@1.4.39/node_modules/@3fv/guard/src/guards/primitive.ts", "../../../../node_modules/.pnpm/@3fv+guard@1.4.39/node_modules/@3fv/guard/src/applyTypeGuardExtras.ts", "../../../../node_modules/.pnpm/@3fv+guard@1.4.39/node_modules/@3fv/guard/src/guards/assert.ts", "../../../../node_modules/.pnpm/@3fv+guard@1.4.39/node_modules/@3fv/guard/src/Tools.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Option.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Tuple2.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Predicate.ts", "../../../../node_modules/.pnpm/@3fv+prelude-ts@0.8.42/node_modules/@3fv/prelude-ts/src/Function.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/Logger.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/util.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/LoggingManager.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/appenders/ConsoleAppender.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/context/LogContextProvider.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/context/LogContextContainer.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/InternalLogger.ts", "../../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.mjs", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/appenders/aws-firehose/AWSFirehoseCredentialManager.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/appenders/aws-firehose/AWSFirehoseAppender.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/appenders/push/PushLogRecordsAppender.ts", "../../../../node_modules/.pnpm/@wireio+shared@1.0.66/node_modules/@wireio/shared/src/logging/getLogger.ts", "../../../debugging-client-shared/src/DebuggingClient.ts", "../../../debugging-client-shared/src/DebuggingServerClient.ts", "../../../debugging-shared/src/opp/EnvelopeRecordReader.ts", "../../../../node_modules/.pnpm/@wireio+opp-typescript-models@1.0.39/node_modules/@wireio/opp-typescript-models/lib/esm/sysio/opp/attestations/attestations.js", "../../../../node_modules/.pnpm/@wireio+opp-typescript-models@1.0.39/node_modules/@wireio/opp-typescript-models/lib/esm/sysio/opp/types/types.js", "../../../../node_modules/.pnpm/@wireio+opp-typescript-models@1.0.39/node_modules/@wireio/opp-typescript-models/lib/esm/sysio/opp/opp.js", "../../../../node_modules/.pnpm/@wireio+opp-typescript-models@1.0.39/node_modules/@wireio/opp-typescript-models/lib/esm/sysio/opp/bootstrap/bootstrap.js", "../../../../node_modules/.pnpm/@wireio+opp-typescript-models@1.0.39/node_modules/@wireio/opp-typescript-models/lib/esm/sysio/opp/debugging/debugging.js", "../../../debugging-shared/src/opp/EnvelopeStorageKey.ts", "../../../debugging-shared/src/opp/Plainify.ts", "../../../debugging-shared/src/opp/OPPDebugTypes.ts", "../../../debugging-shared/src/processes/ProcessMonitorTypes.ts", "../../../debugging-shared/src/rpc/Paths.ts", "../../../debugging-shared/src/rpc/StreamProtocol.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/internals/symbols.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/internals/helpers.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/is-matching.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/patterns.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/errors.ts", "../../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/src/match.ts", "../../../debugging-shared/src/utils/JsonLogRecord.ts", "../../../debugging-shared/src/utils/LineIndex.ts", "../../../debugging-shared/src/utils/PathResolvers.ts", "../../../debugging-shared/src/utils/PidSources.ts", "../../../cluster-tool-shared/src/cluster/ClusterFiles.ts", "../../../cluster-tool-shared/src/cluster/ClusterState.ts", "../../../cluster-tool-shared/src/config/BindConfig.ts", "../../../cluster-tool-shared/src/config/ClusterConfig.ts", "../../../debugging-shared/src/utils/ProtobufHelpers.ts", "../../../debugging-shared/src/DebuggingDefaults.ts", "../../../debugging-client-shared/src/rpc/JsonRPCClient.ts", "../../../debugging-client-shared/src/local/LocalFileDebuggingClient.ts", "../../../debugging-client-shared/src/subscriptions/DebuggingSubscription.ts", "../../../debugging-client-shared/src/net/NetDebuggingClient.ts", "../../../../node_modules/.pnpm/ws@8.21.1_bufferutil@4.1.0_utf-8-validate@6.0.6/node_modules/ws/wrapper.mjs", "../../../debugging-client-shared/src/net/WebSocketStreamClient.ts", "../../src/EnvelopeRenderer.ts", "../../src/formatter.ts", "../../src/logger.ts", "../../src/commands/list.ts", "../../src/commands/inspect.ts", "../../src/utils/asyncUtils.ts", "../../src/commands/tail.ts", "../../src/cli.ts"],
  "sourcesContent": ["/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   \u201Csources\u201D entry.  This value is prepended to the individual\n    //   entries in the \u201Csource\u201D field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   \u201CsourceRoot\u201D, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator({\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    });\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      throw new Error('Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      }));\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n      return {\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : this._names.at(mapping.name)\n      };\n    }, this).forEach(aCallback, context);\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        // Because each offset is encoded relative to the previous one,\n        // many segments often have the same encoding. We can exploit this\n        // fact by caching the parsed variable length fields of each segment,\n        // allowing us to avoid a second parse if we encounter the same\n        // segment again.\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = cachedSegments[str];\n        if (segment) {\n          index += str.length;\n        } else {\n          segment = [];\n          while (index < end) {\n            base64VLQ.decode(aStr, index, temp);\n            value = temp.value;\n            index = temp.rest;\n            segment.push(value);\n          }\n\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\n    quickSort(originalMappings, util.compareByOriginalPositions);\n    this.__originalMappings = originalMappings;\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "/* eslint-disable node/no-deprecated-api */\n\nvar toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer !== 'undefined' &&\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (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  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n", "var SourceMapConsumer = require('source-map').SourceMapConsumer;\nvar path = require('path');\n\nvar fs;\ntry {\n  fs = require('fs');\n  if (!fs.existsSync || !fs.readFileSync) {\n    // fs doesn't have all methods we need\n    fs = null;\n  }\n} catch (err) {\n  /* nop */\n}\n\nvar bufferFrom = require('buffer-from');\n\n/**\n * Requires a module which is protected against bundler minification.\n *\n * @param {NodeModule} mod\n * @param {string} request\n */\nfunction dynamicRequire(mod, request) {\n  return mod.require(request);\n}\n\n// Only install once if called multiple times\nvar errorFormatterInstalled = false;\nvar uncaughtShimInstalled = false;\n\n// If true, the caches are reset before a stack trace formatting operation\nvar emptyCacheBetweenOperations = false;\n\n// Supports {browser, node, auto}\nvar environment = \"auto\";\n\n// Maps a file path to a string containing the file contents\nvar fileContentsCache = {};\n\n// Maps a file path to a source map for that file\nvar sourceMapCache = {};\n\n// Regex for detecting source maps\nvar reSourceMap = /^data:application\\/json[^,]+base64,/;\n\n// Priority list of retrieve handlers\nvar retrieveFileHandlers = [];\nvar retrieveMapHandlers = [];\n\nfunction isInBrowser() {\n  if (environment === \"browser\")\n    return true;\n  if (environment === \"node\")\n    return false;\n  return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === \"renderer\"));\n}\n\nfunction hasGlobalProcessEventEmitter() {\n  return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function'));\n}\n\nfunction globalProcessVersion() {\n  if ((typeof process === 'object') && (process !== null)) {\n    return process.version;\n  } else {\n    return '';\n  }\n}\n\nfunction globalProcessStderr() {\n  if ((typeof process === 'object') && (process !== null)) {\n    return process.stderr;\n  }\n}\n\nfunction globalProcessExit(code) {\n  if ((typeof process === 'object') && (process !== null) && (typeof process.exit === 'function')) {\n    return process.exit(code);\n  }\n}\n\nfunction handlerExec(list) {\n  return function(arg) {\n    for (var i = 0; i < list.length; i++) {\n      var ret = list[i](arg);\n      if (ret) {\n        return ret;\n      }\n    }\n    return null;\n  };\n}\n\nvar retrieveFile = handlerExec(retrieveFileHandlers);\n\nretrieveFileHandlers.push(function(path) {\n  // Trim the path to make sure there is no extra whitespace.\n  path = path.trim();\n  if (/^file:/.test(path)) {\n    // existsSync/readFileSync can't handle file protocol, but once stripped, it works\n    path = path.replace(/file:\\/\\/\\/(\\w:)?/, function(protocol, drive) {\n      return drive ?\n        '' : // file:///C:/dir/file -> C:/dir/file\n        '/'; // file:///root-dir/file -> /root-dir/file\n    });\n  }\n  if (path in fileContentsCache) {\n    return fileContentsCache[path];\n  }\n\n  var contents = '';\n  try {\n    if (!fs) {\n      // Use SJAX if we are in the browser\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', path, /** async */ false);\n      xhr.send(null);\n      if (xhr.readyState === 4 && xhr.status === 200) {\n        contents = xhr.responseText;\n      }\n    } else if (fs.existsSync(path)) {\n      // Otherwise, use the filesystem\n      contents = fs.readFileSync(path, 'utf8');\n    }\n  } catch (er) {\n    /* ignore any errors */\n  }\n\n  return fileContentsCache[path] = contents;\n});\n\n// Support URLs relative to a directory, but be careful about a protocol prefix\n// in case we are in the browser (i.e. directories may start with \"http://\" or \"file:///\")\nfunction supportRelativeURL(file, url) {\n  if (!file) return url;\n  var dir = path.dirname(file);\n  var match = /^\\w+:\\/\\/[^\\/]*/.exec(dir);\n  var protocol = match ? match[0] : '';\n  var startPath = dir.slice(protocol.length);\n  if (protocol && /^\\/\\w\\:/.test(startPath)) {\n    // handle file:///C:/ paths\n    protocol += '/';\n    return protocol + path.resolve(dir.slice(protocol.length), url).replace(/\\\\/g, '/');\n  }\n  return protocol + path.resolve(dir.slice(protocol.length), url);\n}\n\nfunction retrieveSourceMapURL(source) {\n  var fileData;\n\n  if (isInBrowser()) {\n     try {\n       var xhr = new XMLHttpRequest();\n       xhr.open('GET', source, false);\n       xhr.send(null);\n       fileData = xhr.readyState === 4 ? xhr.responseText : null;\n\n       // Support providing a sourceMappingURL via the SourceMap header\n       var sourceMapHeader = xhr.getResponseHeader(\"SourceMap\") ||\n                             xhr.getResponseHeader(\"X-SourceMap\");\n       if (sourceMapHeader) {\n         return sourceMapHeader;\n       }\n     } catch (e) {\n     }\n  }\n\n  // Get the URL of the source map\n  fileData = retrieveFile(source);\n  var re = /(?:\\/\\/[@#][\\s]*sourceMappingURL=([^\\s'\"]+)[\\s]*$)|(?:\\/\\*[@#][\\s]*sourceMappingURL=([^\\s*'\"]+)[\\s]*(?:\\*\\/)[\\s]*$)/mg;\n  // Keep executing the search to find the *last* sourceMappingURL to avoid\n  // picking up sourceMappingURLs from comments, strings, etc.\n  var lastMatch, match;\n  while (match = re.exec(fileData)) lastMatch = match;\n  if (!lastMatch) return null;\n  return lastMatch[1];\n};\n\n// Can be overridden by the retrieveSourceMap option to install. Takes a\n// generated source filename; returns a {map, optional url} object, or null if\n// there is no source map.  The map field may be either a string or the parsed\n// JSON object (ie, it must be a valid argument to the SourceMapConsumer\n// constructor).\nvar retrieveSourceMap = handlerExec(retrieveMapHandlers);\nretrieveMapHandlers.push(function(source) {\n  var sourceMappingURL = retrieveSourceMapURL(source);\n  if (!sourceMappingURL) return null;\n\n  // Read the contents of the source map\n  var sourceMapData;\n  if (reSourceMap.test(sourceMappingURL)) {\n    // Support source map URL as a data url\n    var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);\n    sourceMapData = bufferFrom(rawData, \"base64\").toString();\n    sourceMappingURL = source;\n  } else {\n    // Support source map URLs relative to the source URL\n    sourceMappingURL = supportRelativeURL(source, sourceMappingURL);\n    sourceMapData = retrieveFile(sourceMappingURL);\n  }\n\n  if (!sourceMapData) {\n    return null;\n  }\n\n  return {\n    url: sourceMappingURL,\n    map: sourceMapData\n  };\n});\n\nfunction mapSourcePosition(position) {\n  var sourceMap = sourceMapCache[position.source];\n  if (!sourceMap) {\n    // Call the (overrideable) retrieveSourceMap function to get the source map.\n    var urlAndMap = retrieveSourceMap(position.source);\n    if (urlAndMap) {\n      sourceMap = sourceMapCache[position.source] = {\n        url: urlAndMap.url,\n        map: new SourceMapConsumer(urlAndMap.map)\n      };\n\n      // Load all sources stored inline with the source map into the file cache\n      // to pretend like they are already loaded. They may not exist on disk.\n      if (sourceMap.map.sourcesContent) {\n        sourceMap.map.sources.forEach(function(source, i) {\n          var contents = sourceMap.map.sourcesContent[i];\n          if (contents) {\n            var url = supportRelativeURL(sourceMap.url, source);\n            fileContentsCache[url] = contents;\n          }\n        });\n      }\n    } else {\n      sourceMap = sourceMapCache[position.source] = {\n        url: null,\n        map: null\n      };\n    }\n  }\n\n  // Resolve the source URL relative to the URL of the source map\n  if (sourceMap && sourceMap.map && typeof sourceMap.map.originalPositionFor === 'function') {\n    var originalPosition = sourceMap.map.originalPositionFor(position);\n\n    // Only return the original position if a matching line was found. If no\n    // matching line is found then we return position instead, which will cause\n    // the stack trace to print the path and line for the compiled file. It is\n    // better to give a precise location in the compiled file than a vague\n    // location in the original file.\n    if (originalPosition.source !== null) {\n      originalPosition.source = supportRelativeURL(\n        sourceMap.url, originalPosition.source);\n      return originalPosition;\n    }\n  }\n\n  return position;\n}\n\n// Parses code generated by FormatEvalOrigin(), a function inside V8:\n// https://code.google.com/p/v8/source/browse/trunk/src/messages.js\nfunction mapEvalOrigin(origin) {\n  // Most eval() calls are in this format\n  var match = /^eval at ([^(]+) \\((.+):(\\d+):(\\d+)\\)$/.exec(origin);\n  if (match) {\n    var position = mapSourcePosition({\n      source: match[2],\n      line: +match[3],\n      column: match[4] - 1\n    });\n    return 'eval at ' + match[1] + ' (' + position.source + ':' +\n      position.line + ':' + (position.column + 1) + ')';\n  }\n\n  // Parse nested eval() calls using recursion\n  match = /^eval at ([^(]+) \\((.+)\\)$/.exec(origin);\n  if (match) {\n    return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')';\n  }\n\n  // Make sure we still return useful information if we didn't find anything\n  return origin;\n}\n\n// This is copied almost verbatim from the V8 source code at\n// https://code.google.com/p/v8/source/browse/trunk/src/messages.js. The\n// implementation of wrapCallSite() used to just forward to the actual source\n// code of CallSite.prototype.toString but unfortunately a new release of V8\n// did something to the prototype chain and broke the shim. The only fix I\n// could find was copy/paste.\nfunction CallSiteToString() {\n  var fileName;\n  var fileLocation = \"\";\n  if (this.isNative()) {\n    fileLocation = \"native\";\n  } else {\n    fileName = this.getScriptNameOrSourceURL();\n    if (!fileName && this.isEval()) {\n      fileLocation = this.getEvalOrigin();\n      fileLocation += \", \";  // Expecting source position to follow.\n    }\n\n    if (fileName) {\n      fileLocation += fileName;\n    } else {\n      // Source code does not originate from a file and is not native, but we\n      // can still get the source position inside the source string, e.g. in\n      // an eval string.\n      fileLocation += \"<anonymous>\";\n    }\n    var lineNumber = this.getLineNumber();\n    if (lineNumber != null) {\n      fileLocation += \":\" + lineNumber;\n      var columnNumber = this.getColumnNumber();\n      if (columnNumber) {\n        fileLocation += \":\" + columnNumber;\n      }\n    }\n  }\n\n  var line = \"\";\n  var functionName = this.getFunctionName();\n  var addSuffix = true;\n  var isConstructor = this.isConstructor();\n  var isMethodCall = !(this.isToplevel() || isConstructor);\n  if (isMethodCall) {\n    var typeName = this.getTypeName();\n    // Fixes shim to be backward compatable with Node v0 to v4\n    if (typeName === \"[object Object]\") {\n      typeName = \"null\";\n    }\n    var methodName = this.getMethodName();\n    if (functionName) {\n      if (typeName && functionName.indexOf(typeName) != 0) {\n        line += typeName + \".\";\n      }\n      line += functionName;\n      if (methodName && functionName.indexOf(\".\" + methodName) != functionName.length - methodName.length - 1) {\n        line += \" [as \" + methodName + \"]\";\n      }\n    } else {\n      line += typeName + \".\" + (methodName || \"<anonymous>\");\n    }\n  } else if (isConstructor) {\n    line += \"new \" + (functionName || \"<anonymous>\");\n  } else if (functionName) {\n    line += functionName;\n  } else {\n    line += fileLocation;\n    addSuffix = false;\n  }\n  if (addSuffix) {\n    line += \" (\" + fileLocation + \")\";\n  }\n  return line;\n}\n\nfunction cloneCallSite(frame) {\n  var object = {};\n  Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) {\n    object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name];\n  });\n  object.toString = CallSiteToString;\n  return object;\n}\n\nfunction wrapCallSite(frame, state) {\n  // provides interface backward compatibility\n  if (state === undefined) {\n    state = { nextPosition: null, curPosition: null }\n  }\n  if(frame.isNative()) {\n    state.curPosition = null;\n    return frame;\n  }\n\n  // Most call sites will return the source file from getFileName(), but code\n  // passed to eval() ending in \"//# sourceURL=...\" will return the source file\n  // from getScriptNameOrSourceURL() instead\n  var source = frame.getFileName() || frame.getScriptNameOrSourceURL();\n  if (source) {\n    var line = frame.getLineNumber();\n    var column = frame.getColumnNumber() - 1;\n\n    // Fix position in Node where some (internal) code is prepended.\n    // See https://github.com/evanw/node-source-map-support/issues/36\n    // Header removed in node at ^10.16 || >=11.11.0\n    // v11 is not an LTS candidate, we can just test the one version with it.\n    // Test node versions for: 10.16-19, 10.20+, 12-19, 20-99, 100+, or 11.11\n    var noHeader = /^v(10\\.1[6-9]|10\\.[2-9][0-9]|10\\.[0-9]{3,}|1[2-9]\\d*|[2-9]\\d|\\d{3,}|11\\.11)/;\n    var headerLength = noHeader.test(globalProcessVersion()) ? 0 : 62;\n    if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) {\n      column -= headerLength;\n    }\n\n    var position = mapSourcePosition({\n      source: source,\n      line: line,\n      column: column\n    });\n    state.curPosition = position;\n    frame = cloneCallSite(frame);\n    var originalFunctionName = frame.getFunctionName;\n    frame.getFunctionName = function() {\n      if (state.nextPosition == null) {\n        return originalFunctionName();\n      }\n      return state.nextPosition.name || originalFunctionName();\n    };\n    frame.getFileName = function() { return position.source; };\n    frame.getLineNumber = function() { return position.line; };\n    frame.getColumnNumber = function() { return position.column + 1; };\n    frame.getScriptNameOrSourceURL = function() { return position.source; };\n    return frame;\n  }\n\n  // Code called using eval() needs special handling\n  var origin = frame.isEval() && frame.getEvalOrigin();\n  if (origin) {\n    origin = mapEvalOrigin(origin);\n    frame = cloneCallSite(frame);\n    frame.getEvalOrigin = function() { return origin; };\n    return frame;\n  }\n\n  // If we get here then we were unable to change the source position\n  return frame;\n}\n\n// This function is part of the V8 stack trace API, for more info see:\n// https://v8.dev/docs/stack-trace-api\nfunction prepareStackTrace(error, stack) {\n  if (emptyCacheBetweenOperations) {\n    fileContentsCache = {};\n    sourceMapCache = {};\n  }\n\n  var name = error.name || 'Error';\n  var message = error.message || '';\n  var errorString = name + \": \" + message;\n\n  var state = { nextPosition: null, curPosition: null };\n  var processedStack = [];\n  for (var i = stack.length - 1; i >= 0; i--) {\n    processedStack.push('\\n    at ' + wrapCallSite(stack[i], state));\n    state.nextPosition = state.curPosition;\n  }\n  state.curPosition = state.nextPosition = null;\n  return errorString + processedStack.reverse().join('');\n}\n\n// Generate position and snippet of original source with pointer\nfunction getErrorSource(error) {\n  var match = /\\n    at [^(]+ \\((.*):(\\d+):(\\d+)\\)/.exec(error.stack);\n  if (match) {\n    var source = match[1];\n    var line = +match[2];\n    var column = +match[3];\n\n    // Support the inline sourceContents inside the source map\n    var contents = fileContentsCache[source];\n\n    // Support files on disk\n    if (!contents && fs && fs.existsSync(source)) {\n      try {\n        contents = fs.readFileSync(source, 'utf8');\n      } catch (er) {\n        contents = '';\n      }\n    }\n\n    // Format the line from the original source code like node does\n    if (contents) {\n      var code = contents.split(/(?:\\r\\n|\\r|\\n)/)[line - 1];\n      if (code) {\n        return source + ':' + line + '\\n' + code + '\\n' +\n          new Array(column).join(' ') + '^';\n      }\n    }\n  }\n  return null;\n}\n\nfunction printErrorAndExit (error) {\n  var source = getErrorSource(error);\n\n  // Ensure error is printed synchronously and not truncated\n  var stderr = globalProcessStderr();\n  if (stderr && stderr._handle && stderr._handle.setBlocking) {\n    stderr._handle.setBlocking(true);\n  }\n\n  if (source) {\n    console.error();\n    console.error(source);\n  }\n\n  console.error(error.stack);\n  globalProcessExit(1);\n}\n\nfunction shimEmitUncaughtException () {\n  var origEmit = process.emit;\n\n  process.emit = function (type) {\n    if (type === 'uncaughtException') {\n      var hasStack = (arguments[1] && arguments[1].stack);\n      var hasListeners = (this.listeners(type).length > 0);\n\n      if (hasStack && !hasListeners) {\n        return printErrorAndExit(arguments[1]);\n      }\n    }\n\n    return origEmit.apply(this, arguments);\n  };\n}\n\nvar originalRetrieveFileHandlers = retrieveFileHandlers.slice(0);\nvar originalRetrieveMapHandlers = retrieveMapHandlers.slice(0);\n\nexports.wrapCallSite = wrapCallSite;\nexports.getErrorSource = getErrorSource;\nexports.mapSourcePosition = mapSourcePosition;\nexports.retrieveSourceMap = retrieveSourceMap;\n\nexports.install = function(options) {\n  options = options || {};\n\n  if (options.environment) {\n    environment = options.environment;\n    if ([\"node\", \"browser\", \"auto\"].indexOf(environment) === -1) {\n      throw new Error(\"environment \" + environment + \" was unknown. Available options are {auto, browser, node}\")\n    }\n  }\n\n  // Allow sources to be found by methods other than reading the files\n  // directly from disk.\n  if (options.retrieveFile) {\n    if (options.overrideRetrieveFile) {\n      retrieveFileHandlers.length = 0;\n    }\n\n    retrieveFileHandlers.unshift(options.retrieveFile);\n  }\n\n  // Allow source maps to be found by methods other than reading the files\n  // directly from disk.\n  if (options.retrieveSourceMap) {\n    if (options.overrideRetrieveSourceMap) {\n      retrieveMapHandlers.length = 0;\n    }\n\n    retrieveMapHandlers.unshift(options.retrieveSourceMap);\n  }\n\n  // Support runtime transpilers that include inline source maps\n  if (options.hookRequire && !isInBrowser()) {\n    // Use dynamicRequire to avoid including in browser bundles\n    var Module = dynamicRequire(module, 'module');\n    var $compile = Module.prototype._compile;\n\n    if (!$compile.__sourceMapSupport) {\n      Module.prototype._compile = function(content, filename) {\n        fileContentsCache[filename] = content;\n        sourceMapCache[filename] = undefined;\n        return $compile.call(this, content, filename);\n      };\n\n      Module.prototype._compile.__sourceMapSupport = true;\n    }\n  }\n\n  // Configure options\n  if (!emptyCacheBetweenOperations) {\n    emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ?\n      options.emptyCacheBetweenOperations : false;\n  }\n\n  // Install the error reformatter\n  if (!errorFormatterInstalled) {\n    errorFormatterInstalled = true;\n    Error.prepareStackTrace = prepareStackTrace;\n  }\n\n  if (!uncaughtShimInstalled) {\n    var installHandler = 'handleUncaughtExceptions' in options ?\n      options.handleUncaughtExceptions : true;\n\n    // Do not override 'uncaughtException' with our own handler in Node.js\n    // Worker threads. Workers pass the error to the main thread as an event,\n    // rather than printing something to stderr and exiting.\n    try {\n      // We need to use `dynamicRequire` because `require` on it's own will be optimized by WebPack/Browserify.\n      var worker_threads = dynamicRequire(module, 'worker_threads');\n      if (worker_threads.isMainThread === false) {\n        installHandler = false;\n      }\n    } catch(e) {}\n\n    // Provide the option to not install the uncaught exception handler. This is\n    // to support other uncaught exception handlers (in test frameworks, for\n    // example). If this handler is not installed and there are no other uncaught\n    // exception handlers, uncaught exceptions will be caught by node's built-in\n    // exception handler and the process will still be terminated. However, the\n    // generated JavaScript code will be shown above the stack trace instead of\n    // the original source code.\n    if (installHandler && hasGlobalProcessEventEmitter()) {\n      uncaughtShimInstalled = true;\n      shimEmitUncaughtException();\n    }\n  }\n};\n\nexports.resetRetrieveHandlers = function() {\n  retrieveFileHandlers.length = 0;\n  retrieveMapHandlers.length = 0;\n\n  retrieveFileHandlers = originalRetrieveFileHandlers.slice(0);\n  retrieveMapHandlers = originalRetrieveMapHandlers.slice(0);\n\n  retrieveSourceMap = handlerExec(retrieveMapHandlers);\n  retrieveFile = handlerExec(retrieveFileHandlers);\n}\n", "module.exports = () => {\n\t// https://mths.be/emoji\n\treturn /[#*0-9]\\uFE0F?\\u20E3|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26AA\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C8\\u26CF\\u26D1\\u26E9\\u26F0-\\u26F5\\u26F7\\u26F8\\u26FA\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B55\\u3030\\u303D\\u3297\\u3299]\\uFE0F?|[\\u261D\\u270C\\u270D](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\u270A\\u270B](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u2693\\u26A1\\u26AB\\u26C5\\u26CE\\u26D4\\u26EA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2795-\\u2797\\u27B0\\u27BF\\u2B50]|\\u26D3\\uFE0F?(?:\\u200D\\uD83D\\uDCA5)?|\\u26F9(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\u2764\\uFE0F?(?:\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79))?|\\uD83C(?:[\\uDC04\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]\\uFE0F?|[\\uDF85\\uDFC2\\uDFC7](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDFC4\\uDFCA](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDFCB\\uDFCC](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF43\\uDF45-\\uDF4A\\uDF4C-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uDDE6\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF]|\\uDDE7\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF]|\\uDDE8\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF7\\uDDFA-\\uDDFF]|\\uDDE9\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF]|\\uDDEA\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA]|\\uDDEB\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7]|\\uDDEC\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE]|\\uDDED\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA]|\\uDDEE\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9]|\\uDDEF\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5]|\\uDDF0\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF]|\\uDDF1\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE]|\\uDDF2\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF]|\\uDDF3\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF]|\\uDDF4\\uD83C\\uDDF2|\\uDDF5\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE]|\\uDDF6\\uD83C\\uDDE6|\\uDDF7\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC]|\\uDDF8\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF]|\\uDDF9\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF]|\\uDDFA\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF]|\\uDDFB\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA]|\\uDDFC\\uD83C[\\uDDEB\\uDDF8]|\\uDDFD\\uD83C\\uDDF0|\\uDDFE\\uD83C[\\uDDEA\\uDDF9]|\\uDDFF\\uD83C[\\uDDE6\\uDDF2\\uDDFC]|\\uDF44(?:\\u200D\\uD83D\\uDFEB)?|\\uDF4B(?:\\u200D\\uD83D\\uDFE9)?|\\uDFC3(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDFF3\\uFE0F?(?:\\u200D(?:\\u26A7\\uFE0F?|\\uD83C\\uDF08))?|\\uDFF4(?:\\u200D\\u2620\\uFE0F?|\\uDB40\\uDC67\\uDB40\\uDC62\\uDB40(?:\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F)?)|\\uD83D(?:[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3]\\uFE0F?|[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDC6E-\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4\\uDEB5](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD74\\uDD90](?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?|[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC25\\uDC27-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE41\\uDE43\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED8\\uDEDC-\\uDEDF\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB\\uDFF0]|\\uDC08(?:\\u200D\\u2B1B)?|\\uDC15(?:\\u200D\\uD83E\\uDDBA)?|\\uDC26(?:\\u200D(?:\\u2B1B|\\uD83D\\uDD25))?|\\uDC3B(?:\\u200D\\u2744\\uFE0F?)?|\\uDC41\\uFE0F?(?:\\u200D\\uD83D\\uDDE8\\uFE0F?)?|\\uDC68(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDC68\\uDC69]\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?)|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFC-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?\\uDC68\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDD1D\\uDEEF]\\u200D\\uD83D\\uDC68\\uD83C[\\uDFFB-\\uDFFE]|[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3])))?))?|\\uDC69(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:\\uDC8B\\u200D\\uD83D)?[\\uDC68\\uDC69]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?|\\uDC69\\u200D\\uD83D(?:\\uDC66(?:\\u200D\\uD83D\\uDC66)?|\\uDC67(?:\\u200D\\uD83D[\\uDC66\\uDC67])?))|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFC-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D\\uD83D(?:[\\uDC68\\uDC69]|\\uDC8B\\u200D\\uD83D[\\uDC68\\uDC69])\\uD83C[\\uDFFB-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3]|\\uDD1D\\u200D\\uD83D[\\uDC68\\uDC69]\\uD83C[\\uDFFB-\\uDFFE]|\\uDEEF\\u200D\\uD83D\\uDC69\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDD75(?:\\uD83C[\\uDFFB-\\uDFFF]|\\uFE0F)?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|\\uDE2E(?:\\u200D\\uD83D\\uDCA8)?|\\uDE35(?:\\u200D\\uD83D\\uDCAB)?|\\uDE36(?:\\u200D\\uD83C\\uDF2B\\uFE0F?)?|\\uDE42(?:\\u200D[\\u2194\\u2195]\\uFE0F?)?|\\uDEB6(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?)|\\uD83E(?:[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5\\uDEC3-\\uDEC5\\uDEF0\\uDEF2-\\uDEF8](?:\\uD83C[\\uDFFB-\\uDFFF])?|[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3C-\\uDD3E\\uDDB8\\uDDB9\\uDDCD\\uDDCF\\uDDD4\\uDDD6-\\uDDDD](?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDDDE\\uDDDF](?:\\u200D[\\u2640\\u2642]\\uFE0F?)?|[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCC\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC2\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF]|\\uDDCE(?:\\uD83C[\\uDFFB-\\uDFFF])?(?:\\u200D(?:[\\u2640\\u2642]\\uFE0F?(?:\\u200D\\u27A1\\uFE0F?)?|\\u27A1\\uFE0F?))?|\\uDDD1(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1|\\uDDD1\\u200D\\uD83E\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?|\\uDDD2(?:\\u200D\\uD83E\\uDDD2)?))|\\uD83C(?:\\uDFFB(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFC-\\uDFFF])))?|\\uDFFC(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])))?|\\uDFFD(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])))?|\\uDFFE(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])))?|\\uDFFF(?:\\u200D(?:[\\u2695\\u2696\\u2708]\\uFE0F?|\\u2764\\uFE0F?\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE]|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D(?:[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uDC30\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])|\\uD83E(?:[\\uDDAF\\uDDBC\\uDDBD](?:\\u200D\\u27A1\\uFE0F?)?|[\\uDDB0-\\uDDB3\\uDE70]|\\uDD1D\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFF]|\\uDEEF\\u200D\\uD83E\\uDDD1\\uD83C[\\uDFFB-\\uDFFE])))?))?|\\uDEF1(?:\\uD83C(?:\\uDFFB(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFC-\\uDFFF])?|\\uDFFC(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])?|\\uDFFD(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])?|\\uDFFE(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])?|\\uDFFF(?:\\u200D\\uD83E\\uDEF2\\uD83C[\\uDFFB-\\uDFFE])?))?)/g;\n};\n", null, "/**\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 */\nfunction isNil(value) {\n  return value == null;\n}\n\nmodule.exports = isNil;\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n    isArray = require('./isArray'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\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 */\nfunction isString(value) {\n  return typeof value == 'string' ||\n    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\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 */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n", "var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar branchingFactor = 32;\nvar branchBits = 5;\nvar mask = 31;\nfunction isSetoid(a) {\n    return a && typeof a[\"fantasy-land/equals\"] === \"function\";\n}\nfunction elementEquals(a, b) {\n    if (a === b) {\n        return true;\n    }\n    else if (isSetoid(a)) {\n        return a[\"fantasy-land/equals\"](b);\n    }\n    else {\n        return false;\n    }\n}\nfunction createPath(depth, value) {\n    var current = value;\n    for (var i = 0; i < depth; ++i) {\n        current = new Node(undefined, [current]);\n    }\n    return current;\n}\nfunction copyArray(source) {\n    var array = [];\n    for (var i = 0; i < source.length; ++i) {\n        array[i] = source[i];\n    }\n    return array;\n}\nfunction pushElements(source, target, offset, amount) {\n    for (var i = offset; i < offset + amount; ++i) {\n        target.push(source[i]);\n    }\n}\nfunction copyIndices(source, sourceStart, target, targetStart, length) {\n    for (var i = 0; i < length; ++i) {\n        target[targetStart + i] = source[sourceStart + i];\n    }\n}\nfunction arrayPrepend(value, array) {\n    var newLength = array.length + 1;\n    var result = new Array(newLength);\n    result[0] = value;\n    for (var i = 1; i < newLength; ++i) {\n        result[i] = array[i - 1];\n    }\n    return result;\n}\nfunction reverseArray(array) {\n    return array.slice().reverse();\n}\nfunction arrayFirst(array) {\n    return array[0];\n}\nfunction arrayLast(array) {\n    return array[array.length - 1];\n}\nvar pathResult = { path: 0, index: 0, updatedOffset: 0 };\nfunction getPath(index, offset, depth, sizes) {\n    if (sizes === undefined && offset !== 0) {\n        pathResult.updatedOffset = 0;\n        index = handleOffset(depth, offset, index);\n    }\n    var path = (index >> (depth * branchBits)) & mask;\n    if (sizes !== undefined) {\n        while (sizes[path] <= index) {\n            path++;\n        }\n        var traversed = path === 0 ? 0 : sizes[path - 1];\n        index -= traversed;\n        pathResult.updatedOffset = offset;\n    }\n    pathResult.path = path;\n    pathResult.index = index;\n    return pathResult;\n}\nfunction updateNode(node, depth, index, offset, value) {\n    var _a = getPath(index, offset, depth, node.sizes), path = _a.path, newIndex = _a.index, updatedOffset = _a.updatedOffset;\n    var array = copyArray(node.array);\n    array[path] =\n        depth > 0\n            ? updateNode(array[path], depth - 1, newIndex, updatedOffset, value)\n            : value;\n    return new Node(node.sizes, array);\n}\nvar Node = (function () {\n    function Node(sizes, array) {\n        this.sizes = sizes;\n        this.array = array;\n    }\n    return Node;\n}());\nexports.Node = Node;\nfunction cloneNode(_a) {\n    var sizes = _a.sizes, array = _a.array;\n    return new Node(sizes === undefined ? undefined : copyArray(sizes), copyArray(array));\n}\nvar emptyAffix = [0];\nvar affixBits = 6;\nvar affixMask = 63;\nfunction getSuffixSize(l) {\n    return l.bits & affixMask;\n}\nfunction getPrefixSize(l) {\n    return (l.bits >> affixBits) & affixMask;\n}\nfunction getDepth(l) {\n    return l.bits >> (affixBits * 2);\n}\nfunction setPrefix(size, bits) {\n    return (size << affixBits) | (bits & ~(affixMask << affixBits));\n}\nfunction setSuffix(size, bits) {\n    return size | (bits & ~affixMask);\n}\nfunction setDepth(depth, bits) {\n    return ((depth << (affixBits * 2)) | (bits & (affixMask | (affixMask << affixBits))));\n}\nfunction incrementPrefix(bits) {\n    return bits + (1 << affixBits);\n}\nfunction incrementSuffix(bits) {\n    return bits + 1;\n}\nfunction incrementDepth(bits) {\n    return bits + (1 << (affixBits * 2));\n}\nfunction decrementDepth(bits) {\n    return bits - (1 << (affixBits * 2));\n}\nvar List = (function () {\n    function List(bits, offset, length, prefix, root, suffix) {\n        this.bits = bits;\n        this.offset = offset;\n        this.length = length;\n        this.prefix = prefix;\n        this.root = root;\n        this.suffix = suffix;\n    }\n    List.prototype[Symbol.iterator] = function () {\n        return new ForwardListIterator(this);\n    };\n    List.prototype.toJSON = function () {\n        return toArray(this);\n    };\n    return List;\n}());\nexports.List = List;\nfunction cloneList(l) {\n    return new List(l.bits, l.offset, l.length, l.prefix, l.root, l.suffix);\n}\nvar ListIterator = (function () {\n    function ListIterator(l, direction) {\n        this.l = l;\n        this.result = { done: false, value: undefined };\n        this.idx = direction === 1 ? -1 : l.length;\n        this.prefixSize = getPrefixSize(l);\n        this.middleSize = l.length - getSuffixSize(l);\n        if (l.root !== undefined) {\n            var depth = getDepth(l);\n            this.stack = new Array(depth + 1);\n            this.indices = new Array(depth + 1);\n            var currentNode = l.root.array;\n            for (var i = depth; 0 <= i; --i) {\n                this.stack[i] = currentNode;\n                var idx = direction === 1 ? 0 : currentNode.length - 1;\n                this.indices[i] = idx;\n                currentNode = currentNode[idx].array;\n            }\n            this.indices[0] -= direction;\n        }\n    }\n    return ListIterator;\n}());\nvar ForwardListIterator = (function (_super) {\n    __extends(ForwardListIterator, _super);\n    function ForwardListIterator(l) {\n        return _super.call(this, l, 1) || this;\n    }\n    ForwardListIterator.prototype.nextInTree = function () {\n        for (var i = 0; ++this.indices[i] === this.stack[i].length; ++i) {\n            this.indices[i] = 0;\n        }\n        for (; 0 < i; --i) {\n            this.stack[i - 1] = this.stack[i][this.indices[i]].array;\n        }\n    };\n    ForwardListIterator.prototype.next = function () {\n        var newVal;\n        var idx = ++this.idx;\n        if (idx < this.prefixSize) {\n            newVal = this.l.prefix[this.prefixSize - idx - 1];\n        }\n        else if (idx < this.middleSize) {\n            this.nextInTree();\n            newVal = this.stack[0][this.indices[0]];\n        }\n        else if (idx < this.l.length) {\n            newVal = this.l.suffix[idx - this.middleSize];\n        }\n        else {\n            this.result.done = true;\n        }\n        this.result.value = newVal;\n        return this.result;\n    };\n    return ForwardListIterator;\n}(ListIterator));\nvar BackwardsListIterator = (function (_super) {\n    __extends(BackwardsListIterator, _super);\n    function BackwardsListIterator(l) {\n        return _super.call(this, l, -1) || this;\n    }\n    BackwardsListIterator.prototype.prevInTree = function () {\n        for (var i = 0; this.indices[i] === 0; ++i) { }\n        --this.indices[i];\n        for (; 0 < i; --i) {\n            var n = this.stack[i][this.indices[i]].array;\n            this.stack[i - 1] = n;\n            this.indices[i - 1] = n.length - 1;\n        }\n    };\n    BackwardsListIterator.prototype.next = function () {\n        var newVal;\n        var idx = --this.idx;\n        if (this.middleSize <= idx) {\n            newVal = this.l.suffix[idx - this.middleSize];\n        }\n        else if (this.prefixSize <= idx) {\n            this.prevInTree();\n            newVal = this.stack[0][this.indices[0]];\n        }\n        else if (0 <= idx) {\n            newVal = this.l.prefix[this.prefixSize - idx - 1];\n        }\n        else {\n            this.result.done = true;\n        }\n        this.result.value = newVal;\n        return this.result;\n    };\n    return BackwardsListIterator;\n}(ListIterator));\nfunction backwards(l) {\n    var _a;\n    return _a = {},\n        _a[Symbol.iterator] = function () {\n            return new BackwardsListIterator(l);\n        },\n        _a;\n}\nexports.backwards = backwards;\nfunction emptyPushable() {\n    return new List(0, 0, 0, [], undefined, []);\n}\nfunction push(value, l) {\n    var suffixSize = getSuffixSize(l);\n    if (l.length === 0) {\n        l.bits = setPrefix(1, l.bits);\n        l.prefix = [value];\n    }\n    else if (suffixSize < 32) {\n        l.bits = incrementSuffix(l.bits);\n        l.suffix.push(value);\n    }\n    else if (l.root === undefined) {\n        l.root = new Node(undefined, l.suffix);\n        l.suffix = [value];\n        l.bits = setSuffix(1, l.bits);\n    }\n    else {\n        var newNode = new Node(undefined, l.suffix);\n        var index = l.length - 1 - 32 + 1;\n        var current = l.root;\n        var depth = getDepth(l);\n        l.suffix = [value];\n        l.bits = setSuffix(1, l.bits);\n        if (index - 1 < Math.pow(branchingFactor, (depth + 1))) {\n            for (; depth >= 0; --depth) {\n                var path = (index >> (depth * branchBits)) & mask;\n                if (path < current.array.length) {\n                    current = current.array[path];\n                }\n                else {\n                    current.array.push(createPath(depth - 1, newNode));\n                    break;\n                }\n            }\n        }\n        else {\n            l.bits = incrementDepth(l.bits);\n            l.root = new Node(undefined, [l.root, createPath(depth, newNode)]);\n        }\n    }\n    l.length++;\n    return l;\n}\nfunction list() {\n    var elements = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        elements[_i] = arguments[_i];\n    }\n    var l = emptyPushable();\n    for (var _a = 0, elements_1 = elements; _a < elements_1.length; _a++) {\n        var element = elements_1[_a];\n        push(element, l);\n    }\n    return l;\n}\nexports.list = list;\nfunction empty() {\n    return new List(0, 0, 0, emptyAffix, undefined, emptyAffix);\n}\nexports.empty = empty;\nfunction of(a) {\n    return list(a);\n}\nexports.of = of;\nfunction pair(first, second) {\n    return new List(2, 0, 2, emptyAffix, undefined, [first, second]);\n}\nexports.pair = pair;\nfunction from(sequence) {\n    var l = emptyPushable();\n    if (sequence.length > 0 && (sequence[0] !== undefined || 0 in sequence)) {\n        for (var i = 0; i < sequence.length; ++i) {\n            push(sequence[i], l);\n        }\n    }\n    else if (Symbol.iterator in sequence) {\n        var iterator = sequence[Symbol.iterator]();\n        var cur = void 0;\n        while (!(cur = iterator.next()).done) {\n            push(cur.value, l);\n        }\n    }\n    return l;\n}\nexports.from = from;\nfunction range(start, end) {\n    var list = emptyPushable();\n    for (var i = start; i < end; ++i) {\n        push(i, list);\n    }\n    return list;\n}\nexports.range = range;\nfunction repeat(value, times) {\n    var l = emptyPushable();\n    while (--times >= 0) {\n        push(value, l);\n    }\n    return l;\n}\nexports.repeat = repeat;\nfunction times(func, times) {\n    var l = emptyPushable();\n    for (var i = 0; i < times; i++) {\n        push(func(i), l);\n    }\n    return l;\n}\nexports.times = times;\nfunction nodeNthDense(node, depth, index) {\n    var current = node;\n    for (; depth >= 0; --depth) {\n        current = current.array[(index >> (depth * branchBits)) & mask];\n    }\n    return current;\n}\nfunction handleOffset(depth, offset, index) {\n    index += offset;\n    for (; depth >= 0; --depth) {\n        index = index - (offset & (mask << (depth * branchBits)));\n        if (((index >> (depth * branchBits)) & mask) !== 0) {\n            break;\n        }\n    }\n    return index;\n}\nfunction nodeNth(node, depth, offset, index) {\n    var path;\n    var current = node;\n    while (current.sizes !== undefined) {\n        path = (index >> (depth * branchBits)) & mask;\n        while (current.sizes[path] <= index) {\n            path++;\n        }\n        if (path !== 0) {\n            index -= current.sizes[path - 1];\n            offset = 0;\n        }\n        depth--;\n        current = current.array[path];\n    }\n    return nodeNthDense(current, depth, offset === 0 ? index : handleOffset(depth, offset, index));\n}\nfunction nth(index, l) {\n    if (index < 0 || l.length <= index) {\n        return undefined;\n    }\n    var prefixSize = getPrefixSize(l);\n    var suffixSize = getSuffixSize(l);\n    if (index < prefixSize) {\n        return l.prefix[prefixSize - index - 1];\n    }\n    else if (index >= l.length - suffixSize) {\n        return l.suffix[index - (l.length - suffixSize)];\n    }\n    var offset = l.offset;\n    var depth = getDepth(l);\n    return l.root.sizes === undefined\n        ? nodeNthDense(l.root, depth, offset === 0\n            ? index - prefixSize\n            : handleOffset(depth, offset, index - prefixSize))\n        : nodeNth(l.root, depth, offset, index - prefixSize);\n}\nexports.nth = nth;\nfunction setSizes(node, height) {\n    var sum = 0;\n    var sizeTable = [];\n    for (var i = 0; i < node.array.length; ++i) {\n        sum += sizeOfSubtree(node.array[i], height - 1);\n        sizeTable[i] = sum;\n    }\n    node.sizes = sizeTable;\n    return node;\n}\nfunction sizeOfSubtree(node, height) {\n    if (height !== 0) {\n        if (node.sizes !== undefined) {\n            return arrayLast(node.sizes);\n        }\n        else {\n            var lastSize = sizeOfSubtree(arrayLast(node.array), height - 1);\n            return ((node.array.length - 1) << (height * branchBits)) + lastSize;\n        }\n    }\n    else {\n        return node.array.length;\n    }\n}\nfunction affixPush(a, array, length) {\n    if (array.length === length) {\n        array.push(a);\n        return array;\n    }\n    else {\n        var newArray = [];\n        copyIndices(array, 0, newArray, 0, length);\n        newArray.push(a);\n        return newArray;\n    }\n}\nfunction prepend(value, l) {\n    var prefixSize = getPrefixSize(l);\n    if (prefixSize < 32) {\n        return new List(incrementPrefix(l.bits), l.offset, l.length + 1, affixPush(value, l.prefix, prefixSize), l.root, l.suffix);\n    }\n    else {\n        var newList = cloneList(l);\n        prependNodeToTree(newList, reverseArray(l.prefix));\n        var newPrefix = [value];\n        newList.prefix = newPrefix;\n        newList.length++;\n        newList.bits = setPrefix(1, newList.bits);\n        return newList;\n    }\n}\nexports.prepend = prepend;\nfunction copyLeft(l, k) {\n    var currentNode = cloneNode(l.root);\n    l.root = currentNode;\n    for (var i = 1; i < k; ++i) {\n        var index = 0;\n        if (currentNode.sizes !== undefined) {\n            for (var i_1 = 0; i_1 < currentNode.sizes.length; ++i_1) {\n                currentNode.sizes[i_1] += 32;\n            }\n        }\n        var newNode = cloneNode(currentNode.array[index]);\n        currentNode.array[index] = newNode;\n        currentNode = newNode;\n    }\n    return currentNode;\n}\nfunction nodePrepend(value, size, node) {\n    var array = arrayPrepend(value, node.array);\n    var sizes = undefined;\n    if (node.sizes !== undefined) {\n        sizes = new Array(node.sizes.length + 1);\n        sizes[0] = size;\n        for (var i = 0; i < node.sizes.length; ++i) {\n            sizes[i + 1] = node.sizes[i] + size;\n        }\n    }\n    return new Node(sizes, array);\n}\nfunction prependTopTree(l, depth, node) {\n    var newOffset;\n    if (l.root.array.length < branchingFactor) {\n        newOffset = Math.pow(32, depth) - 32;\n        l.root = new Node(undefined, arrayPrepend(createPath(depth - 1, node), l.root.array));\n    }\n    else {\n        l.bits = incrementDepth(l.bits);\n        var sizes = l.root.sizes === undefined\n            ? undefined\n            : [32, arrayLast(l.root.sizes) + 32];\n        newOffset = depth === 0 ? 0 : Math.pow(32, (depth + 1)) - 32;\n        l.root = new Node(sizes, [createPath(depth, node), l.root]);\n    }\n    return newOffset;\n}\nfunction prependNodeToTree(l, array) {\n    if (l.root === undefined) {\n        if (getSuffixSize(l) === 0) {\n            l.bits = setSuffix(array.length, l.bits);\n            l.suffix = array;\n        }\n        else {\n            l.root = new Node(undefined, array);\n        }\n        return l;\n    }\n    else {\n        var node = new Node(undefined, array);\n        var depth = getDepth(l);\n        var newOffset_1 = 0;\n        if (l.root.sizes === undefined) {\n            if (l.offset !== 0) {\n                newOffset_1 = l.offset - branchingFactor;\n                l.root = prependDense(l.root, depth, l.offset, node);\n            }\n            else {\n                newOffset_1 = prependTopTree(l, depth, node);\n            }\n        }\n        else {\n            var copyableCount = 0;\n            var nodesTraversed = 0;\n            var currentNode = l.root;\n            while (currentNode.sizes !== undefined && nodesTraversed < depth) {\n                ++nodesTraversed;\n                if (currentNode.array.length < 32) {\n                    copyableCount = nodesTraversed;\n                }\n                currentNode = currentNode.array[0];\n            }\n            if (l.offset !== 0) {\n                var copiedNode = copyLeft(l, nodesTraversed);\n                for (var i = 0; i < copiedNode.sizes.length; ++i) {\n                    copiedNode.sizes[i] += branchingFactor;\n                }\n                copiedNode.array[0] = prependDense(copiedNode.array[0], depth - nodesTraversed, l.offset, node);\n                l.offset = l.offset - branchingFactor;\n                return l;\n            }\n            else {\n                if (copyableCount === 0) {\n                    l.offset = prependTopTree(l, depth, node);\n                }\n                else {\n                    var parent_1;\n                    var prependableNode = void 0;\n                    if (copyableCount > 1) {\n                        parent_1 = copyLeft(l, copyableCount - 1);\n                        prependableNode = parent_1.array[0];\n                    }\n                    else {\n                        parent_1 = undefined;\n                        prependableNode = l.root;\n                    }\n                    var path = createPath(depth - copyableCount, node);\n                    l.offset = Math.pow(32, (depth - copyableCount + 1)) - 32;\n                    var prepended = nodePrepend(path, 32, prependableNode);\n                    if (parent_1 === undefined) {\n                        l.root = prepended;\n                    }\n                    else {\n                        parent_1.array[0] = prepended;\n                    }\n                }\n                return l;\n            }\n        }\n        l.offset = newOffset_1;\n        return l;\n    }\n}\nfunction prependDense(node, depth, offset, value) {\n    var curOffset = (offset >> (depth * branchBits)) & mask;\n    var path = (((offset - 1) >> (depth * branchBits)) & mask) - curOffset;\n    if (path < 0) {\n        return new Node(undefined, arrayPrepend(createPath(depth - 1, value), node.array));\n    }\n    else {\n        var array = copyArray(node.array);\n        array[0] = prependDense(array[0], depth - 1, offset, value);\n        return new Node(undefined, array);\n    }\n}\nfunction append(value, l) {\n    var suffixSize = getSuffixSize(l);\n    if (suffixSize < 32) {\n        return new List(incrementSuffix(l.bits), l.offset, l.length + 1, l.prefix, l.root, affixPush(value, l.suffix, suffixSize));\n    }\n    var newSuffix = [value];\n    var newList = cloneList(l);\n    appendNodeToTree(newList, l.suffix);\n    newList.suffix = newSuffix;\n    newList.length++;\n    newList.bits = setSuffix(1, newList.bits);\n    return newList;\n}\nexports.append = append;\nfunction length(l) {\n    return l.length;\n}\nexports.length = length;\nfunction first(l) {\n    var prefixSize = getPrefixSize(l);\n    return prefixSize !== 0\n        ? l.prefix[prefixSize - 1]\n        : l.length !== 0\n            ? l.suffix[0]\n            : undefined;\n}\nexports.first = first;\nexports.head = first;\nfunction last(l) {\n    var suffixSize = getSuffixSize(l);\n    return suffixSize !== 0\n        ? l.suffix[suffixSize - 1]\n        : l.length !== 0\n            ? l.prefix[0]\n            : undefined;\n}\nexports.last = last;\nfunction mapArray(f, array) {\n    var result = new Array(array.length);\n    for (var i = 0; i < array.length; ++i) {\n        result[i] = f(array[i]);\n    }\n    return result;\n}\nfunction mapNode(f, node, depth) {\n    if (depth !== 0) {\n        var array = node.array;\n        var result = new Array(array.length);\n        for (var i = 0; i < array.length; ++i) {\n            result[i] = mapNode(f, array[i], depth - 1);\n        }\n        return new Node(node.sizes, result);\n    }\n    else {\n        return new Node(undefined, mapArray(f, node.array));\n    }\n}\nfunction mapPrefix(f, prefix, length) {\n    var newPrefix = new Array(length);\n    for (var i = length - 1; 0 <= i; --i) {\n        newPrefix[i] = f(prefix[i]);\n    }\n    return newPrefix;\n}\nfunction mapAffix(f, suffix, length) {\n    var newSuffix = new Array(length);\n    for (var i = 0; i < length; ++i) {\n        newSuffix[i] = f(suffix[i]);\n    }\n    return newSuffix;\n}\nfunction map(f, l) {\n    return new List(l.bits, l.offset, l.length, mapPrefix(f, l.prefix, getPrefixSize(l)), l.root === undefined ? undefined : mapNode(f, l.root, getDepth(l)), mapAffix(f, l.suffix, getSuffixSize(l)));\n}\nexports.map = map;\nfunction pluck(key, l) {\n    return map(function (a) { return a[key]; }, l);\n}\nexports.pluck = pluck;\nfunction foldlSuffix(f, acc, array, length) {\n    for (var i = 0; i < length; ++i) {\n        acc = f(acc, array[i]);\n    }\n    return acc;\n}\nfunction foldlPrefix(f, acc, array, length) {\n    for (var i = length - 1; 0 <= i; --i) {\n        acc = f(acc, array[i]);\n    }\n    return acc;\n}\nfunction foldlNode(f, acc, node, depth) {\n    var array = node.array;\n    if (depth === 0) {\n        return foldlSuffix(f, acc, array, array.length);\n    }\n    for (var i = 0; i < array.length; ++i) {\n        acc = foldlNode(f, acc, array[i], depth - 1);\n    }\n    return acc;\n}\nfunction foldl(f, initial, l) {\n    var suffixSize = getSuffixSize(l);\n    var prefixSize = getPrefixSize(l);\n    initial = foldlPrefix(f, initial, l.prefix, prefixSize);\n    if (l.root !== undefined) {\n        initial = foldlNode(f, initial, l.root, getDepth(l));\n    }\n    return foldlSuffix(f, initial, l.suffix, suffixSize);\n}\nexports.foldl = foldl;\nexports.reduce = foldl;\nfunction traverse(of, f, l) {\n    return foldr(function (a, fl) {\n        return fl[\"fantasy-land/ap\"](f(a)[\"fantasy-land/map\"](function (a) { return function (l) { return prepend(a, l); }; }));\n    }, of[\"fantasy-land/of\"](empty()), l);\n}\nexports.traverse = traverse;\nfunction sequence(ofObj, l) {\n    return traverse(ofObj, function (a) { return a; }, l);\n}\nexports.sequence = sequence;\nfunction scan(f, initial, l) {\n    return foldl(function (l2, a) { return push(f(last(l2), a), l2); }, push(initial, emptyPushable()), l);\n}\nexports.scan = scan;\nfunction forEach(callback, l) {\n    foldl(function (_, element) { return callback(element); }, undefined, l);\n}\nexports.forEach = forEach;\nfunction filter(predicate, l) {\n    return foldl(function (acc, a) { return (predicate(a) ? push(a, acc) : acc); }, emptyPushable(), l);\n}\nexports.filter = filter;\nfunction reject(predicate, l) {\n    return foldl(function (acc, a) { return (predicate(a) ? acc : push(a, acc)); }, emptyPushable(), l);\n}\nexports.reject = reject;\nfunction partition(predicate, l) {\n    return foldl(function (arr, a) { return (predicate(a) ? push(a, arr[0]) : push(a, arr[1]), arr); }, [emptyPushable(), emptyPushable()], l);\n}\nexports.partition = partition;\nfunction join(separator, l) {\n    return foldl(function (a, b) { return (a.length === 0 ? b : a + separator + b); }, \"\", l);\n}\nexports.join = join;\nfunction foldrSuffix(f, initial, array, length) {\n    var acc = initial;\n    for (var i = length - 1; 0 <= i; --i) {\n        acc = f(array[i], acc);\n    }\n    return acc;\n}\nfunction foldrPrefix(f, initial, array, length) {\n    var acc = initial;\n    for (var i = 0; i < length; ++i) {\n        acc = f(array[i], acc);\n    }\n    return acc;\n}\nfunction foldrNode(f, initial, _a, depth) {\n    var array = _a.array;\n    if (depth === 0) {\n        return foldrSuffix(f, initial, array, array.length);\n    }\n    var acc = initial;\n    for (var i = array.length - 1; 0 <= i; --i) {\n        acc = foldrNode(f, acc, array[i], depth - 1);\n    }\n    return acc;\n}\nfunction foldr(f, initial, l) {\n    var suffixSize = getSuffixSize(l);\n    var prefixSize = getPrefixSize(l);\n    var acc = foldrSuffix(f, initial, l.suffix, suffixSize);\n    if (l.root !== undefined) {\n        acc = foldrNode(f, acc, l.root, getDepth(l));\n    }\n    return foldrPrefix(f, acc, l.prefix, prefixSize);\n}\nexports.foldr = foldr;\nexports.reduceRight = foldr;\nfunction ap(listF, l) {\n    return flatten(map(function (f) { return map(f, l); }, listF));\n}\nexports.ap = ap;\nfunction flatten(nested) {\n    return foldl(concat, empty(), nested);\n}\nexports.flatten = flatten;\nfunction flatMap(f, l) {\n    return flatten(map(f, l));\n}\nexports.flatMap = flatMap;\nexports.chain = flatMap;\nfunction foldlArrayCb(cb, state, array, from, to) {\n    for (var i = from; i < to && cb(array[i], state); ++i) { }\n    return i === to;\n}\nfunction foldrArrayCb(cb, state, array, from, to) {\n    for (var i = from - 1; to <= i && cb(array[i], state); --i) { }\n    return i === to - 1;\n}\nfunction foldlNodeCb(cb, state, node, depth) {\n    var array = node.array;\n    if (depth === 0) {\n        return foldlArrayCb(cb, state, array, 0, array.length);\n    }\n    var to = array.length;\n    for (var i = 0; i < to; ++i) {\n        if (!foldlNodeCb(cb, state, array[i], depth - 1)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction foldlCb(cb, state, l) {\n    var prefixSize = getPrefixSize(l);\n    if (!foldrArrayCb(cb, state, l.prefix, prefixSize, 0) ||\n        (l.root !== undefined && !foldlNodeCb(cb, state, l.root, getDepth(l)))) {\n        return state;\n    }\n    var suffixSize = getSuffixSize(l);\n    foldlArrayCb(cb, state, l.suffix, 0, suffixSize);\n    return state;\n}\nfunction foldrNodeCb(cb, state, node, depth) {\n    var array = node.array;\n    if (depth === 0) {\n        return foldrArrayCb(cb, state, array, array.length, 0);\n    }\n    for (var i = array.length - 1; 0 <= i; --i) {\n        if (!foldrNodeCb(cb, state, array[i], depth - 1)) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction foldrCb(cb, state, l) {\n    var suffixSize = getSuffixSize(l);\n    var prefixSize = getPrefixSize(l);\n    if (!foldrArrayCb(cb, state, l.suffix, suffixSize, 0) ||\n        (l.root !== undefined && !foldrNodeCb(cb, state, l.root, getDepth(l)))) {\n        return state;\n    }\n    var prefix = l.prefix;\n    foldlArrayCb(cb, state, l.prefix, prefix.length - prefixSize, prefix.length);\n    return state;\n}\nfunction foldlWhileCb(a, state) {\n    if (state.predicate(state.result, a) === false) {\n        return false;\n    }\n    state.result = state.f(state.result, a);\n    return true;\n}\nfunction foldlWhile(predicate, f, initial, l) {\n    return foldlCb(foldlWhileCb, { predicate: predicate, f: f, result: initial }, l).result;\n}\nexports.foldlWhile = foldlWhile;\nexports.reduceWhile = foldlWhile;\nfunction everyCb(value, state) {\n    return (state.result = state.predicate(value));\n}\nfunction every(predicate, l) {\n    return foldlCb(everyCb, { predicate: predicate, result: true }, l).result;\n}\nexports.every = every;\nexports.all = every;\nfunction someCb(value, state) {\n    return !(state.result = state.predicate(value));\n}\nfunction some(predicate, l) {\n    return foldlCb(someCb, { predicate: predicate, result: false }, l).result;\n}\nexports.some = some;\nexports.any = some;\nfunction none(predicate, l) {\n    return !some(predicate, l);\n}\nexports.none = none;\nfunction findCb(value, state) {\n    if (state.predicate(value)) {\n        state.result = value;\n        return false;\n    }\n    else {\n        return true;\n    }\n}\nfunction find(predicate, l) {\n    return foldlCb(findCb, { predicate: predicate, result: undefined }, l)\n        .result;\n}\nexports.find = find;\nfunction findLast(predicate, l) {\n    return foldrCb(findCb, { predicate: predicate, result: undefined }, l)\n        .result;\n}\nexports.findLast = findLast;\nfunction indexOfCb(value, state) {\n    ++state.index;\n    return !(state.found = elementEquals(value, state.element));\n}\nfunction indexOf(element, l) {\n    var state = { element: element, found: false, index: -1 };\n    foldlCb(indexOfCb, state, l);\n    return state.found ? state.index : -1;\n}\nexports.indexOf = indexOf;\nfunction lastIndexOf(element, l) {\n    var state = { element: element, found: false, index: 0 };\n    foldrCb(indexOfCb, state, l);\n    return state.found ? l.length - state.index : -1;\n}\nexports.lastIndexOf = lastIndexOf;\nfunction findIndexCb(value, state) {\n    ++state.index;\n    return !(state.found = state.predicate(value));\n}\nfunction findIndex(predicate, l) {\n    var _a = foldlCb(findIndexCb, { predicate: predicate, found: false, index: -1 }, l), found = _a.found, index = _a.index;\n    return found ? index : -1;\n}\nexports.findIndex = findIndex;\nvar containsState = {\n    element: undefined,\n    result: false\n};\nfunction containsCb(value, state) {\n    return !(state.result = value === state.element);\n}\nfunction includes(element, l) {\n    containsState.element = element;\n    containsState.result = false;\n    return foldlCb(containsCb, containsState, l).result;\n}\nexports.includes = includes;\nexports.contains = includes;\nfunction equalsCb(value2, state) {\n    var value = state.iterator.next().value;\n    return (state.equals = state.f(value, value2));\n}\nfunction equals(l1, l2) {\n    return equalsWith(elementEquals, l1, l2);\n}\nexports.equals = equals;\nfunction equalsWith(f, l1, l2) {\n    if (l1 === l2) {\n        return true;\n    }\n    else if (l1.length !== l2.length) {\n        return false;\n    }\n    else {\n        var s = { iterator: l2[Symbol.iterator](), equals: true, f: f };\n        return foldlCb(equalsCb, s, l1).equals;\n    }\n}\nexports.equalsWith = equalsWith;\nvar eMax = 2;\nfunction createConcatPlan(array) {\n    var sizes = [];\n    var sum = 0;\n    for (var i_2 = 0; i_2 < array.length; ++i_2) {\n        sum += array[i_2].array.length;\n        sizes[i_2] = array[i_2].array.length;\n    }\n    var optimalLength = Math.ceil(sum / branchingFactor);\n    var n = array.length;\n    var i = 0;\n    if (optimalLength + eMax >= n) {\n        return undefined;\n    }\n    while (optimalLength + eMax < n) {\n        while (sizes[i] > branchingFactor - eMax / 2) {\n            ++i;\n        }\n        var remaining = sizes[i];\n        do {\n            var size = Math.min(remaining + sizes[i + 1], branchingFactor);\n            sizes[i] = size;\n            remaining = remaining - (size - sizes[i + 1]);\n            ++i;\n        } while (remaining > 0);\n        for (var j = i; j <= n - 1; ++j) {\n            sizes[j] = sizes[j + 1];\n        }\n        --i;\n        --n;\n    }\n    sizes.length = n;\n    return sizes;\n}\nfunction concatNodeMerge(left, center, right) {\n    var array = [];\n    if (left !== undefined) {\n        for (var i = 0; i < left.array.length - 1; ++i) {\n            array.push(left.array[i]);\n        }\n    }\n    for (var i = 0; i < center.array.length; ++i) {\n        array.push(center.array[i]);\n    }\n    if (right !== undefined) {\n        for (var i = 1; i < right.array.length; ++i) {\n            array.push(right.array[i]);\n        }\n    }\n    return array;\n}\nfunction executeConcatPlan(merged, plan, height) {\n    var result = [];\n    var sourceIdx = 0;\n    var offset = 0;\n    for (var _i = 0, plan_1 = plan; _i < plan_1.length; _i++) {\n        var toMove = plan_1[_i];\n        var source = merged[sourceIdx].array;\n        if (toMove === source.length && offset === 0) {\n            result.push(merged[sourceIdx]);\n            ++sourceIdx;\n        }\n        else {\n            var node = new Node(undefined, []);\n            while (toMove > 0) {\n                var available = source.length - offset;\n                var itemsToCopy = Math.min(toMove, available);\n                pushElements(source, node.array, offset, itemsToCopy);\n                if (toMove >= available) {\n                    ++sourceIdx;\n                    source = merged[sourceIdx].array;\n                    offset = 0;\n                }\n                else {\n                    offset += itemsToCopy;\n                }\n                toMove -= itemsToCopy;\n            }\n            if (height > 1) {\n                setSizes(node, height - 1);\n            }\n            result.push(node);\n        }\n    }\n    return result;\n}\nfunction rebalance(left, center, right, height, top) {\n    var merged = concatNodeMerge(left, center, right);\n    var plan = createConcatPlan(merged);\n    var balanced = plan !== undefined ? executeConcatPlan(merged, plan, height) : merged;\n    if (balanced.length <= branchingFactor) {\n        if (top === true) {\n            return new Node(undefined, balanced);\n        }\n        else {\n            return new Node(undefined, [\n                setSizes(new Node(undefined, balanced), height)\n            ]);\n        }\n    }\n    else {\n        return new Node(undefined, [\n            setSizes(new Node(undefined, balanced.slice(0, branchingFactor)), height),\n            setSizes(new Node(undefined, balanced.slice(branchingFactor)), height)\n        ]);\n    }\n}\nfunction concatSubTree(left, lDepth, right, rDepth, isTop) {\n    if (lDepth > rDepth) {\n        var c = concatSubTree(arrayLast(left.array), lDepth - 1, right, rDepth, false);\n        return rebalance(left, c, undefined, lDepth, isTop);\n    }\n    else if (lDepth < rDepth) {\n        var c = concatSubTree(left, lDepth, arrayFirst(right.array), rDepth - 1, false);\n        return rebalance(undefined, c, right, rDepth, isTop);\n    }\n    else if (lDepth === 0) {\n        return new Node(undefined, [left, right]);\n    }\n    else {\n        var c = concatSubTree(arrayLast(left.array), lDepth - 1, arrayFirst(right.array), rDepth - 1, false);\n        return rebalance(left, c, right, lDepth, isTop);\n    }\n}\nfunction getHeight(node) {\n    if (node.array[0] instanceof Node) {\n        return 1 + getHeight(node.array[0]);\n    }\n    else {\n        return 0;\n    }\n}\nfunction appendNodeToTree(l, array) {\n    if (l.root === undefined) {\n        if (getPrefixSize(l) === 0) {\n            l.bits = setPrefix(array.length, l.bits);\n            l.prefix = reverseArray(array);\n        }\n        else {\n            l.root = new Node(undefined, array);\n        }\n        return l;\n    }\n    var depth = getDepth(l);\n    var index = handleOffset(depth, l.offset, l.length - 1 - getPrefixSize(l));\n    var nodesToCopy = 0;\n    var nodesVisited = 0;\n    var shift = depth * 5;\n    var currentNode = l.root;\n    if (Math.pow(32, (depth + 1)) < index) {\n        shift = 0;\n        nodesVisited = depth;\n    }\n    while (shift > 5) {\n        var childIndex = void 0;\n        if (currentNode.sizes === undefined) {\n            childIndex = (index >> shift) & mask;\n            index &= ~(mask << shift);\n        }\n        else {\n            childIndex = currentNode.array.length - 1;\n            index -= currentNode.sizes[childIndex - 1];\n        }\n        nodesVisited++;\n        if (childIndex < mask) {\n            nodesToCopy = nodesVisited;\n        }\n        currentNode = currentNode.array[childIndex];\n        if (currentNode === undefined) {\n            nodesToCopy = nodesVisited;\n            shift = 5;\n        }\n        shift -= 5;\n    }\n    if (shift !== 0) {\n        nodesVisited++;\n        if (currentNode.array.length < branchingFactor) {\n            nodesToCopy = nodesVisited;\n        }\n    }\n    var node = new Node(undefined, array);\n    if (nodesToCopy === 0) {\n        var newPath = nodesVisited === 0 ? node : createPath(nodesVisited, node);\n        var newRoot = new Node(undefined, [l.root, newPath]);\n        l.root = newRoot;\n        l.bits = incrementDepth(l.bits);\n    }\n    else {\n        var copiedNode = copyFirstK(l, nodesToCopy, array.length);\n        copiedNode.array.push(createPath(depth - nodesToCopy, node));\n    }\n    return l;\n}\nfunction copyFirstK(newList, k, leafSize) {\n    var currentNode = cloneNode(newList.root);\n    newList.root = currentNode;\n    for (var i = 1; i < k; ++i) {\n        var index = currentNode.array.length - 1;\n        if (currentNode.sizes !== undefined) {\n            currentNode.sizes[index] += leafSize;\n        }\n        var newNode = cloneNode(currentNode.array[index]);\n        currentNode.array[index] = newNode;\n        currentNode = newNode;\n    }\n    if (currentNode.sizes !== undefined) {\n        currentNode.sizes.push(arrayLast(currentNode.sizes) + leafSize);\n    }\n    return currentNode;\n}\nvar concatBuffer = new Array(3);\nfunction concatAffixes(left, right) {\n    var nr = 0;\n    var arrIdx = 0;\n    var i = 0;\n    var length = getSuffixSize(left);\n    concatBuffer[nr] = [];\n    for (i = 0; i < length; ++i) {\n        concatBuffer[nr][arrIdx++] = left.suffix[i];\n    }\n    length = getPrefixSize(right);\n    for (i = 0; i < length; ++i) {\n        if (arrIdx === 32) {\n            arrIdx = 0;\n            ++nr;\n            concatBuffer[nr] = [];\n        }\n        concatBuffer[nr][arrIdx++] = right.prefix[length - 1 - i];\n    }\n    length = getSuffixSize(right);\n    for (i = 0; i < length; ++i) {\n        if (arrIdx === 32) {\n            arrIdx = 0;\n            ++nr;\n            concatBuffer[nr] = [];\n        }\n        concatBuffer[nr][arrIdx++] = right.suffix[i];\n    }\n    return nr;\n}\nfunction concat(left, right) {\n    if (left.length === 0) {\n        return right;\n    }\n    else if (right.length === 0) {\n        return left;\n    }\n    var newSize = left.length + right.length;\n    var rightSuffixSize = getSuffixSize(right);\n    var newList = cloneList(left);\n    if (right.root === undefined) {\n        var nrOfAffixes = concatAffixes(left, right);\n        for (var i = 0; i < nrOfAffixes; ++i) {\n            newList = appendNodeToTree(newList, concatBuffer[i]);\n            newList.length += concatBuffer[i].length;\n            concatBuffer[i] = undefined;\n        }\n        newList.length = newSize;\n        newList.suffix = concatBuffer[nrOfAffixes];\n        newList.bits = setSuffix(concatBuffer[nrOfAffixes].length, newList.bits);\n        concatBuffer[nrOfAffixes] = undefined;\n        return newList;\n    }\n    else {\n        var leftSuffixSize = getSuffixSize(left);\n        if (leftSuffixSize > 0) {\n            newList = appendNodeToTree(newList, left.suffix.slice(0, leftSuffixSize));\n            newList.length += leftSuffixSize;\n        }\n        newList = appendNodeToTree(newList, right.prefix.slice(0, getPrefixSize(right)).reverse());\n        var newNode = concatSubTree(newList.root, getDepth(newList), right.root, getDepth(right), true);\n        var newDepth = getHeight(newNode);\n        setSizes(newNode, newDepth);\n        newList.root = newNode;\n        newList.offset &= ~(mask << (getDepth(left) * branchBits));\n        newList.length = newSize;\n        newList.bits = setSuffix(rightSuffixSize, setDepth(newDepth, newList.bits));\n        newList.suffix = right.suffix;\n        return newList;\n    }\n}\nexports.concat = concat;\nfunction update(index, a, l) {\n    if (index < 0 || l.length <= index) {\n        return l;\n    }\n    var prefixSize = getPrefixSize(l);\n    var suffixSize = getSuffixSize(l);\n    var newList = cloneList(l);\n    if (index < prefixSize) {\n        var newPrefix = copyArray(newList.prefix);\n        newPrefix[newPrefix.length - index - 1] = a;\n        newList.prefix = newPrefix;\n    }\n    else if (index >= l.length - suffixSize) {\n        var newSuffix = copyArray(newList.suffix);\n        newSuffix[index - (l.length - suffixSize)] = a;\n        newList.suffix = newSuffix;\n    }\n    else {\n        newList.root = updateNode(l.root, getDepth(l), index - prefixSize, l.offset, a);\n    }\n    return newList;\n}\nexports.update = update;\nfunction adjust(index, f, l) {\n    if (index < 0 || l.length <= index) {\n        return l;\n    }\n    return update(index, f(nth(index, l)), l);\n}\nexports.adjust = adjust;\nvar newAffix;\nfunction sliceNode(node, index, depth, pathLeft, pathRight, childLeft, childRight) {\n    var array = node.array.slice(pathLeft, pathRight + 1);\n    if (childLeft !== undefined) {\n        array[0] = childLeft;\n    }\n    if (childRight !== undefined) {\n        array[array.length - 1] = childRight;\n    }\n    var sizes = node.sizes;\n    if (sizes !== undefined) {\n        sizes = sizes.slice(pathLeft, pathRight + 1);\n        var slicedOffLeft = pathLeft !== 0 ? node.sizes[pathLeft - 1] : 0;\n        if (childLeft !== undefined) {\n            if (childLeft.sizes !== undefined) {\n                var oldChild = node.array[pathLeft];\n                slicedOffLeft +=\n                    arrayLast(oldChild.sizes) - arrayLast(childLeft.sizes);\n            }\n            else {\n                slicedOffLeft += ((index - slicedOffLeft) & ~31) + 32;\n            }\n        }\n        for (var i = 0; i < sizes.length; ++i) {\n            sizes[i] -= slicedOffLeft;\n        }\n        if (childRight !== undefined) {\n            var slicedOffRight = sizeOfSubtree(node.array[pathRight], depth - 1) -\n                sizeOfSubtree(childRight, depth - 1);\n            sizes[sizes.length - 1] -= slicedOffRight;\n        }\n    }\n    return new Node(sizes, array);\n}\nvar newOffset = 0;\nfunction sliceLeft(tree, depth, index, offset, top) {\n    var _a = getPath(index, offset, depth, tree.sizes), path = _a.path, newIndex = _a.index, updatedOffset = _a.updatedOffset;\n    if (depth === 0) {\n        newAffix = tree.array.slice(path).reverse();\n        return undefined;\n    }\n    else {\n        var child = sliceLeft(tree.array[path], depth - 1, newIndex, updatedOffset, false);\n        if (child === undefined) {\n            ++path;\n            if (path === tree.array.length) {\n                return undefined;\n            }\n        }\n        if (tree.sizes === undefined && top === false) {\n            newOffset |= (32 - (tree.array.length - path)) << (depth * branchBits);\n        }\n        return sliceNode(tree, index, depth, path, tree.array.length - 1, child, undefined);\n    }\n}\nfunction sliceRight(node, depth, index, offset) {\n    var _a = getPath(index, offset, depth, node.sizes), path = _a.path, newIndex = _a.index;\n    if (depth === 0) {\n        newAffix = node.array.slice(0, path + 1);\n        return undefined;\n    }\n    else {\n        var child = sliceRight(node.array[path], depth - 1, newIndex, path === 0 ? offset : 0);\n        if (child === undefined) {\n            --path;\n            if (path === -1) {\n                return undefined;\n            }\n        }\n        var array = node.array.slice(0, path + 1);\n        if (child !== undefined) {\n            array[array.length - 1] = child;\n        }\n        var sizes = node.sizes;\n        if (sizes !== undefined) {\n            sizes = sizes.slice(0, path + 1);\n            if (child !== undefined) {\n                var slicedOff = sizeOfSubtree(node.array[path], depth - 1) -\n                    sizeOfSubtree(child, depth - 1);\n                sizes[sizes.length - 1] -= slicedOff;\n            }\n        }\n        return new Node(sizes, array);\n    }\n}\nfunction sliceTreeList(from, to, tree, depth, offset, l) {\n    var sizes = tree.sizes;\n    var _a = getPath(from, offset, depth, sizes), pathLeft = _a.path, newFrom = _a.index;\n    var _b = getPath(to, offset, depth, sizes), pathRight = _b.path, newTo = _b.index;\n    if (depth === 0) {\n        l.prefix = emptyAffix;\n        l.suffix = tree.array.slice(pathLeft, pathRight + 1);\n        l.root = undefined;\n        l.bits = setSuffix(pathRight - pathLeft + 1, 0);\n        return l;\n    }\n    else if (pathLeft === pathRight) {\n        l.bits = decrementDepth(l.bits);\n        return sliceTreeList(newFrom, newTo, tree.array[pathLeft], depth - 1, pathLeft === 0 ? offset : 0, l);\n    }\n    else {\n        var childRight = sliceRight(tree.array[pathRight], depth - 1, newTo, 0);\n        l.bits = setSuffix(newAffix.length, l.bits);\n        l.suffix = newAffix;\n        if (childRight === undefined) {\n            --pathRight;\n        }\n        newOffset = 0;\n        var childLeft = sliceLeft(tree.array[pathLeft], depth - 1, newFrom, pathLeft === 0 ? offset : 0, pathLeft === pathRight);\n        l.offset = newOffset;\n        l.bits = setPrefix(newAffix.length, l.bits);\n        l.prefix = newAffix;\n        if (childLeft === undefined) {\n            ++pathLeft;\n        }\n        if (pathLeft >= pathRight) {\n            if (pathLeft > pathRight) {\n                l.bits = setDepth(0, l.bits);\n                l.root = undefined;\n            }\n            else {\n                l.bits = decrementDepth(l.bits);\n                var newRoot = childRight !== undefined\n                    ? childRight\n                    : childLeft !== undefined\n                        ? childLeft\n                        : tree.array[pathLeft];\n                l.root = new Node(newRoot.sizes, newRoot.array);\n            }\n        }\n        else {\n            l.root = sliceNode(tree, from, depth, pathLeft, pathRight, childLeft, childRight);\n        }\n        return l;\n    }\n}\nfunction slice(from, to, l) {\n    var bits = l.bits, length = l.length;\n    to = Math.min(length, to);\n    if (from < 0) {\n        from = length + from;\n    }\n    if (to < 0) {\n        to = length + to;\n    }\n    if (to <= from || to <= 0 || length <= from) {\n        return empty();\n    }\n    if (from <= 0 && length <= to) {\n        return l;\n    }\n    var newLength = to - from;\n    var prefixSize = getPrefixSize(l);\n    var suffixSize = getSuffixSize(l);\n    if (to <= prefixSize) {\n        return new List(setPrefix(newLength, 0), 0, newLength, l.prefix.slice(prefixSize - to, prefixSize - from), undefined, emptyAffix);\n    }\n    var suffixStart = length - suffixSize;\n    if (suffixStart <= from) {\n        return new List(setSuffix(newLength, 0), 0, newLength, emptyAffix, undefined, l.suffix.slice(from - suffixStart, to - suffixStart));\n    }\n    var newList = cloneList(l);\n    newList.length = newLength;\n    if (prefixSize <= from && to <= suffixStart) {\n        sliceTreeList(from - prefixSize + l.offset, to - prefixSize + l.offset - 1, l.root, getDepth(l), l.offset, newList);\n        return newList;\n    }\n    if (0 < from) {\n        if (from < prefixSize) {\n            newList.prefix = l.prefix.slice(0, prefixSize - from);\n            bits = setPrefix(prefixSize - from, bits);\n        }\n        else {\n            newOffset = 0;\n            newList.root = sliceLeft(newList.root, getDepth(l), from - prefixSize, l.offset, true);\n            newList.offset = newOffset;\n            if (newList.root === undefined) {\n                bits = setDepth(0, bits);\n            }\n            bits = setPrefix(newAffix.length, bits);\n            prefixSize = newAffix.length;\n            newList.prefix = newAffix;\n        }\n    }\n    if (to < length) {\n        if (length - to < suffixSize) {\n            bits = setSuffix(suffixSize - (length - to), bits);\n            newList.suffix = l.suffix.slice(0, suffixSize - (length - to));\n        }\n        else {\n            newList.root = sliceRight(newList.root, getDepth(l), to - prefixSize - 1, newList.offset);\n            if (newList.root === undefined) {\n                bits = setDepth(0, bits);\n                newList.offset = 0;\n            }\n            bits = setSuffix(newAffix.length, bits);\n            newList.suffix = newAffix;\n        }\n    }\n    newList.bits = bits;\n    return newList;\n}\nexports.slice = slice;\nfunction take(n, l) {\n    return slice(0, n, l);\n}\nexports.take = take;\nfunction findNotIndexCb(value, state) {\n    if (state.predicate(value)) {\n        ++state.index;\n        return true;\n    }\n    else {\n        return false;\n    }\n}\nfunction takeWhile(predicate, l) {\n    var index = foldlCb(findNotIndexCb, { predicate: predicate, index: 0 }, l).index;\n    return slice(0, index, l);\n}\nexports.takeWhile = takeWhile;\nfunction takeLastWhile(predicate, l) {\n    var index = foldrCb(findNotIndexCb, { predicate: predicate, index: 0 }, l).index;\n    return slice(l.length - index, l.length, l);\n}\nexports.takeLastWhile = takeLastWhile;\nfunction dropWhile(predicate, l) {\n    var index = foldlCb(findNotIndexCb, { predicate: predicate, index: 0 }, l).index;\n    return slice(index, l.length, l);\n}\nexports.dropWhile = dropWhile;\nfunction dropRepeats(l) {\n    return dropRepeatsWith(elementEquals, l);\n}\nexports.dropRepeats = dropRepeats;\nfunction dropRepeatsWith(predicate, l) {\n    return foldl(function (acc, a) {\n        return acc.length !== 0 && predicate(last(acc), a) ? acc : push(a, acc);\n    }, emptyPushable(), l);\n}\nexports.dropRepeatsWith = dropRepeatsWith;\nfunction takeLast(n, l) {\n    return slice(l.length - n, l.length, l);\n}\nexports.takeLast = takeLast;\nfunction splitAt(index, l) {\n    return [slice(0, index, l), slice(index, l.length, l)];\n}\nexports.splitAt = splitAt;\nfunction splitWhen(predicate, l) {\n    var idx = findIndex(predicate, l);\n    return idx === -1 ? [l, empty()] : splitAt(idx, l);\n}\nexports.splitWhen = splitWhen;\nfunction splitEvery(size, l) {\n    var _a = foldl(function (_a, elm) {\n        var l2 = _a.l2, buffer = _a.buffer;\n        push(elm, buffer);\n        if (buffer.length === size) {\n            return { l2: push(buffer, l2), buffer: emptyPushable() };\n        }\n        else {\n            return { l2: l2, buffer: buffer };\n        }\n    }, { l2: emptyPushable(), buffer: emptyPushable() }, l), l2 = _a.l2, buffer = _a.buffer;\n    return buffer.length === 0 ? l2 : push(buffer, l2);\n}\nexports.splitEvery = splitEvery;\nfunction remove(from, amount, l) {\n    return concat(slice(0, from, l), slice(from + amount, l.length, l));\n}\nexports.remove = remove;\nfunction drop(n, l) {\n    return slice(n, l.length, l);\n}\nexports.drop = drop;\nfunction dropLast(n, l) {\n    return slice(0, l.length - n, l);\n}\nexports.dropLast = dropLast;\nfunction pop(l) {\n    return slice(0, -1, l);\n}\nexports.pop = pop;\nexports.init = pop;\nfunction tail(l) {\n    return slice(1, l.length, l);\n}\nexports.tail = tail;\nfunction arrayPush(array, a) {\n    array.push(a);\n    return array;\n}\nfunction toArray(l) {\n    return foldl(arrayPush, [], l);\n}\nexports.toArray = toArray;\nfunction insert(index, element, l) {\n    return concat(append(element, slice(0, index, l)), slice(index, l.length, l));\n}\nexports.insert = insert;\nfunction insertAll(index, elements, l) {\n    return concat(concat(slice(0, index, l), elements), slice(index, l.length, l));\n}\nexports.insertAll = insertAll;\nfunction reverse(l) {\n    return foldl(function (newL, element) { return prepend(element, newL); }, empty(), l);\n}\nexports.reverse = reverse;\nfunction isList(l) {\n    return typeof l === \"object\" && Array.isArray(l.suffix);\n}\nexports.isList = isList;\nfunction zip(as, bs) {\n    return zipWith(function (a, b) { return [a, b]; }, as, bs);\n}\nexports.zip = zip;\nfunction zipWith(f, as, bs) {\n    var swapped = bs.length < as.length;\n    var iterator = (swapped ? as : bs)[Symbol.iterator]();\n    return map(function (a) {\n        var b = iterator.next().value;\n        return swapped ? f(b, a) : f(a, b);\n    }, (swapped ? bs : as));\n}\nexports.zipWith = zipWith;\nfunction isPrimitive(value) {\n    return typeof value === \"number\" || typeof value === \"string\";\n}\nfunction comparePrimitive(a, b) {\n    return a === b ? 0 : a < b ? -1 : 1;\n}\nvar ord = \"fantasy-land/lte\";\nfunction compareOrd(a, b) {\n    return a[ord](b) ? (b[ord](a) ? 0 : -1) : 1;\n}\nfunction sort(l) {\n    if (l.length === 0) {\n        return l;\n    }\n    else if (isPrimitive(first(l))) {\n        return from(toArray(l).sort(comparePrimitive));\n    }\n    else {\n        return sortWith(compareOrd, l);\n    }\n}\nexports.sort = sort;\nfunction sortWith(comparator, l) {\n    var arr = [];\n    var i = 0;\n    forEach(function (elm) { return arr.push({ idx: i++, elm: elm }); }, l);\n    arr.sort(function (_a, _b) {\n        var a = _a.elm, i = _a.idx;\n        var b = _b.elm, j = _b.idx;\n        var c = comparator(a, b);\n        return c !== 0 ? c : i < j ? -1 : 1;\n    });\n    var newL = emptyPushable();\n    for (var i_3 = 0; i_3 < arr.length; ++i_3) {\n        push(arr[i_3].elm, newL);\n    }\n    return newL;\n}\nexports.sortWith = sortWith;\nfunction sortBy(f, l) {\n    if (l.length === 0) {\n        return l;\n    }\n    var arr = [];\n    var i = 0;\n    forEach(function (elm) { return arr.push({ idx: i++, elm: elm, prop: f(elm) }); }, l);\n    var comparator = isPrimitive(arr[0].prop)\n        ? comparePrimitive\n        : compareOrd;\n    arr.sort(function (_a, _b) {\n        var a = _a.prop, i = _a.idx;\n        var b = _b.prop, j = _b.idx;\n        var c = comparator(a, b);\n        return c !== 0 ? c : i < j ? -1 : 1;\n    });\n    var newL = emptyPushable();\n    for (var i_4 = 0; i_4 < arr.length; ++i_4) {\n        push(arr[i_4].elm, newL);\n    }\n    return newL;\n}\nexports.sortBy = sortBy;\nfunction group(l) {\n    return groupWith(elementEquals, l);\n}\nexports.group = group;\nfunction groupWith(f, l) {\n    var result = emptyPushable();\n    var buffer = emptyPushable();\n    forEach(function (a) {\n        if (buffer.length !== 0 && !f(last(buffer), a)) {\n            push(buffer, result);\n            buffer = emptyPushable();\n        }\n        push(a, buffer);\n    }, l);\n    return buffer.length === 0 ? result : push(buffer, result);\n}\nexports.groupWith = groupWith;\nfunction intersperse(separator, l) {\n    return pop(foldl(function (l2, a) { return push(separator, push(a, l2)); }, emptyPushable(), l));\n}\nexports.intersperse = intersperse;\nfunction isEmpty(l) {\n    return l.length === 0;\n}\nexports.isEmpty = isEmpty;\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.18.1';\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      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`',\n      INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`';\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 whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\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  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\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 `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\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 `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\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     * **Security:** See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md)\n     * \u2014 `_.template` is insecure and will be removed in v5.\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 {boolean} 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      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            };\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, 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 (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\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      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var 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\n      // Prevent prototype pollution:\n      // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg\n      // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh\n      var index = -1,\n          length = path.length;\n\n      if (!length) {\n        return true;\n      }\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        // Always block \"__proto__\" anywhere in the path if it's not expected\n        if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) {\n          return false;\n        }\n\n        // Block constructor/prototype as non-terminal traversal keys to prevent\n        // escaping the object graph into built-in constructors and prototypes.\n        if ((key === 'constructor' || key === 'prototype') && index < length - 1) {\n          return false;\n        }\n      }\n\n      var obj = parent(object, path);\n      return obj == null || delete obj[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      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\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      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\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`, `-0`, `0n`, `\"\"`, `undefined`, and `NaN` are falsy.\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        baseAssignValue(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     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', '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': 30 },\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', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['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 = baseTrim(value);\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     * **Note:** If `lower` is greater than `upper`, the values are swapped.\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     * // when lower is greater than upper the values are swapped\n     * _.random(5, 0);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(-5);\n     * // => an integer between -5 and 0\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\u00E9j\u00E0 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     * **Security:** `_.template` is insecure and should not be used. It will be\n     * removed in Lodash v5. Avoid untrusted input. See\n     * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md).\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 = assignWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      arrayEach(importsKeys, function(key) {\n        if (reForbiddenIdentifierChars.test(key)) {\n          throw new Error(INVALID_TEMPL_IMPORTS_ERROR_TEXT);\n        }\n      });\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      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/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      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\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 baseTrim(string);\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.slice(0, trimmedEndIndex(string) + 1);\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     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\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     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { '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     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\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     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { '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     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\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     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\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 matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\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", "/**\n * @license\n * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE\n */\n;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&t(n[r],r,n)!==false;);return n}function e(n,t){for(var r=null==n?0:n.length;r--&&t(n[r],r,n)!==false;);return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;\nreturn true}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!!(null==n?0:n.length)&&y(n,t,0)>-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);\nreturn r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function p(n){return n.split(\"\")}function _(n){return n.match(Dt)||[]}function v(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function g(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function y(n,t,r){return t===t?Z(n,t,r):g(n,b,r)}function d(n,t,r,e){\nfor(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function b(n){return n!==n}function w(n,t){var r=null==n?0:n.length;return r?k(n,t)/r:Un}function m(n){return function(t){return null==t?X:t[n]}}function x(n){return function(t){return null==n?X:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function A(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function k(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==X&&(r=r===X?i:r+i)}return r;\n}function I(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function O(n,t){return c(t,function(t){return[t,n[t]]})}function R(n){return n?n.slice(0,H(n)+1).replace(Ct,\"\"):n}function z(n){return function(t){return n(t)}}function E(n,t){return c(t,function(t){return n[t]})}function S(n,t){return n.has(t)}function W(n,t){for(var r=-1,e=n.length;++r<e&&y(t,n[r],0)>-1;);return r}function L(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;\nreturn e}function U(n){return\"\\\\\"+Yr[n]}function B(n,t){return null==n?X:n[t]}function T(n){return Pr.test(n)}function $(n){return qr.test(n)}function D(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function F(n,t){return function(r){return n(t(r))}}function N(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&o!==an||(n[r]=an,i[u++]=r)}return i}function P(n){var t=-1,r=Array(n.size);\nreturn n.forEach(function(n){r[++t]=n}),r}function q(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function Z(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}function K(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}function V(n){return T(n)?J(n):_e(n)}function G(n){return T(n)?Y(n):p(n)}function H(n){for(var t=n.length;t--&&Ut.test(n.charAt(t)););return t}function J(n){for(var t=Fr.lastIndex=0;Fr.test(n);)++t;return t}function Y(n){return n.match(Fr)||[];\n}function Q(n){return n.match(Nr)||[]}var X,nn=\"4.18.1\",tn=200,rn=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",en=\"Expected a function\",un=\"Invalid `variable` option passed into `_.template`\",on=\"Invalid `imports` option passed into `_.template`\",fn=\"__lodash_hash_undefined__\",cn=500,an=\"__lodash_placeholder__\",ln=1,sn=2,hn=4,pn=1,_n=2,vn=1,gn=2,yn=4,dn=8,bn=16,wn=32,mn=64,xn=128,jn=256,An=512,kn=30,In=\"...\",On=800,Rn=16,zn=1,En=2,Sn=3,Wn=1/0,Ln=9007199254740991,Cn=1.7976931348623157e308,Un=NaN,Bn=4294967295,Tn=Bn-1,$n=Bn>>>1,Dn=[[\"ary\",xn],[\"bind\",vn],[\"bindKey\",gn],[\"curry\",dn],[\"curryRight\",bn],[\"flip\",An],[\"partial\",wn],[\"partialRight\",mn],[\"rearg\",jn]],Mn=\"[object Arguments]\",Fn=\"[object Array]\",Nn=\"[object AsyncFunction]\",Pn=\"[object Boolean]\",qn=\"[object Date]\",Zn=\"[object DOMException]\",Kn=\"[object Error]\",Vn=\"[object Function]\",Gn=\"[object GeneratorFunction]\",Hn=\"[object Map]\",Jn=\"[object Number]\",Yn=\"[object Null]\",Qn=\"[object Object]\",Xn=\"[object Promise]\",nt=\"[object Proxy]\",tt=\"[object RegExp]\",rt=\"[object Set]\",et=\"[object String]\",ut=\"[object Symbol]\",it=\"[object Undefined]\",ot=\"[object WeakMap]\",ft=\"[object WeakSet]\",ct=\"[object ArrayBuffer]\",at=\"[object DataView]\",lt=\"[object Float32Array]\",st=\"[object Float64Array]\",ht=\"[object Int8Array]\",pt=\"[object Int16Array]\",_t=\"[object Int32Array]\",vt=\"[object Uint8Array]\",gt=\"[object Uint8ClampedArray]\",yt=\"[object Uint16Array]\",dt=\"[object Uint32Array]\",bt=/\\b__p\\+='';/g,wt=/\\b(__p\\+=)''\\+/g,mt=/(__e\\(.*?\\)|\\b__t\\))\\+'';/g,xt=/&(?:amp|lt|gt|quot|#39);/g,jt=/[&<>\"']/g,At=RegExp(xt.source),kt=RegExp(jt.source),It=/<%-([\\s\\S]+?)%>/g,Ot=/<%([\\s\\S]+?)%>/g,Rt=/<%=([\\s\\S]+?)%>/g,zt=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Et=/^\\w*$/,St=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,Wt=/[\\\\^$.*+?()[\\]{}|]/g,Lt=RegExp(Wt.source),Ct=/^\\s+/,Ut=/\\s/,Bt=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Tt=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,$t=/,? & /,Dt=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,Mt=/[()=,{}\\[\\]\\/\\s]/,Ft=/\\\\(\\\\)?/g,Nt=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,Pt=/\\w*$/,qt=/^[-+]0x[0-9a-f]+$/i,Zt=/^0b[01]+$/i,Kt=/^\\[object .+?Constructor\\]$/,Vt=/^0o[0-7]+$/i,Gt=/^(?:0|[1-9]\\d*)$/,Ht=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Jt=/($^)/,Yt=/['\\n\\r\\u2028\\u2029\\\\]/g,Qt=\"\\\\ud800-\\\\udfff\",Xt=\"\\\\u0300-\\\\u036f\",nr=\"\\\\ufe20-\\\\ufe2f\",tr=\"\\\\u20d0-\\\\u20ff\",rr=Xt+nr+tr,er=\"\\\\u2700-\\\\u27bf\",ur=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",ir=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\",or=\"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\",fr=\"\\\\u2000-\\\\u206f\",cr=\" \\\\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\",ar=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",lr=\"\\\\ufe0e\\\\ufe0f\",sr=ir+or+fr+cr,hr=\"['\\u2019]\",pr=\"[\"+Qt+\"]\",_r=\"[\"+sr+\"]\",vr=\"[\"+rr+\"]\",gr=\"\\\\d+\",yr=\"[\"+er+\"]\",dr=\"[\"+ur+\"]\",br=\"[^\"+Qt+sr+gr+er+ur+ar+\"]\",wr=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",mr=\"(?:\"+vr+\"|\"+wr+\")\",xr=\"[^\"+Qt+\"]\",jr=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Ar=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",kr=\"[\"+ar+\"]\",Ir=\"\\\\u200d\",Or=\"(?:\"+dr+\"|\"+br+\")\",Rr=\"(?:\"+kr+\"|\"+br+\")\",zr=\"(?:\"+hr+\"(?:d|ll|m|re|s|t|ve))?\",Er=\"(?:\"+hr+\"(?:D|LL|M|RE|S|T|VE))?\",Sr=mr+\"?\",Wr=\"[\"+lr+\"]?\",Lr=\"(?:\"+Ir+\"(?:\"+[xr,jr,Ar].join(\"|\")+\")\"+Wr+Sr+\")*\",Cr=\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",Ur=\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",Br=Wr+Sr+Lr,Tr=\"(?:\"+[yr,jr,Ar].join(\"|\")+\")\"+Br,$r=\"(?:\"+[xr+vr+\"?\",vr,jr,Ar,pr].join(\"|\")+\")\",Dr=RegExp(hr,\"g\"),Mr=RegExp(vr,\"g\"),Fr=RegExp(wr+\"(?=\"+wr+\")|\"+$r+Br,\"g\"),Nr=RegExp([kr+\"?\"+dr+\"+\"+zr+\"(?=\"+[_r,kr,\"$\"].join(\"|\")+\")\",Rr+\"+\"+Er+\"(?=\"+[_r,kr+Or,\"$\"].join(\"|\")+\")\",kr+\"?\"+Or+\"+\"+zr,kr+\"+\"+Er,Ur,Cr,gr,Tr].join(\"|\"),\"g\"),Pr=RegExp(\"[\"+Ir+Qt+rr+lr+\"]\"),qr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Zr=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],Kr={};\nKr[lt]=Kr[st]=Kr[ht]=Kr[pt]=Kr[_t]=Kr[vt]=Kr[gt]=Kr[yt]=Kr[dt]=true,Kr[Mn]=Kr[Fn]=Kr[ct]=Kr[Pn]=Kr[at]=Kr[qn]=Kr[Kn]=Kr[Vn]=Kr[Hn]=Kr[Jn]=Kr[Qn]=Kr[tt]=Kr[rt]=Kr[et]=Kr[ot]=false;var Vr={};Vr[Mn]=Vr[Fn]=Vr[ct]=Vr[at]=Vr[Pn]=Vr[qn]=Vr[lt]=Vr[st]=Vr[ht]=Vr[pt]=Vr[_t]=Vr[Hn]=Vr[Jn]=Vr[Qn]=Vr[tt]=Vr[rt]=Vr[et]=Vr[ut]=Vr[vt]=Vr[gt]=Vr[yt]=Vr[dt]=true,Vr[Kn]=Vr[Vn]=Vr[ot]=false;var Gr={\"\\xc0\":\"A\",\"\\xc1\":\"A\",\"\\xc2\":\"A\",\"\\xc3\":\"A\",\"\\xc4\":\"A\",\"\\xc5\":\"A\",\"\\xe0\":\"a\",\"\\xe1\":\"a\",\"\\xe2\":\"a\",\"\\xe3\":\"a\",\"\\xe4\":\"a\",\"\\xe5\":\"a\",\n\"\\xc7\":\"C\",\"\\xe7\":\"c\",\"\\xd0\":\"D\",\"\\xf0\":\"d\",\"\\xc8\":\"E\",\"\\xc9\":\"E\",\"\\xca\":\"E\",\"\\xcb\":\"E\",\"\\xe8\":\"e\",\"\\xe9\":\"e\",\"\\xea\":\"e\",\"\\xeb\":\"e\",\"\\xcc\":\"I\",\"\\xcd\":\"I\",\"\\xce\":\"I\",\"\\xcf\":\"I\",\"\\xec\":\"i\",\"\\xed\":\"i\",\"\\xee\":\"i\",\"\\xef\":\"i\",\"\\xd1\":\"N\",\"\\xf1\":\"n\",\"\\xd2\":\"O\",\"\\xd3\":\"O\",\"\\xd4\":\"O\",\"\\xd5\":\"O\",\"\\xd6\":\"O\",\"\\xd8\":\"O\",\"\\xf2\":\"o\",\"\\xf3\":\"o\",\"\\xf4\":\"o\",\"\\xf5\":\"o\",\"\\xf6\":\"o\",\"\\xf8\":\"o\",\"\\xd9\":\"U\",\"\\xda\":\"U\",\"\\xdb\":\"U\",\"\\xdc\":\"U\",\"\\xf9\":\"u\",\"\\xfa\":\"u\",\"\\xfb\":\"u\",\"\\xfc\":\"u\",\"\\xdd\":\"Y\",\"\\xfd\":\"y\",\"\\xff\":\"y\",\"\\xc6\":\"Ae\",\n\"\\xe6\":\"ae\",\"\\xde\":\"Th\",\"\\xfe\":\"th\",\"\\xdf\":\"ss\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u0104\":\"A\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u0105\":\"a\",\"\\u0106\":\"C\",\"\\u0108\":\"C\",\"\\u010a\":\"C\",\"\\u010c\":\"C\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010b\":\"c\",\"\\u010d\":\"c\",\"\\u010e\":\"D\",\"\\u0110\":\"D\",\"\\u010f\":\"d\",\"\\u0111\":\"d\",\"\\u0112\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u0118\":\"E\",\"\\u011a\":\"E\",\"\\u0113\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u0119\":\"e\",\"\\u011b\":\"e\",\"\\u011c\":\"G\",\"\\u011e\":\"G\",\"\\u0120\":\"G\",\"\\u0122\":\"G\",\"\\u011d\":\"g\",\"\\u011f\":\"g\",\"\\u0121\":\"g\",\n\"\\u0123\":\"g\",\"\\u0124\":\"H\",\"\\u0126\":\"H\",\"\\u0125\":\"h\",\"\\u0127\":\"h\",\"\\u0128\":\"I\",\"\\u012a\":\"I\",\"\\u012c\":\"I\",\"\\u012e\":\"I\",\"\\u0130\":\"I\",\"\\u0129\":\"i\",\"\\u012b\":\"i\",\"\\u012d\":\"i\",\"\\u012f\":\"i\",\"\\u0131\":\"i\",\"\\u0134\":\"J\",\"\\u0135\":\"j\",\"\\u0136\":\"K\",\"\\u0137\":\"k\",\"\\u0138\":\"k\",\"\\u0139\":\"L\",\"\\u013b\":\"L\",\"\\u013d\":\"L\",\"\\u013f\":\"L\",\"\\u0141\":\"L\",\"\\u013a\":\"l\",\"\\u013c\":\"l\",\"\\u013e\":\"l\",\"\\u0140\":\"l\",\"\\u0142\":\"l\",\"\\u0143\":\"N\",\"\\u0145\":\"N\",\"\\u0147\":\"N\",\"\\u014a\":\"N\",\"\\u0144\":\"n\",\"\\u0146\":\"n\",\"\\u0148\":\"n\",\"\\u014b\":\"n\",\"\\u014c\":\"O\",\n\"\\u014e\":\"O\",\"\\u0150\":\"O\",\"\\u014d\":\"o\",\"\\u014f\":\"o\",\"\\u0151\":\"o\",\"\\u0154\":\"R\",\"\\u0156\":\"R\",\"\\u0158\":\"R\",\"\\u0155\":\"r\",\"\\u0157\":\"r\",\"\\u0159\":\"r\",\"\\u015a\":\"S\",\"\\u015c\":\"S\",\"\\u015e\":\"S\",\"\\u0160\":\"S\",\"\\u015b\":\"s\",\"\\u015d\":\"s\",\"\\u015f\":\"s\",\"\\u0161\":\"s\",\"\\u0162\":\"T\",\"\\u0164\":\"T\",\"\\u0166\":\"T\",\"\\u0163\":\"t\",\"\\u0165\":\"t\",\"\\u0167\":\"t\",\"\\u0168\":\"U\",\"\\u016a\":\"U\",\"\\u016c\":\"U\",\"\\u016e\":\"U\",\"\\u0170\":\"U\",\"\\u0172\":\"U\",\"\\u0169\":\"u\",\"\\u016b\":\"u\",\"\\u016d\":\"u\",\"\\u016f\":\"u\",\"\\u0171\":\"u\",\"\\u0173\":\"u\",\"\\u0174\":\"W\",\"\\u0175\":\"w\",\n\"\\u0176\":\"Y\",\"\\u0177\":\"y\",\"\\u0178\":\"Y\",\"\\u0179\":\"Z\",\"\\u017b\":\"Z\",\"\\u017d\":\"Z\",\"\\u017a\":\"z\",\"\\u017c\":\"z\",\"\\u017e\":\"z\",\"\\u0132\":\"IJ\",\"\\u0133\":\"ij\",\"\\u0152\":\"Oe\",\"\\u0153\":\"oe\",\"\\u0149\":\"'n\",\"\\u017f\":\"s\"},Hr={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},Jr={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"},Yr={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Qr=parseFloat,Xr=parseInt,ne=typeof global==\"object\"&&global&&global.Object===Object&&global,te=typeof self==\"object\"&&self&&self.Object===Object&&self,re=ne||te||Function(\"return this\")(),ee=typeof exports==\"object\"&&exports&&!exports.nodeType&&exports,ue=ee&&typeof module==\"object\"&&module&&!module.nodeType&&module,ie=ue&&ue.exports===ee,oe=ie&&ne.process,fe=function(){\ntry{var n=ue&&ue.require&&ue.require(\"util\").types;return n?n:oe&&oe.binding&&oe.binding(\"util\")}catch(n){}}(),ce=fe&&fe.isArrayBuffer,ae=fe&&fe.isDate,le=fe&&fe.isMap,se=fe&&fe.isRegExp,he=fe&&fe.isSet,pe=fe&&fe.isTypedArray,_e=m(\"length\"),ve=x(Gr),ge=x(Hr),ye=x(Jr),de=function p(x){function Z(n){if(cc(n)&&!bh(n)&&!(n instanceof Ut)){if(n instanceof Y)return n;if(bl.call(n,\"__wrapped__\"))return eo(n)}return new Y(n)}function J(){}function Y(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,\nthis.__index__=0,this.__values__=X}function Ut(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Bn,this.__views__=[]}function Dt(){var n=new Ut(this.__wrapped__);return n.__actions__=Tu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Tu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Tu(this.__views__),n}function Qt(){if(this.__filtered__){var n=new Ut(this);n.__dir__=-1,\nn.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n}function Xt(){var n=this.__wrapped__.value(),t=this.__dir__,r=bh(n),e=t<0,u=r?n.length:0,i=Ii(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=Hl(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return wu(n,this.__actions__);var _=[];n:for(;c--&&h<p;){a+=t;for(var v=-1,g=n[a];++v<s;){var y=l[v],d=y.iteratee,b=y.type,w=d(g);if(b==En)g=w;else if(!w){if(b==zn)continue n;break n}}_[h++]=g}return _}function nr(n){\nvar t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function tr(){this.__data__=is?is(null):{},this.size=0}function rr(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}function er(n){var t=this.__data__;if(is){var r=t[n];return r===fn?X:r}return bl.call(t,n)?t[n]:X}function ur(n){var t=this.__data__;return is?t[n]!==X:bl.call(t,n)}function ir(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=is&&t===X?fn:t,this}function or(n){\nvar t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function fr(){this.__data__=[],this.size=0}function cr(n){var t=this.__data__,r=Lr(t,n);return!(r<0)&&(r==t.length-1?t.pop():Ll.call(t,r,1),--this.size,true)}function ar(n){var t=this.__data__,r=Lr(t,n);return r<0?X:t[r][1]}function lr(n){return Lr(this.__data__,n)>-1}function sr(n,t){var r=this.__data__,e=Lr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function hr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){\nvar e=n[t];this.set(e[0],e[1])}}function pr(){this.size=0,this.__data__={hash:new nr,map:new(ts||or),string:new nr}}function _r(n){var t=xi(this,n).delete(n);return this.size-=t?1:0,t}function vr(n){return xi(this,n).get(n)}function gr(n){return xi(this,n).has(n)}function yr(n,t){var r=xi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this}function dr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new hr;++t<r;)this.add(n[t])}function br(n){return this.__data__.set(n,fn),this}function wr(n){\nreturn this.__data__.has(n)}function mr(n){this.size=(this.__data__=new or(n)).size}function xr(){this.__data__=new or,this.size=0}function jr(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r}function Ar(n){return this.__data__.get(n)}function kr(n){return this.__data__.has(n)}function Ir(n,t){var r=this.__data__;if(r instanceof or){var e=r.__data__;if(!ts||e.length<tn-1)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new hr(e)}return r.set(n,t),this.size=r.size,this}function Or(n,t){\nvar r=bh(n),e=!r&&dh(n),u=!r&&!e&&mh(n),i=!r&&!e&&!u&&Ih(n),o=r||e||u||i,f=o?I(n.length,hl):[],c=f.length;for(var a in n)!t&&!bl.call(n,a)||o&&(\"length\"==a||u&&(\"offset\"==a||\"parent\"==a)||i&&(\"buffer\"==a||\"byteLength\"==a||\"byteOffset\"==a)||Ci(a,c))||f.push(a);return f}function Rr(n){var t=n.length;return t?n[tu(0,t-1)]:X}function zr(n,t){return Xi(Tu(n),Fr(t,0,n.length))}function Er(n){return Xi(Tu(n))}function Sr(n,t,r){(r===X||Gf(n[t],r))&&(r!==X||t in n)||Tr(n,t,r)}function Wr(n,t,r){var e=n[t];\nbl.call(n,t)&&Gf(e,r)&&(r!==X||t in n)||Tr(n,t,r)}function Lr(n,t){for(var r=n.length;r--;)if(Gf(n[r][0],t))return r;return-1}function Cr(n,t,r,e){return ys(n,function(n,u,i){t(e,n,r(n),i)}),e}function Ur(n,t){return n&&$u(t,Pc(t),n)}function Br(n,t){return n&&$u(t,qc(t),n)}function Tr(n,t,r){\"__proto__\"==t&&Tl?Tl(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function $r(n,t){for(var r=-1,e=t.length,u=il(e),i=null==n;++r<e;)u[r]=i?X:Mc(n,t[r]);return u}function Fr(n,t,r){return n===n&&(r!==X&&(n=n<=r?n:r),\nt!==X&&(n=n>=t?n:t)),n}function Nr(n,t,e,u,i,o){var f,c=t&ln,a=t&sn,l=t&hn;if(e&&(f=i?e(n,u,i,o):e(n)),f!==X)return f;if(!fc(n))return n;var s=bh(n);if(s){if(f=zi(n),!c)return Tu(n,f)}else{var h=zs(n),p=h==Vn||h==Gn;if(mh(n))return Ou(n,c);if(h==Qn||h==Mn||p&&!i){if(f=a||p?{}:Ei(n),!c)return a?Mu(n,Br(f,n)):Du(n,Ur(f,n))}else{if(!Vr[h])return i?n:{};f=Si(n,h,c)}}o||(o=new mr);var _=o.get(n);if(_)return _;o.set(n,f),kh(n)?n.forEach(function(r){f.add(Nr(r,t,e,r,n,o))}):jh(n)&&n.forEach(function(r,u){\nf.set(u,Nr(r,t,e,u,n,o))});var v=l?a?di:yi:a?qc:Pc,g=s?X:v(n);return r(g||n,function(r,u){g&&(u=r,r=n[u]),Wr(f,u,Nr(r,t,e,u,n,o))}),f}function Pr(n){var t=Pc(n);return function(r){return qr(r,n,t)}}function qr(n,t,r){var e=r.length;if(null==n)return!e;for(n=ll(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===X&&!(u in n)||!i(o))return false}return true}function Gr(n,t,r){if(typeof n!=\"function\")throw new pl(en);return Ws(function(){n.apply(X,r)},t)}function Hr(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;\nif(!l)return s;r&&(t=c(t,z(r))),e?(i=f,a=false):t.length>=tn&&(i=S,a=false,t=new dr(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p);if(p=e||0!==p?p:0,a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function Jr(n,t){var r=true;return ys(n,function(n,e,u){return r=!!t(n,e,u)}),r}function Yr(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===X?o===o&&!bc(o):r(o,f)))var f=o,c=i}return c}function ne(n,t,r,e){var u=n.length;for(r=kc(r),r<0&&(r=-r>u?0:u+r),\ne=e===X||e>u?u:kc(e),e<0&&(e+=u),e=r>e?0:Ic(e);r<e;)n[r++]=t;return n}function te(n,t){var r=[];return ys(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function ee(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=Li),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?ee(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function ue(n,t){return n&&bs(n,t,Pc)}function oe(n,t){return n&&ws(n,t,Pc)}function fe(n,t){return i(t,function(t){return uc(n[t])})}function _e(n,t){t=ku(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[no(t[r++])];\nreturn r&&r==e?n:X}function de(n,t,r){var e=t(n);return bh(n)?e:a(e,r(n))}function we(n){return null==n?n===X?it:Yn:Bl&&Bl in ll(n)?ki(n):Ki(n)}function me(n,t){return n>t}function xe(n,t){return null!=n&&bl.call(n,t)}function je(n,t){return null!=n&&t in ll(n)}function Ae(n,t,r){return n>=Hl(t,r)&&n<Gl(t,r)}function ke(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=il(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,z(t))),s=Hl(p.length,s),l[a]=!r&&(t||u>=120&&p.length>=120)?new dr(a&&p):X}p=n[0];\nvar _=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],y=t?t(g):g;if(g=r||0!==g?g:0,!(v?S(v,y):e(h,y,r))){for(a=i;--a;){var d=l[a];if(!(d?S(d,y):e(n[a],y,r)))continue n}v&&v.push(y),h.push(g)}}return h}function Ie(n,t,r,e){return ue(n,function(n,u,i){t(e,r(n),u,i)}),e}function Oe(t,r,e){r=ku(r,t),t=Gi(t,r);var u=null==t?t:t[no(jo(r))];return null==u?X:n(u,t,e)}function Re(n){return cc(n)&&we(n)==Mn}function ze(n){return cc(n)&&we(n)==ct}function Ee(n){return cc(n)&&we(n)==qn}function Se(n,t,r,e,u){\nreturn n===t||(null==n||null==t||!cc(n)&&!cc(t)?n!==n&&t!==t:We(n,t,r,e,Se,u))}function We(n,t,r,e,u,i){var o=bh(n),f=bh(t),c=o?Fn:zs(n),a=f?Fn:zs(t);c=c==Mn?Qn:c,a=a==Mn?Qn:a;var l=c==Qn,s=a==Qn,h=c==a;if(h&&mh(n)){if(!mh(t))return false;o=true,l=false}if(h&&!l)return i||(i=new mr),o||Ih(n)?pi(n,t,r,e,u,i):_i(n,t,c,r,e,u,i);if(!(r&pn)){var p=l&&bl.call(n,\"__wrapped__\"),_=s&&bl.call(t,\"__wrapped__\");if(p||_){var v=p?n.value():n,g=_?t.value():t;return i||(i=new mr),u(v,g,r,e,i)}}return!!h&&(i||(i=new mr),vi(n,t,r,e,u,i));\n}function Le(n){return cc(n)&&zs(n)==Hn}function Ce(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=ll(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){f=r[u];var c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===X&&!(c in n))return false}else{var s=new mr;if(e)var h=e(a,l,c,n,t,s);if(!(h===X?Se(l,a,pn|_n,e,s):h))return false}}return true}function Ue(n){return!(!fc(n)||Di(n))&&(uc(n)?kl:Kt).test(to(n))}function Be(n){return cc(n)&&we(n)==tt}function Te(n){return cc(n)&&zs(n)==rt;\n}function $e(n){return cc(n)&&oc(n.length)&&!!Kr[we(n)]}function De(n){return typeof n==\"function\"?n:null==n?La:typeof n==\"object\"?bh(n)?Ze(n[0],n[1]):qe(n):Fa(n)}function Me(n){if(!Mi(n))return Vl(n);var t=[];for(var r in ll(n))bl.call(n,r)&&\"constructor\"!=r&&t.push(r);return t}function Fe(n){if(!fc(n))return Zi(n);var t=Mi(n),r=[];for(var e in n)(\"constructor\"!=e||!t&&bl.call(n,e))&&r.push(e);return r}function Ne(n,t){return n<t}function Pe(n,t){var r=-1,e=Hf(n)?il(n.length):[];return ys(n,function(n,u,i){\ne[++r]=t(n,u,i)}),e}function qe(n){var t=ji(n);return 1==t.length&&t[0][2]?Ni(t[0][0],t[0][1]):function(r){return r===n||Ce(r,n,t)}}function Ze(n,t){return Bi(n)&&Fi(t)?Ni(no(n),t):function(r){var e=Mc(r,n);return e===X&&e===t?Nc(r,n):Se(t,e,pn|_n)}}function Ke(n,t,r,e,u){n!==t&&bs(t,function(i,o){if(u||(u=new mr),fc(i))Ve(n,t,o,r,Ke,e,u);else{var f=e?e(Ji(n,o),i,o+\"\",n,t,u):X;f===X&&(f=i),Sr(n,o,f)}},qc)}function Ve(n,t,r,e,u,i,o){var f=Ji(n,r),c=Ji(t,r),a=o.get(c);if(a)return Sr(n,r,a),X;var l=i?i(f,c,r+\"\",n,t,o):X,s=l===X;\nif(s){var h=bh(c),p=!h&&mh(c),_=!h&&!p&&Ih(c);l=c,h||p||_?bh(f)?l=f:Jf(f)?l=Tu(f):p?(s=false,l=Ou(c,true)):_?(s=false,l=Wu(c,true)):l=[]:gc(c)||dh(c)?(l=f,dh(f)?l=Rc(f):fc(f)&&!uc(f)||(l=Ei(c))):s=false}s&&(o.set(c,l),u(l,c,e,i,o),o.delete(c)),Sr(n,r,l)}function Ge(n,t){var r=n.length;if(r)return t+=t<0?r:0,Ci(t,r)?n[t]:X}function He(n,t,r){t=t.length?c(t,function(n){return bh(n)?function(t){return _e(t,1===n.length?n[0]:n)}:n}):[La];var e=-1;return t=c(t,z(mi())),A(Pe(n,function(n,r,u){return{a:c(t,function(t){\nreturn t(n)}),b:++e,c:n}}),function(n,t){return Cu(n,t,r)})}function Je(n,t){return Ye(n,t,function(t,r){return Nc(n,r)})}function Ye(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=_e(n,o);r(f,o)&&fu(i,ku(o,n),f)}return i}function Qe(n){return function(t){return _e(t,n)}}function Xe(n,t,r,e){var u=e?d:y,i=-1,o=t.length,f=n;for(n===t&&(t=Tu(t)),r&&(f=c(n,z(r)));++i<o;)for(var a=0,l=t[i],s=r?r(l):l;(a=u(f,s,a,e))>-1;)f!==n&&Ll.call(f,a,1),Ll.call(n,a,1);return n}function nu(n,t){for(var r=n?t.length:0,e=r-1;r--;){\nvar u=t[r];if(r==e||u!==i){var i=u;Ci(u)?Ll.call(n,u,1):yu(n,u)}}return n}function tu(n,t){return n+Nl(Ql()*(t-n+1))}function ru(n,t,r,e){for(var u=-1,i=Gl(Fl((t-n)/(r||1)),0),o=il(i);i--;)o[e?i:++u]=n,n+=r;return o}function eu(n,t){var r=\"\";if(!n||t<1||t>Ln)return r;do t%2&&(r+=n),t=Nl(t/2),t&&(n+=n);while(t);return r}function uu(n,t){return Ls(Vi(n,t,La),n+\"\")}function iu(n){return Rr(ra(n))}function ou(n,t){var r=ra(n);return Xi(r,Fr(t,0,r.length))}function fu(n,t,r,e){if(!fc(n))return n;t=ku(t,n);\nfor(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=no(t[u]),a=r;if(\"__proto__\"===c||\"constructor\"===c||\"prototype\"===c)return n;if(u!=o){var l=f[c];a=e?e(l,c,f):X,a===X&&(a=fc(l)?l:Ci(t[u+1])?[]:{})}Wr(f,c,a),f=f[c]}return n}function cu(n){return Xi(ra(n))}function au(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=il(u);++e<u;)i[e]=n[e+t];return i}function lu(n,t){var r;return ys(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function su(n,t,r){\nvar e=0,u=null==n?e:n.length;if(typeof t==\"number\"&&t===t&&u<=$n){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!bc(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return hu(n,t,La,r)}function hu(n,t,r,e){var u=0,i=null==n?0:n.length;if(0===i)return 0;t=r(t);for(var o=t!==t,f=null===t,c=bc(t),a=t===X;u<i;){var l=Nl((u+i)/2),s=r(n[l]),h=s!==X,p=null===s,_=s===s,v=bc(s);if(o)var g=e||_;else g=a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):!p&&!v&&(e?s<=t:s<t);g?u=l+1:i=l}return Hl(i,Tn)}function pu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){\nvar o=n[r],f=t?t(o):o;if(!r||!Gf(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function _u(n){return typeof n==\"number\"?n:bc(n)?Un:+n}function vu(n){if(typeof n==\"string\")return n;if(bh(n))return c(n,vu)+\"\";if(bc(n))return vs?vs.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-Wn?\"-0\":t}function gu(n,t,r){var e=-1,u=o,i=n.length,c=true,a=[],l=a;if(r)c=false,u=f;else if(i>=tn){var s=t?null:ks(n);if(s)return P(s);c=false,u=S,l=new dr}else l=t?[]:a;n:for(;++e<i;){var h=n[e],p=t?t(h):h;if(h=r||0!==h?h:0,c&&p===p){for(var _=l.length;_--;)if(l[_]===p)continue n;\nt&&l.push(p),a.push(h)}else u(l,p,r)||(l!==a&&l.push(p),a.push(h))}return a}function yu(n,t){t=ku(t,n);var r=-1,e=t.length;if(!e)return true;for(;++r<e;){var u=no(t[r]);if(\"__proto__\"===u&&!bl.call(n,\"__proto__\"))return false;if((\"constructor\"===u||\"prototype\"===u)&&r<e-1)return false}var i=Gi(n,t);return null==i||delete i[no(jo(t))]}function du(n,t,r,e){return fu(n,t,r(_e(n,t)),e)}function bu(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?au(n,e?0:i,e?i+1:u):au(n,e?i+1:0,e?u:i)}\nfunction wu(n,t){var r=n;return r instanceof Ut&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mu(n,t,r){var e=n.length;if(e<2)return e?gu(n[0]):[];for(var u=-1,i=il(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=Hr(i[u]||o,n[f],t,r));return gu(ee(i,1),t,r)}function xu(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;){r(o,n[e],e<i?t[e]:X)}return o}function ju(n){return Jf(n)?n:[]}function Au(n){return typeof n==\"function\"?n:La}function ku(n,t){return bh(n)?n:Bi(n,t)?[n]:Cs(Ec(n));\n}function Iu(n,t,r){var e=n.length;return r=r===X?e:r,!t&&r>=e?n:au(n,t,r)}function Ou(n,t){if(t)return n.slice();var r=n.length,e=zl?zl(r):new n.constructor(r);return n.copy(e),e}function Ru(n){var t=new n.constructor(n.byteLength);return new Rl(t).set(new Rl(n)),t}function zu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function Eu(n){var t=new n.constructor(n.source,Pt.exec(n));return t.lastIndex=n.lastIndex,t}function Su(n){return _s?ll(_s.call(n)):{}}function Wu(n,t){\nreturn new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.length)}function Lu(n,t){if(n!==t){var r=n!==X,e=null===n,u=n===n,i=bc(n),o=t!==X,f=null===t,c=t===t,a=bc(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Cu(n,t,r){for(var e=-1,u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Lu(u[e],i[e]);if(c){if(e>=f)return c;return c*(\"desc\"==r[e]?-1:1)}}return n.b-t.b}function Uu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Gl(i-o,0),l=il(c+a),s=!e;++f<c;)l[f]=t[f];\nfor(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];return l}function Bu(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Gl(i-f,0),s=il(l+a),h=!e;++u<l;)s[u]=n[u];for(var p=u;++c<a;)s[p+c]=t[c];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Tu(n,t){var r=-1,e=n.length;for(t||(t=il(e));++r<e;)t[r]=n[r];return t}function $u(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):X;c===X&&(c=n[f]),u?Tr(r,f,c):Wr(r,f,c)}return r;\n}function Du(n,t){return $u(n,Os(n),t)}function Mu(n,t){return $u(n,Rs(n),t)}function Fu(n,r){return function(e,u){var i=bh(e)?t:Cr,o=r?r():{};return i(e,n,mi(u,2),o)}}function Nu(n){return uu(function(t,r){var e=-1,u=r.length,i=u>1?r[u-1]:X,o=u>2?r[2]:X;for(i=n.length>3&&typeof i==\"function\"?(u--,i):X,o&&Ui(r[0],r[1],o)&&(i=u<3?X:i,u=1),t=ll(t);++e<u;){var f=r[e];f&&n(t,f,e,i)}return t})}function Pu(n,t){return function(r,e){if(null==r)return r;if(!Hf(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=ll(r);(t?i--:++i<u)&&e(o[i],i,o)!==false;);\nreturn r}}function qu(n){return function(t,r,e){for(var u=-1,i=ll(t),o=e(t),f=o.length;f--;){var c=o[n?f:++u];if(r(i[c],c,i)===false)break}return t}}function Zu(n,t,r){function e(){return(this&&this!==re&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=t&vn,i=Gu(n);return e}function Ku(n){return function(t){t=Ec(t);var r=T(t)?G(t):X,e=r?r[0]:t.charAt(0),u=r?Iu(r,1).join(\"\"):t.slice(1);return e[n]()+u}}function Vu(n){return function(t){return l(Ra(ca(t).replace(Dr,\"\")),n,\"\")}}function Gu(n){return function(){\nvar t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=gs(n.prototype),e=n.apply(r,t);return fc(e)?e:r}}function Hu(t,r,e){function u(){for(var o=arguments.length,f=il(o),c=o,a=wi(u);c--;)f[c]=arguments[c];var l=o<3&&f[0]!==a&&f[o-1]!==a?[]:N(f,a);\nreturn o-=l.length,o<e?oi(t,r,Qu,u.placeholder,X,f,l,X,X,e-o):n(this&&this!==re&&this instanceof u?i:t,this,f)}var i=Gu(t);return u}function Ju(n){return function(t,r,e){var u=ll(t);if(!Hf(t)){var i=mi(r,3);t=Pc(t),r=function(n){return i(u[n],n,u)}}var o=n(t,r,e);return o>-1?u[i?t[o]:o]:X}}function Yu(n){return gi(function(t){var r=t.length,e=r,u=Y.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!=\"function\")throw new pl(en);if(u&&!o&&\"wrapper\"==bi(i))var o=new Y([],true)}for(e=o?e:r;++e<r;){\ni=t[e];var f=bi(i),c=\"wrapper\"==f?Is(i):X;o=c&&$i(c[0])&&c[1]==(xn|dn|wn|jn)&&!c[4].length&&1==c[9]?o[bi(c[0])].apply(o,c[3]):1==i.length&&$i(i)?o[f]():o.thru(i)}return function(){var n=arguments,e=n[0];if(o&&1==n.length&&bh(e))return o.plant(e).value();for(var u=0,i=r?t[u].apply(this,n):e;++u<r;)i=t[u].call(this,i);return i}})}function Qu(n,t,r,e,u,i,o,f,c,a){function l(){for(var y=arguments.length,d=il(y),b=y;b--;)d[b]=arguments[b];if(_)var w=wi(l),m=C(d,w);if(e&&(d=Uu(d,e,u,_)),i&&(d=Bu(d,i,o,_)),\ny-=m,_&&y<a){return oi(n,t,Qu,l.placeholder,r,d,N(d,w),f,c,a-y)}var x=h?r:this,j=p?x[n]:n;return y=d.length,f?d=Hi(d,f):v&&y>1&&d.reverse(),s&&c<y&&(d.length=c),this&&this!==re&&this instanceof l&&(j=g||Gu(j)),j.apply(x,d)}var s=t&xn,h=t&vn,p=t&gn,_=t&(dn|bn),v=t&An,g=p?X:Gu(n);return l}function Xu(n,t){return function(r,e){return Ie(r,n,t(e),{})}}function ni(n,t){return function(r,e){var u;if(r===X&&e===X)return t;if(r!==X&&(u=r),e!==X){if(u===X)return e;typeof r==\"string\"||typeof e==\"string\"?(r=vu(r),\ne=vu(e)):(r=_u(r),e=_u(e)),u=n(r,e)}return u}}function ti(t){return gi(function(r){return r=c(r,z(mi())),uu(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ri(n,t){t=t===X?\" \":vu(t);var r=t.length;if(r<2)return r?eu(t,n):t;var e=eu(t,Fl(n/V(t)));return T(t)?Iu(G(e),0,n).join(\"\"):e.slice(0,n)}function ei(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=il(l+c),h=this&&this!==re&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];\nreturn n(h,o?e:this,s)}var o=r&vn,f=Gu(t);return i}function ui(n){return function(t,r,e){return e&&typeof e!=\"number\"&&Ui(t,r,e)&&(r=e=X),t=Ac(t),r===X?(r=t,t=0):r=Ac(r),e=e===X?t<r?1:-1:Ac(e),ru(t,r,e,n)}}function ii(n){return function(t,r){return typeof t==\"string\"&&typeof r==\"string\"||(t=Oc(t),r=Oc(r)),n(t,r)}}function oi(n,t,r,e,u,i,o,f,c,a){var l=t&dn,s=l?o:X,h=l?X:o,p=l?i:X,_=l?X:i;t|=l?wn:mn,t&=~(l?mn:wn),t&yn||(t&=~(vn|gn));var v=[n,t,u,p,s,_,h,f,c,a],g=r.apply(X,v);return $i(n)&&Ss(g,v),g.placeholder=e,\nYi(g,n,t)}function fi(n){var t=al[n];return function(n,r){if(n=Oc(n),r=null==r?0:Hl(kc(r),292),r&&Zl(n)){var e=(Ec(n)+\"e\").split(\"e\");return e=(Ec(t(e[0]+\"e\"+(+e[1]+r)))+\"e\").split(\"e\"),+(e[0]+\"e\"+(+e[1]-r))}return t(n)}}function ci(n){return function(t){var r=zs(t);return r==Hn?M(t):r==rt?q(t):O(t,n(t))}}function ai(n,t,r,e,u,i,o,f){var c=t&gn;if(!c&&typeof n!=\"function\")throw new pl(en);var a=e?e.length:0;if(a||(t&=~(wn|mn),e=u=X),o=o===X?o:Gl(kc(o),0),f=f===X?f:kc(f),a-=u?u.length:0,t&mn){var l=e,s=u;\ne=u=X}var h=c?X:Is(n),p=[n,t,r,e,u,l,s,i,o,f];if(h&&qi(p,h),n=p[0],t=p[1],r=p[2],e=p[3],u=p[4],f=p[9]=p[9]===X?c?0:n.length:Gl(p[9]-a,0),!f&&t&(dn|bn)&&(t&=~(dn|bn)),t&&t!=vn)_=t==dn||t==bn?Hu(n,t,f):t!=wn&&t!=(vn|wn)||u.length?Qu.apply(X,p):ei(n,t,r,e);else var _=Zu(n,t,r);return Yi((h?ms:Ss)(_,p),n,t)}function li(n,t,r,e){return n===X||Gf(n,gl[r])&&!bl.call(e,r)?t:n}function si(n,t,r,e,u,i){return fc(n)&&fc(t)&&(i.set(t,n),Ke(n,t,X,si,i),i.delete(t)),n}function hi(n){return gc(n)?X:n}function pi(n,t,r,e,u,i){\nvar o=r&pn,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=true,_=r&_n?new dr:X;for(i.set(n,t),i.set(t,n);++s<f;){var v=n[s],g=t[s];if(e)var y=o?e(g,v,s,t,n,i):e(v,g,s,n,t,i);if(y!==X){if(y)continue;p=false;break}if(_){if(!h(t,function(n,t){if(!S(_,t)&&(v===n||u(v,n,r,e,i)))return _.push(t)})){p=false;break}}else if(v!==g&&!u(v,g,r,e,i)){p=false;break}}return i.delete(n),i.delete(t),p}function _i(n,t,r,e,u,i,o){switch(r){case at:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return false;\nn=n.buffer,t=t.buffer;case ct:return!(n.byteLength!=t.byteLength||!i(new Rl(n),new Rl(t)));case Pn:case qn:case Jn:return Gf(+n,+t);case Kn:return n.name==t.name&&n.message==t.message;case tt:case et:return n==t+\"\";case Hn:var f=M;case rt:var c=e&pn;if(f||(f=P),n.size!=t.size&&!c)return false;var a=o.get(n);if(a)return a==t;e|=_n,o.set(n,t);var l=pi(f(n),f(t),e,u,i,o);return o.delete(n),l;case ut:if(_s)return _s.call(n)==_s.call(t)}return false}function vi(n,t,r,e,u,i){var o=r&pn,f=yi(n),c=f.length;if(c!=yi(t).length&&!o)return false;\nfor(var a=c;a--;){var l=f[a];if(!(o?l in t:bl.call(t,l)))return false}var s=i.get(n),h=i.get(t);if(s&&h)return s==t&&h==n;var p=true;i.set(n,t),i.set(t,n);for(var _=o;++a<c;){l=f[a];var v=n[l],g=t[l];if(e)var y=o?e(g,v,l,t,n,i):e(v,g,l,n,t,i);if(!(y===X?v===g||u(v,g,r,e,i):y)){p=false;break}_||(_=\"constructor\"==l)}if(p&&!_){var d=n.constructor,b=t.constructor;d!=b&&\"constructor\"in n&&\"constructor\"in t&&!(typeof d==\"function\"&&d instanceof d&&typeof b==\"function\"&&b instanceof b)&&(p=false)}return i.delete(n),\ni.delete(t),p}function gi(n){return Ls(Vi(n,X,_o),n+\"\")}function yi(n){return de(n,Pc,Os)}function di(n){return de(n,qc,Rs)}function bi(n){for(var t=n.name+\"\",r=fs[t],e=bl.call(fs,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function wi(n){return(bl.call(Z,\"placeholder\")?Z:n).placeholder}function mi(){var n=Z.iteratee||Ca;return n=n===Ca?De:n,arguments.length?n(arguments[0],arguments[1]):n}function xi(n,t){var r=n.__data__;return Ti(t)?r[typeof t==\"string\"?\"string\":\"hash\"]:r.map;\n}function ji(n){for(var t=Pc(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,Fi(u)]}return t}function Ai(n,t){var r=B(n,t);return Ue(r)?r:X}function ki(n){var t=bl.call(n,Bl),r=n[Bl];try{n[Bl]=X;var e=true}catch(n){}var u=xl.call(n);return e&&(t?n[Bl]=r:delete n[Bl]),u}function Ii(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case\"drop\":n+=o;break;case\"dropRight\":t-=o;break;case\"take\":t=Hl(t,n+o);break;case\"takeRight\":n=Gl(n,t-o)}}return{start:n,end:t}}function Oi(n){var t=n.match(Tt);\nreturn t?t[1].split($t):[]}function Ri(n,t,r){t=ku(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=no(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&oc(u)&&Ci(o,u)&&(bh(n)||dh(n)))}function zi(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&bl.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}function Ei(n){return typeof n.constructor!=\"function\"||Mi(n)?{}:gs(El(n))}function Si(n,t,r){var e=n.constructor;switch(t){case ct:return Ru(n);\ncase Pn:case qn:return new e(+n);case at:return zu(n,r);case lt:case st:case ht:case pt:case _t:case vt:case gt:case yt:case dt:return Wu(n,r);case Hn:return new e;case Jn:case et:return new e(n);case tt:return Eu(n);case rt:return new e;case ut:return Su(n)}}function Wi(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?\"& \":\"\")+t[e],t=t.join(r>2?\", \":\" \"),n.replace(Bt,\"{\\n/* [wrapped with \"+t+\"] */\\n\")}function Li(n){return bh(n)||dh(n)||!!(Cl&&n&&n[Cl])}function Ci(n,t){var r=typeof n;\nreturn t=null==t?Ln:t,!!t&&(\"number\"==r||\"symbol\"!=r&&Gt.test(n))&&n>-1&&n%1==0&&n<t}function Ui(n,t,r){if(!fc(r))return false;var e=typeof t;return!!(\"number\"==e?Hf(r)&&Ci(t,r.length):\"string\"==e&&t in r)&&Gf(r[t],n)}function Bi(n,t){if(bh(n))return false;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!bc(n))||(Et.test(n)||!zt.test(n)||null!=t&&n in ll(t))}function Ti(n){var t=typeof n;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==n:null===n}function $i(n){\nvar t=bi(n),r=Z[t];if(typeof r!=\"function\"||!(t in Ut.prototype))return false;if(n===r)return true;var e=Is(r);return!!e&&n===e[0]}function Di(n){return!!ml&&ml in n}function Mi(n){var t=n&&n.constructor;return n===(typeof t==\"function\"&&t.prototype||gl)}function Fi(n){return n===n&&!fc(n)}function Ni(n,t){return function(r){return null!=r&&(r[n]===t&&(t!==X||n in ll(r)))}}function Pi(n){var t=Cf(n,function(n){return r.size===cn&&r.clear(),n}),r=t.cache;return t}function qi(n,t){var r=n[1],e=t[1],u=r|e,i=u<(vn|gn|xn),o=e==xn&&r==dn||e==xn&&r==jn&&n[7].length<=t[8]||e==(xn|jn)&&t[7].length<=t[8]&&r==dn;\nif(!i&&!o)return n;e&vn&&(n[2]=t[2],u|=r&vn?0:yn);var f=t[3];if(f){var c=n[3];n[3]=c?Uu(c,f,t[4]):f,n[4]=c?N(n[3],an):t[4]}return f=t[5],f&&(c=n[5],n[5]=c?Bu(c,f,t[6]):f,n[6]=c?N(n[5],an):t[6]),f=t[7],f&&(n[7]=f),e&xn&&(n[8]=null==n[8]?t[8]:Hl(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=u,n}function Zi(n){var t=[];if(null!=n)for(var r in ll(n))t.push(r);return t}function Ki(n){return xl.call(n)}function Vi(t,r,e){return r=Gl(r===X?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Gl(u.length-r,0),f=il(o);++i<o;)f[i]=u[r+i];\ni=-1;for(var c=il(r+1);++i<r;)c[i]=u[i];return c[r]=e(f),n(t,this,c)}}function Gi(n,t){return t.length<2?n:_e(n,au(t,0,-1))}function Hi(n,t){for(var r=n.length,e=Hl(t.length,r),u=Tu(n);e--;){var i=t[e];n[e]=Ci(i,r)?u[i]:X}return n}function Ji(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}function Yi(n,t,r){var e=t+\"\";return Ls(n,Wi(e,ro(Oi(e),r)))}function Qi(n){var t=0,r=0;return function(){var e=Jl(),u=Rn-(e-r);if(r=e,u>0){if(++t>=On)return arguments[0]}else t=0;\nreturn n.apply(X,arguments)}}function Xi(n,t){var r=-1,e=n.length,u=e-1;for(t=t===X?e:t;++r<t;){var i=tu(r,u),o=n[i];n[i]=n[r],n[r]=o}return n.length=t,n}function no(n){if(typeof n==\"string\"||bc(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-Wn?\"-0\":t}function to(n){if(null!=n){try{return dl.call(n)}catch(n){}try{return n+\"\"}catch(n){}}return\"\"}function ro(n,t){return r(Dn,function(r){var e=\"_.\"+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function eo(n){if(n instanceof Ut)return n.clone();var t=new Y(n.__wrapped__,n.__chain__);\nreturn t.__actions__=Tu(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function uo(n,t,r){t=(r?Ui(n,t,r):t===X)?1:Gl(kc(t),0);var e=null==n?0:n.length;if(!e||t<1)return[];for(var u=0,i=0,o=il(Fl(e/t));u<e;)o[i++]=au(n,u,u+=t);return o}function io(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u}function oo(){var n=arguments.length;if(!n)return[];for(var t=il(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return a(bh(r)?Tu(r):[r],ee(t,1));\n}function fo(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),au(n,t<0?0:t,e)):[]}function co(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,0,t<0?0:t)):[]}function ao(n,t){return n&&n.length?bu(n,mi(t,3),true,true):[]}function lo(n,t){return n&&n.length?bu(n,mi(t,3),true):[]}function so(n,t,r,e){var u=null==n?0:n.length;return u?(r&&typeof r!=\"number\"&&Ui(n,t,r)&&(r=0,e=u),ne(n,t,r,e)):[]}function ho(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);\nreturn u<0&&(u=Gl(e+u,0)),g(n,mi(t,3),u)}function po(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==X&&(u=kc(r),u=r<0?Gl(e+u,0):Hl(u,e-1)),g(n,mi(t,3),u,true)}function _o(n){return(null==n?0:n.length)?ee(n,1):[]}function vo(n){return(null==n?0:n.length)?ee(n,Wn):[]}function go(n,t){return(null==n?0:n.length)?(t=t===X?1:kc(t),ee(n,t)):[]}function yo(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];Tr(e,u[0],u[1])}return e}function bo(n){return n&&n.length?n[0]:X}function wo(n,t,r){\nvar e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:kc(r);return u<0&&(u=Gl(e+u,0)),y(n,t,u)}function mo(n){return(null==n?0:n.length)?au(n,0,-1):[]}function xo(n,t){return null==n?\"\":Kl.call(n,t)}function jo(n){var t=null==n?0:n.length;return t?n[t-1]:X}function Ao(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;return r!==X&&(u=kc(r),u=u<0?Gl(e+u,0):Hl(u,e-1)),t===t?K(n,t,u):g(n,b,u,true)}function ko(n,t){return n&&n.length?Ge(n,kc(t)):X}function Io(n,t){return n&&n.length&&t&&t.length?Xe(n,t):n;\n}function Oo(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,mi(r,2)):n}function Ro(n,t,r){return n&&n.length&&t&&t.length?Xe(n,t,X,r):n}function zo(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=mi(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return nu(n,u),r}function Eo(n){return null==n?n:Xl.call(n)}function So(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!=\"number\"&&Ui(n,t,r)?(t=0,r=e):(t=null==t?0:kc(t),r=r===X?e:kc(r)),au(n,t,r)):[]}function Wo(n,t){\nreturn su(n,t)}function Lo(n,t,r){return hu(n,t,mi(r,2))}function Co(n,t){var r=null==n?0:n.length;if(r){var e=su(n,t);if(e<r&&Gf(n[e],t))return e}return-1}function Uo(n,t){return su(n,t,true)}function Bo(n,t,r){return hu(n,t,mi(r,2),true)}function To(n,t){if(null==n?0:n.length){var r=su(n,t,true)-1;if(Gf(n[r],t))return r}return-1}function $o(n){return n&&n.length?pu(n):[]}function Do(n,t){return n&&n.length?pu(n,mi(t,2)):[]}function Mo(n){var t=null==n?0:n.length;return t?au(n,1,t):[]}function Fo(n,t,r){\nreturn n&&n.length?(t=r||t===X?1:kc(t),au(n,0,t<0?0:t)):[]}function No(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===X?1:kc(t),t=e-t,au(n,t<0?0:t,e)):[]}function Po(n,t){return n&&n.length?bu(n,mi(t,3),false,true):[]}function qo(n,t){return n&&n.length?bu(n,mi(t,3)):[]}function Zo(n){return n&&n.length?gu(n):[]}function Ko(n,t){return n&&n.length?gu(n,mi(t,2)):[]}function Vo(n,t){return t=typeof t==\"function\"?t:X,n&&n.length?gu(n,X,t):[]}function Go(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){\nif(Jf(n))return t=Gl(n.length,t),true}),I(t,function(t){return c(n,m(t))})}function Ho(t,r){if(!t||!t.length)return[];var e=Go(t);return null==r?e:c(e,function(t){return n(r,X,t)})}function Jo(n,t){return xu(n||[],t||[],Wr)}function Yo(n,t){return xu(n||[],t||[],fu)}function Qo(n){var t=Z(n);return t.__chain__=true,t}function Xo(n,t){return t(n),n}function nf(n,t){return t(n)}function tf(){return Qo(this)}function rf(){return new Y(this.value(),this.__chain__)}function ef(){this.__values__===X&&(this.__values__=jc(this.value()));\nvar n=this.__index__>=this.__values__.length;return{done:n,value:n?X:this.__values__[this.__index__++]}}function uf(){return this}function of(n){for(var t,r=this;r instanceof J;){var e=eo(r);e.__index__=0,e.__values__=X,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t}function ff(){var n=this.__wrapped__;if(n instanceof Ut){var t=n;return this.__actions__.length&&(t=new Ut(this)),t=t.reverse(),t.__actions__.push({func:nf,args:[Eo],thisArg:X}),new Y(t,this.__chain__)}return this.thru(Eo);\n}function cf(){return wu(this.__wrapped__,this.__actions__)}function af(n,t,r){var e=bh(n)?u:Jr;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function lf(n,t){return(bh(n)?i:te)(n,mi(t,3))}function sf(n,t){return ee(yf(n,t),1)}function hf(n,t){return ee(yf(n,t),Wn)}function pf(n,t,r){return r=r===X?1:kc(r),ee(yf(n,t),r)}function _f(n,t){return(bh(n)?r:ys)(n,mi(t,3))}function vf(n,t){return(bh(n)?e:ds)(n,mi(t,3))}function gf(n,t,r,e){n=Hf(n)?n:ra(n),r=r&&!e?kc(r):0;var u=n.length;return r<0&&(r=Gl(u+r,0)),\ndc(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&y(n,t,r)>-1}function yf(n,t){return(bh(n)?c:Pe)(n,mi(t,3))}function df(n,t,r,e){return null==n?[]:(bh(t)||(t=null==t?[]:[t]),r=e?X:r,bh(r)||(r=null==r?[]:[r]),He(n,t,r))}function bf(n,t,r){var e=bh(n)?l:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ys)}function wf(n,t,r){var e=bh(n)?s:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ds)}function mf(n,t){return(bh(n)?i:te)(n,Uf(mi(t,3)))}function xf(n){return(bh(n)?Rr:iu)(n)}function jf(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),\n(bh(n)?zr:ou)(n,t)}function Af(n){return(bh(n)?Er:cu)(n)}function kf(n){if(null==n)return 0;if(Hf(n))return dc(n)?V(n):n.length;var t=zs(n);return t==Hn||t==rt?n.size:Me(n).length}function If(n,t,r){var e=bh(n)?h:lu;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function Of(n,t){if(typeof t!=\"function\")throw new pl(en);return n=kc(n),function(){if(--n<1)return t.apply(this,arguments)}}function Rf(n,t,r){return t=r?X:t,t=n&&null==t?n.length:t,ai(n,xn,X,X,X,X,t)}function zf(n,t){var r;if(typeof t!=\"function\")throw new pl(en);\nreturn n=kc(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=X),r}}function Ef(n,t,r){t=r?X:t;var e=ai(n,dn,X,X,X,X,X,t);return e.placeholder=Ef.placeholder,e}function Sf(n,t,r){t=r?X:t;var e=ai(n,bn,X,X,X,X,X,t);return e.placeholder=Sf.placeholder,e}function Wf(n,t,r){function e(t){var r=h,e=p;return h=p=X,d=t,v=n.apply(e,r)}function u(n){return d=n,g=Ws(f,t),b?e(n):v}function i(n){var r=n-y,e=n-d,u=t-r;return w?Hl(u,_-e):u}function o(n){var r=n-y,e=n-d;return y===X||r>=t||r<0||w&&e>=_;\n}function f(){var n=fh();return o(n)?c(n):(g=Ws(f,i(n)),X)}function c(n){return g=X,m&&h?e(n):(h=p=X,v)}function a(){g!==X&&As(g),d=0,h=y=p=g=X}function l(){return g===X?v:c(fh())}function s(){var n=fh(),r=o(n);if(h=arguments,p=this,y=n,r){if(g===X)return u(y);if(w)return As(g),g=Ws(f,t),e(y)}return g===X&&(g=Ws(f,t)),v}var h,p,_,v,g,y,d=0,b=false,w=false,m=true;if(typeof n!=\"function\")throw new pl(en);return t=Oc(t)||0,fc(r)&&(b=!!r.leading,w=\"maxWait\"in r,_=w?Gl(Oc(r.maxWait)||0,t):_,m=\"trailing\"in r?!!r.trailing:m),\ns.cancel=a,s.flush=l,s}function Lf(n){return ai(n,An)}function Cf(n,t){if(typeof n!=\"function\"||null!=t&&typeof t!=\"function\")throw new pl(en);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Cf.Cache||hr),r}function Uf(n){if(typeof n!=\"function\")throw new pl(en);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:\nreturn!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Bf(n){return zf(2,n)}function Tf(n,t){if(typeof n!=\"function\")throw new pl(en);return t=t===X?t:kc(t),uu(n,t)}function $f(t,r){if(typeof t!=\"function\")throw new pl(en);return r=null==r?0:Gl(kc(r),0),uu(function(e){var u=e[r],i=Iu(e,0,r);return u&&a(i,u),n(t,this,i)})}function Df(n,t,r){var e=true,u=true;if(typeof n!=\"function\")throw new pl(en);return fc(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),\nWf(n,t,{leading:e,maxWait:t,trailing:u})}function Mf(n){return Rf(n,1)}function Ff(n,t){return ph(Au(t),n)}function Nf(){if(!arguments.length)return[];var n=arguments[0];return bh(n)?n:[n]}function Pf(n){return Nr(n,hn)}function qf(n,t){return t=typeof t==\"function\"?t:X,Nr(n,hn,t)}function Zf(n){return Nr(n,ln|hn)}function Kf(n,t){return t=typeof t==\"function\"?t:X,Nr(n,ln|hn,t)}function Vf(n,t){return null==t||qr(n,t,Pc(t))}function Gf(n,t){return n===t||n!==n&&t!==t}function Hf(n){return null!=n&&oc(n.length)&&!uc(n);\n}function Jf(n){return cc(n)&&Hf(n)}function Yf(n){return n===true||n===false||cc(n)&&we(n)==Pn}function Qf(n){return cc(n)&&1===n.nodeType&&!gc(n)}function Xf(n){if(null==n)return true;if(Hf(n)&&(bh(n)||typeof n==\"string\"||typeof n.splice==\"function\"||mh(n)||Ih(n)||dh(n)))return!n.length;var t=zs(n);if(t==Hn||t==rt)return!n.size;if(Mi(n))return!Me(n).length;for(var r in n)if(bl.call(n,r))return false;return true}function nc(n,t){return Se(n,t)}function tc(n,t,r){r=typeof r==\"function\"?r:X;var e=r?r(n,t):X;return e===X?Se(n,t,X,r):!!e;\n}function rc(n){if(!cc(n))return false;var t=we(n);return t==Kn||t==Zn||typeof n.message==\"string\"&&typeof n.name==\"string\"&&!gc(n)}function ec(n){return typeof n==\"number\"&&Zl(n)}function uc(n){if(!fc(n))return false;var t=we(n);return t==Vn||t==Gn||t==Nn||t==nt}function ic(n){return typeof n==\"number\"&&n==kc(n)}function oc(n){return typeof n==\"number\"&&n>-1&&n%1==0&&n<=Ln}function fc(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function cc(n){return null!=n&&typeof n==\"object\"}function ac(n,t){\nreturn n===t||Ce(n,t,ji(t))}function lc(n,t,r){return r=typeof r==\"function\"?r:X,Ce(n,t,ji(t),r)}function sc(n){return vc(n)&&n!=+n}function hc(n){if(Es(n))throw new fl(rn);return Ue(n)}function pc(n){return null===n}function _c(n){return null==n}function vc(n){return typeof n==\"number\"||cc(n)&&we(n)==Jn}function gc(n){if(!cc(n)||we(n)!=Qn)return false;var t=El(n);if(null===t)return true;var r=bl.call(t,\"constructor\")&&t.constructor;return typeof r==\"function\"&&r instanceof r&&dl.call(r)==jl}function yc(n){\nreturn ic(n)&&n>=-Ln&&n<=Ln}function dc(n){return typeof n==\"string\"||!bh(n)&&cc(n)&&we(n)==et}function bc(n){return typeof n==\"symbol\"||cc(n)&&we(n)==ut}function wc(n){return n===X}function mc(n){return cc(n)&&zs(n)==ot}function xc(n){return cc(n)&&we(n)==ft}function jc(n){if(!n)return[];if(Hf(n))return dc(n)?G(n):Tu(n);if(Ul&&n[Ul])return D(n[Ul]());var t=zs(n);return(t==Hn?M:t==rt?P:ra)(n)}function Ac(n){if(!n)return 0===n?n:0;if(n=Oc(n),n===Wn||n===-Wn){return(n<0?-1:1)*Cn}return n===n?n:0}function kc(n){\nvar t=Ac(n),r=t%1;return t===t?r?t-r:t:0}function Ic(n){return n?Fr(kc(n),0,Bn):0}function Oc(n){if(typeof n==\"number\")return n;if(bc(n))return Un;if(fc(n)){var t=typeof n.valueOf==\"function\"?n.valueOf():n;n=fc(t)?t+\"\":t}if(typeof n!=\"string\")return 0===n?n:+n;n=R(n);var r=Zt.test(n);return r||Vt.test(n)?Xr(n.slice(2),r?2:8):qt.test(n)?Un:+n}function Rc(n){return $u(n,qc(n))}function zc(n){return n?Fr(kc(n),-Ln,Ln):0===n?n:0}function Ec(n){return null==n?\"\":vu(n)}function Sc(n,t){var r=gs(n);return null==t?r:Ur(r,t);\n}function Wc(n,t){return v(n,mi(t,3),ue)}function Lc(n,t){return v(n,mi(t,3),oe)}function Cc(n,t){return null==n?n:bs(n,mi(t,3),qc)}function Uc(n,t){return null==n?n:ws(n,mi(t,3),qc)}function Bc(n,t){return n&&ue(n,mi(t,3))}function Tc(n,t){return n&&oe(n,mi(t,3))}function $c(n){return null==n?[]:fe(n,Pc(n))}function Dc(n){return null==n?[]:fe(n,qc(n))}function Mc(n,t,r){var e=null==n?X:_e(n,t);return e===X?r:e}function Fc(n,t){return null!=n&&Ri(n,t,xe)}function Nc(n,t){return null!=n&&Ri(n,t,je);\n}function Pc(n){return Hf(n)?Or(n):Me(n)}function qc(n){return Hf(n)?Or(n,true):Fe(n)}function Zc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Tr(r,t(n,e,u),n)}),r}function Kc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Tr(r,e,t(n,e,u))}),r}function Vc(n,t){return Gc(n,Uf(mi(t)))}function Gc(n,t){if(null==n)return{};var r=c(di(n),function(n){return[n]});return t=mi(t),Ye(n,r,function(n,r){return t(n,r[0])})}function Hc(n,t,r){t=ku(t,n);var e=-1,u=t.length;for(u||(u=1,n=X);++e<u;){var i=null==n?X:n[no(t[e])];\ni===X&&(e=u,i=r),n=uc(i)?i.call(n):i}return n}function Jc(n,t,r){return null==n?n:fu(n,t,r)}function Yc(n,t,r,e){return e=typeof e==\"function\"?e:X,null==n?n:fu(n,t,r,e)}function Qc(n,t,e){var u=bh(n),i=u||mh(n)||Ih(n);if(t=mi(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:fc(n)&&uc(o)?gs(El(n)):{}}return(i?r:ue)(n,function(n,r,u){return t(e,n,r,u)}),e}function Xc(n,t){return null==n||yu(n,t)}function na(n,t,r){return null==n?n:du(n,t,Au(r))}function ta(n,t,r,e){return e=typeof e==\"function\"?e:X,\nnull==n?n:du(n,t,Au(r),e)}function ra(n){return null==n?[]:E(n,Pc(n))}function ea(n){return null==n?[]:E(n,qc(n))}function ua(n,t,r){return r===X&&(r=t,t=X),r!==X&&(r=Oc(r),r=r===r?r:0),t!==X&&(t=Oc(t),t=t===t?t:0),Fr(Oc(n),t,r)}function ia(n,t,r){return t=Ac(t),r===X?(r=t,t=0):r=Ac(r),n=Oc(n),Ae(n,t,r)}function oa(n,t,r){if(r&&typeof r!=\"boolean\"&&Ui(n,t,r)&&(t=r=X),r===X&&(typeof t==\"boolean\"?(r=t,t=X):typeof n==\"boolean\"&&(r=n,n=X)),n===X&&t===X?(n=0,t=1):(n=Ac(n),t===X?(t=n,n=0):t=Ac(t)),n>t){\nvar e=n;n=t,t=e}if(r||n%1||t%1){var u=Ql();return Hl(n+u*(t-n+Qr(\"1e-\"+((u+\"\").length-1))),t)}return tu(n,t)}function fa(n){return Qh(Ec(n).toLowerCase())}function ca(n){return n=Ec(n),n&&n.replace(Ht,ve).replace(Mr,\"\")}function aa(n,t,r){n=Ec(n),t=vu(t);var e=n.length;r=r===X?e:Fr(kc(r),0,e);var u=r;return r-=t.length,r>=0&&n.slice(r,u)==t}function la(n){return n=Ec(n),n&&kt.test(n)?n.replace(jt,ge):n}function sa(n){return n=Ec(n),n&&Lt.test(n)?n.replace(Wt,\"\\\\$&\"):n}function ha(n,t,r){n=Ec(n),t=kc(t);\nvar e=t?V(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return ri(Nl(u),r)+n+ri(Fl(u),r)}function pa(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?n+ri(t-e,r):n}function _a(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e<t?ri(t-e,r)+n:n}function va(n,t,r){return r||null==t?t=0:t&&(t=+t),Yl(Ec(n).replace(Ct,\"\"),t||0)}function ga(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t),eu(Ec(n),t)}function ya(){var n=arguments,t=Ec(n[0]);return n.length<3?t:t.replace(n[1],n[2])}function da(n,t,r){return r&&typeof r!=\"number\"&&Ui(n,t,r)&&(t=r=X),\n(r=r===X?Bn:r>>>0)?(n=Ec(n),n&&(typeof t==\"string\"||null!=t&&!Ah(t))&&(t=vu(t),!t&&T(n))?Iu(G(n),0,r):n.split(t,r)):[]}function ba(n,t,r){return n=Ec(n),r=null==r?0:Fr(kc(r),0,n.length),t=vu(t),n.slice(r,r+t.length)==t}function wa(n,t,e){var u=Z.templateSettings;e&&Ui(n,t,e)&&(t=X),n=Ec(n),t=Wh({},t,u,li);var i=Wh({},t.imports,u.imports,li),o=Pc(i),f=E(i,o);r(o,function(n){if(Mt.test(n))throw new fl(on)});var c,a,l=0,s=t.interpolate||Jt,h=\"__p+='\",p=sl((t.escape||Jt).source+\"|\"+s.source+\"|\"+(s===Rt?Nt:Jt).source+\"|\"+(t.evaluate||Jt).source+\"|$\",\"g\"),_=bl.call(t,\"sourceURL\")?\"//# sourceURL=\"+(t.sourceURL+\"\").replace(/\\s/g,\" \")+\"\\n\":\"\";\nn.replace(p,function(t,r,e,u,i,o){return e||(e=u),h+=n.slice(l,o).replace(Yt,U),r&&(c=true,h+=\"'+__e(\"+r+\")+'\"),i&&(a=true,h+=\"';\"+i+\";\\n__p+='\"),e&&(h+=\"'+((__t=(\"+e+\"))==null?'':__t)+'\"),l=o+t.length,t}),h+=\"';\";var v=bl.call(t,\"variable\")&&t.variable;if(v){if(Mt.test(v))throw new fl(un)}else h=\"with(obj){\"+h+\"}\";h=(a?h.replace(bt,\"\"):h).replace(wt,\"$1\").replace(mt,\"$1;\"),h=\"function(\"+(v||\"obj\")+\"){\"+(v?\"\":\"obj||(obj={});\")+\"var __t,__p=''\"+(c?\",__e=_.escape\":\"\")+(a?\",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}\":\";\")+h+\"return __p}\";\nvar g=Xh(function(){return cl(o,_+\"return \"+h).apply(X,f)});if(g.source=h,rc(g))throw g;return g}function ma(n){return Ec(n).toLowerCase()}function xa(n){return Ec(n).toUpperCase()}function ja(n,t,r){if(n=Ec(n),n&&(r||t===X))return R(n);if(!n||!(t=vu(t)))return n;var e=G(n),u=G(t);return Iu(e,W(e,u),L(e,u)+1).join(\"\")}function Aa(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.slice(0,H(n)+1);if(!n||!(t=vu(t)))return n;var e=G(n);return Iu(e,0,L(e,G(t))+1).join(\"\")}function ka(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.replace(Ct,\"\");\nif(!n||!(t=vu(t)))return n;var e=G(n);return Iu(e,W(e,G(t))).join(\"\")}function Ia(n,t){var r=kn,e=In;if(fc(t)){var u=\"separator\"in t?t.separator:u;r=\"length\"in t?kc(t.length):r,e=\"omission\"in t?vu(t.omission):e}n=Ec(n);var i=n.length;if(T(n)){var o=G(n);i=o.length}if(r>=i)return n;var f=r-V(e);if(f<1)return e;var c=o?Iu(o,0,f).join(\"\"):n.slice(0,f);if(u===X)return c+e;if(o&&(f+=c.length-f),Ah(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=sl(u.source,Ec(Pt.exec(u))+\"g\")),u.lastIndex=0;a=u.exec(l);)var s=a.index;\nc=c.slice(0,s===X?f:s)}}else if(n.indexOf(vu(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e}function Oa(n){return n=Ec(n),n&&At.test(n)?n.replace(xt,ye):n}function Ra(n,t,r){return n=Ec(n),t=r?X:t,t===X?$(n)?Q(n):_(n):n.match(t)||[]}function za(t){var r=null==t?0:t.length,e=mi();return t=r?c(t,function(n){if(\"function\"!=typeof n[1])throw new pl(en);return[e(n[0]),n[1]]}):[],uu(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})}function Ea(n){\nreturn Pr(Nr(n,ln))}function Sa(n){return function(){return n}}function Wa(n,t){return null==n||n!==n?t:n}function La(n){return n}function Ca(n){return De(typeof n==\"function\"?n:Nr(n,ln))}function Ua(n){return qe(Nr(n,ln))}function Ba(n,t){return Ze(n,Nr(t,ln))}function Ta(n,t,e){var u=Pc(t),i=fe(t,u);null!=e||fc(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=fe(t,Pc(t)));var o=!(fc(e)&&\"chain\"in e&&!e.chain),f=uc(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;\nif(o||t){var r=n(this.__wrapped__);return(r.__actions__=Tu(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function $a(){return re._===this&&(re._=Al),this}function Da(){}function Ma(n){return n=kc(n),uu(function(t){return Ge(t,n)})}function Fa(n){return Bi(n)?m(no(n)):Qe(n)}function Na(n){return function(t){return null==n?X:_e(n,t)}}function Pa(){return[]}function qa(){return false}function Za(){return{}}function Ka(){return\"\";\n}function Va(){return true}function Ga(n,t){if(n=kc(n),n<1||n>Ln)return[];var r=Bn,e=Hl(n,Bn);t=mi(t),n-=Bn;for(var u=I(e,t);++r<n;)t(r);return u}function Ha(n){return bh(n)?c(n,no):bc(n)?[n]:Tu(Cs(Ec(n)))}function Ja(n){var t=++wl;return Ec(n)+t}function Ya(n){return n&&n.length?Yr(n,La,me):X}function Qa(n,t){return n&&n.length?Yr(n,mi(t,2),me):X}function Xa(n){return w(n,La)}function nl(n,t){return w(n,mi(t,2))}function tl(n){return n&&n.length?Yr(n,La,Ne):X}function rl(n,t){return n&&n.length?Yr(n,mi(t,2),Ne):X;\n}function el(n){return n&&n.length?k(n,La):0}function ul(n,t){return n&&n.length?k(n,mi(t,2)):0}x=null==x?re:be.defaults(re.Object(),x,be.pick(re,Zr));var il=x.Array,ol=x.Date,fl=x.Error,cl=x.Function,al=x.Math,ll=x.Object,sl=x.RegExp,hl=x.String,pl=x.TypeError,_l=il.prototype,vl=cl.prototype,gl=ll.prototype,yl=x[\"__core-js_shared__\"],dl=vl.toString,bl=gl.hasOwnProperty,wl=0,ml=function(){var n=/[^.]+$/.exec(yl&&yl.keys&&yl.keys.IE_PROTO||\"\");return n?\"Symbol(src)_1.\"+n:\"\"}(),xl=gl.toString,jl=dl.call(ll),Al=re._,kl=sl(\"^\"+dl.call(bl).replace(Wt,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),Il=ie?x.Buffer:X,Ol=x.Symbol,Rl=x.Uint8Array,zl=Il?Il.allocUnsafe:X,El=F(ll.getPrototypeOf,ll),Sl=ll.create,Wl=gl.propertyIsEnumerable,Ll=_l.splice,Cl=Ol?Ol.isConcatSpreadable:X,Ul=Ol?Ol.iterator:X,Bl=Ol?Ol.toStringTag:X,Tl=function(){\ntry{var n=Ai(ll,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),$l=x.clearTimeout!==re.clearTimeout&&x.clearTimeout,Dl=ol&&ol.now!==re.Date.now&&ol.now,Ml=x.setTimeout!==re.setTimeout&&x.setTimeout,Fl=al.ceil,Nl=al.floor,Pl=ll.getOwnPropertySymbols,ql=Il?Il.isBuffer:X,Zl=x.isFinite,Kl=_l.join,Vl=F(ll.keys,ll),Gl=al.max,Hl=al.min,Jl=ol.now,Yl=x.parseInt,Ql=al.random,Xl=_l.reverse,ns=Ai(x,\"DataView\"),ts=Ai(x,\"Map\"),rs=Ai(x,\"Promise\"),es=Ai(x,\"Set\"),us=Ai(x,\"WeakMap\"),is=Ai(ll,\"create\"),os=us&&new us,fs={},cs=to(ns),as=to(ts),ls=to(rs),ss=to(es),hs=to(us),ps=Ol?Ol.prototype:X,_s=ps?ps.valueOf:X,vs=ps?ps.toString:X,gs=function(){\nfunction n(){}return function(t){if(!fc(t))return{};if(Sl)return Sl(t);n.prototype=t;var r=new n;return n.prototype=X,r}}();Z.templateSettings={escape:It,evaluate:Ot,interpolate:Rt,variable:\"\",imports:{_:Z}},Z.prototype=J.prototype,Z.prototype.constructor=Z,Y.prototype=gs(J.prototype),Y.prototype.constructor=Y,Ut.prototype=gs(J.prototype),Ut.prototype.constructor=Ut,nr.prototype.clear=tr,nr.prototype.delete=rr,nr.prototype.get=er,nr.prototype.has=ur,nr.prototype.set=ir,or.prototype.clear=fr,or.prototype.delete=cr,\nor.prototype.get=ar,or.prototype.has=lr,or.prototype.set=sr,hr.prototype.clear=pr,hr.prototype.delete=_r,hr.prototype.get=vr,hr.prototype.has=gr,hr.prototype.set=yr,dr.prototype.add=dr.prototype.push=br,dr.prototype.has=wr,mr.prototype.clear=xr,mr.prototype.delete=jr,mr.prototype.get=Ar,mr.prototype.has=kr,mr.prototype.set=Ir;var ys=Pu(ue),ds=Pu(oe,true),bs=qu(),ws=qu(true),ms=os?function(n,t){return os.set(n,t),n}:La,xs=Tl?function(n,t){return Tl(n,\"toString\",{configurable:true,enumerable:false,value:Sa(t),\nwritable:true})}:La,js=uu,As=$l||function(n){return re.clearTimeout(n)},ks=es&&1/P(new es([,-0]))[1]==Wn?function(n){return new es(n)}:Da,Is=os?function(n){return os.get(n)}:Da,Os=Pl?function(n){return null==n?[]:(n=ll(n),i(Pl(n),function(t){return Wl.call(n,t)}))}:Pa,Rs=Pl?function(n){for(var t=[];n;)a(t,Os(n)),n=El(n);return t}:Pa,zs=we;(ns&&zs(new ns(new ArrayBuffer(1)))!=at||ts&&zs(new ts)!=Hn||rs&&zs(rs.resolve())!=Xn||es&&zs(new es)!=rt||us&&zs(new us)!=ot)&&(zs=function(n){var t=we(n),r=t==Qn?n.constructor:X,e=r?to(r):\"\";\nif(e)switch(e){case cs:return at;case as:return Hn;case ls:return Xn;case ss:return rt;case hs:return ot}return t});var Es=yl?uc:qa,Ss=Qi(ms),Ws=Ml||function(n,t){return re.setTimeout(n,t)},Ls=Qi(xs),Cs=Pi(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(St,function(n,r,e,u){t.push(e?u.replace(Ft,\"$1\"):r||n)}),t}),Us=uu(function(n,t){return Jf(n)?Hr(n,ee(t,1,Jf,true)):[]}),Bs=uu(function(n,t){var r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,true),mi(r,2)):[]}),Ts=uu(function(n,t){\nvar r=jo(t);return Jf(r)&&(r=X),Jf(n)?Hr(n,ee(t,1,Jf,true),X,r):[]}),$s=uu(function(n){var t=c(n,ju);return t.length&&t[0]===n[0]?ke(t):[]}),Ds=uu(function(n){var t=jo(n),r=c(n,ju);return t===jo(r)?t=X:r.pop(),r.length&&r[0]===n[0]?ke(r,mi(t,2)):[]}),Ms=uu(function(n){var t=jo(n),r=c(n,ju);return t=typeof t==\"function\"?t:X,t&&r.pop(),r.length&&r[0]===n[0]?ke(r,X,t):[]}),Fs=uu(Io),Ns=gi(function(n,t){var r=null==n?0:n.length,e=$r(n,t);return nu(n,c(t,function(n){return Ci(n,r)?+n:n}).sort(Lu)),e}),Ps=uu(function(n){\nreturn gu(ee(n,1,Jf,true))}),qs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),gu(ee(n,1,Jf,true),mi(t,2))}),Zs=uu(function(n){var t=jo(n);return t=typeof t==\"function\"?t:X,gu(ee(n,1,Jf,true),X,t)}),Ks=uu(function(n,t){return Jf(n)?Hr(n,t):[]}),Vs=uu(function(n){return mu(i(n,Jf))}),Gs=uu(function(n){var t=jo(n);return Jf(t)&&(t=X),mu(i(n,Jf),mi(t,2))}),Hs=uu(function(n){var t=jo(n);return t=typeof t==\"function\"?t:X,mu(i(n,Jf),X,t)}),Js=uu(Go),Ys=uu(function(n){var t=n.length,r=t>1?n[t-1]:X;return r=typeof r==\"function\"?(n.pop(),\nr):X,Ho(n,r)}),Qs=gi(function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return $r(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Ut&&Ci(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:nf,args:[u],thisArg:X}),new Y(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(X),n})):this.thru(u)}),Xs=Fu(function(n,t,r){bl.call(n,r)?++n[r]:Tr(n,r,1)}),nh=Ju(ho),th=Ju(po),rh=Fu(function(n,t,r){bl.call(n,r)?n[r].push(t):Tr(n,r,[t])}),eh=uu(function(t,r,e){var u=-1,i=typeof r==\"function\",o=Hf(t)?il(t.length):[];\nreturn ys(t,function(t){o[++u]=i?n(r,t,e):Oe(t,r,e)}),o}),uh=Fu(function(n,t,r){Tr(n,r,t)}),ih=Fu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),oh=uu(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ui(n,t[0],t[1])?t=[]:r>2&&Ui(t[0],t[1],t[2])&&(t=[t[0]]),He(n,ee(t,1),[])}),fh=Dl||function(){return re.Date.now()},ch=uu(function(n,t,r){var e=vn;if(r.length){var u=N(r,wi(ch));e|=wn}return ai(n,e,t,r,u)}),ah=uu(function(n,t,r){var e=vn|gn;if(r.length){var u=N(r,wi(ah));e|=wn;\n}return ai(t,e,n,r,u)}),lh=uu(function(n,t){return Gr(n,1,t)}),sh=uu(function(n,t,r){return Gr(n,Oc(t)||0,r)});Cf.Cache=hr;var hh=js(function(t,r){r=1==r.length&&bh(r[0])?c(r[0],z(mi())):c(ee(r,1),z(mi()));var e=r.length;return uu(function(u){for(var i=-1,o=Hl(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);return n(t,this,u)})}),ph=uu(function(n,t){return ai(n,wn,X,t,N(t,wi(ph)))}),_h=uu(function(n,t){return ai(n,mn,X,t,N(t,wi(_h)))}),vh=gi(function(n,t){return ai(n,jn,X,X,X,t)}),gh=ii(me),yh=ii(function(n,t){\nreturn n>=t}),dh=Re(function(){return arguments}())?Re:function(n){return cc(n)&&bl.call(n,\"callee\")&&!Wl.call(n,\"callee\")},bh=il.isArray,wh=ce?z(ce):ze,mh=ql||qa,xh=ae?z(ae):Ee,jh=le?z(le):Le,Ah=se?z(se):Be,kh=he?z(he):Te,Ih=pe?z(pe):$e,Oh=ii(Ne),Rh=ii(function(n,t){return n<=t}),zh=Nu(function(n,t){if(Mi(t)||Hf(t))return $u(t,Pc(t),n),X;for(var r in t)bl.call(t,r)&&Wr(n,r,t[r])}),Eh=Nu(function(n,t){$u(t,qc(t),n)}),Sh=Nu(function(n,t,r,e){$u(t,qc(t),n,e)}),Wh=Nu(function(n,t,r,e){$u(t,Pc(t),n,e);\n}),Lh=gi($r),Ch=uu(function(n,t){n=ll(n);var r=-1,e=t.length,u=e>2?t[2]:X;for(u&&Ui(t[0],t[1],u)&&(e=1);++r<e;)for(var i=t[r],o=qc(i),f=-1,c=o.length;++f<c;){var a=o[f],l=n[a];(l===X||Gf(l,gl[a])&&!bl.call(n,a))&&(n[a]=i[a])}return n}),Uh=uu(function(t){return t.push(X,si),n(Mh,X,t)}),Bh=Xu(function(n,t,r){null!=t&&typeof t.toString!=\"function\"&&(t=xl.call(t)),n[t]=r},Sa(La)),Th=Xu(function(n,t,r){null!=t&&typeof t.toString!=\"function\"&&(t=xl.call(t)),bl.call(n,t)?n[t].push(r):n[t]=[r]},mi),$h=uu(Oe),Dh=Nu(function(n,t,r){\nKe(n,t,r)}),Mh=Nu(function(n,t,r,e){Ke(n,t,r,e)}),Fh=gi(function(n,t){var r={};if(null==n)return r;var e=false;t=c(t,function(t){return t=ku(t,n),e||(e=t.length>1),t}),$u(n,di(n),r),e&&(r=Nr(r,ln|sn|hn,hi));for(var u=t.length;u--;)yu(r,t[u]);return r}),Nh=gi(function(n,t){return null==n?{}:Je(n,t)}),Ph=ci(Pc),qh=ci(qc),Zh=Vu(function(n,t,r){return t=t.toLowerCase(),n+(r?fa(t):t)}),Kh=Vu(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),Vh=Vu(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Gh=Ku(\"toLowerCase\"),Hh=Vu(function(n,t,r){\nreturn n+(r?\"_\":\"\")+t.toLowerCase()}),Jh=Vu(function(n,t,r){return n+(r?\" \":\"\")+Qh(t)}),Yh=Vu(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),Qh=Ku(\"toUpperCase\"),Xh=uu(function(t,r){try{return n(t,X,r)}catch(n){return rc(n)?n:new fl(n)}}),np=gi(function(n,t){return r(t,function(t){t=no(t),Tr(n,t,ch(n[t],n))}),n}),tp=Yu(),rp=Yu(true),ep=uu(function(n,t){return function(r){return Oe(r,n,t)}}),up=uu(function(n,t){return function(r){return Oe(n,r,t)}}),ip=ti(c),op=ti(u),fp=ti(h),cp=ui(),ap=ui(true),lp=ni(function(n,t){\nreturn n+t},0),sp=fi(\"ceil\"),hp=ni(function(n,t){return n/t},1),pp=fi(\"floor\"),_p=ni(function(n,t){return n*t},1),vp=fi(\"round\"),gp=ni(function(n,t){return n-t},0);return Z.after=Of,Z.ary=Rf,Z.assign=zh,Z.assignIn=Eh,Z.assignInWith=Sh,Z.assignWith=Wh,Z.at=Lh,Z.before=zf,Z.bind=ch,Z.bindAll=np,Z.bindKey=ah,Z.castArray=Nf,Z.chain=Qo,Z.chunk=uo,Z.compact=io,Z.concat=oo,Z.cond=za,Z.conforms=Ea,Z.constant=Sa,Z.countBy=Xs,Z.create=Sc,Z.curry=Ef,Z.curryRight=Sf,Z.debounce=Wf,Z.defaults=Ch,Z.defaultsDeep=Uh,\nZ.defer=lh,Z.delay=sh,Z.difference=Us,Z.differenceBy=Bs,Z.differenceWith=Ts,Z.drop=fo,Z.dropRight=co,Z.dropRightWhile=ao,Z.dropWhile=lo,Z.fill=so,Z.filter=lf,Z.flatMap=sf,Z.flatMapDeep=hf,Z.flatMapDepth=pf,Z.flatten=_o,Z.flattenDeep=vo,Z.flattenDepth=go,Z.flip=Lf,Z.flow=tp,Z.flowRight=rp,Z.fromPairs=yo,Z.functions=$c,Z.functionsIn=Dc,Z.groupBy=rh,Z.initial=mo,Z.intersection=$s,Z.intersectionBy=Ds,Z.intersectionWith=Ms,Z.invert=Bh,Z.invertBy=Th,Z.invokeMap=eh,Z.iteratee=Ca,Z.keyBy=uh,Z.keys=Pc,Z.keysIn=qc,\nZ.map=yf,Z.mapKeys=Zc,Z.mapValues=Kc,Z.matches=Ua,Z.matchesProperty=Ba,Z.memoize=Cf,Z.merge=Dh,Z.mergeWith=Mh,Z.method=ep,Z.methodOf=up,Z.mixin=Ta,Z.negate=Uf,Z.nthArg=Ma,Z.omit=Fh,Z.omitBy=Vc,Z.once=Bf,Z.orderBy=df,Z.over=ip,Z.overArgs=hh,Z.overEvery=op,Z.overSome=fp,Z.partial=ph,Z.partialRight=_h,Z.partition=ih,Z.pick=Nh,Z.pickBy=Gc,Z.property=Fa,Z.propertyOf=Na,Z.pull=Fs,Z.pullAll=Io,Z.pullAllBy=Oo,Z.pullAllWith=Ro,Z.pullAt=Ns,Z.range=cp,Z.rangeRight=ap,Z.rearg=vh,Z.reject=mf,Z.remove=zo,Z.rest=Tf,\nZ.reverse=Eo,Z.sampleSize=jf,Z.set=Jc,Z.setWith=Yc,Z.shuffle=Af,Z.slice=So,Z.sortBy=oh,Z.sortedUniq=$o,Z.sortedUniqBy=Do,Z.split=da,Z.spread=$f,Z.tail=Mo,Z.take=Fo,Z.takeRight=No,Z.takeRightWhile=Po,Z.takeWhile=qo,Z.tap=Xo,Z.throttle=Df,Z.thru=nf,Z.toArray=jc,Z.toPairs=Ph,Z.toPairsIn=qh,Z.toPath=Ha,Z.toPlainObject=Rc,Z.transform=Qc,Z.unary=Mf,Z.union=Ps,Z.unionBy=qs,Z.unionWith=Zs,Z.uniq=Zo,Z.uniqBy=Ko,Z.uniqWith=Vo,Z.unset=Xc,Z.unzip=Go,Z.unzipWith=Ho,Z.update=na,Z.updateWith=ta,Z.values=ra,Z.valuesIn=ea,\nZ.without=Ks,Z.words=Ra,Z.wrap=Ff,Z.xor=Vs,Z.xorBy=Gs,Z.xorWith=Hs,Z.zip=Js,Z.zipObject=Jo,Z.zipObjectDeep=Yo,Z.zipWith=Ys,Z.entries=Ph,Z.entriesIn=qh,Z.extend=Eh,Z.extendWith=Sh,Ta(Z,Z),Z.add=lp,Z.attempt=Xh,Z.camelCase=Zh,Z.capitalize=fa,Z.ceil=sp,Z.clamp=ua,Z.clone=Pf,Z.cloneDeep=Zf,Z.cloneDeepWith=Kf,Z.cloneWith=qf,Z.conformsTo=Vf,Z.deburr=ca,Z.defaultTo=Wa,Z.divide=hp,Z.endsWith=aa,Z.eq=Gf,Z.escape=la,Z.escapeRegExp=sa,Z.every=af,Z.find=nh,Z.findIndex=ho,Z.findKey=Wc,Z.findLast=th,Z.findLastIndex=po,\nZ.findLastKey=Lc,Z.floor=pp,Z.forEach=_f,Z.forEachRight=vf,Z.forIn=Cc,Z.forInRight=Uc,Z.forOwn=Bc,Z.forOwnRight=Tc,Z.get=Mc,Z.gt=gh,Z.gte=yh,Z.has=Fc,Z.hasIn=Nc,Z.head=bo,Z.identity=La,Z.includes=gf,Z.indexOf=wo,Z.inRange=ia,Z.invoke=$h,Z.isArguments=dh,Z.isArray=bh,Z.isArrayBuffer=wh,Z.isArrayLike=Hf,Z.isArrayLikeObject=Jf,Z.isBoolean=Yf,Z.isBuffer=mh,Z.isDate=xh,Z.isElement=Qf,Z.isEmpty=Xf,Z.isEqual=nc,Z.isEqualWith=tc,Z.isError=rc,Z.isFinite=ec,Z.isFunction=uc,Z.isInteger=ic,Z.isLength=oc,Z.isMap=jh,\nZ.isMatch=ac,Z.isMatchWith=lc,Z.isNaN=sc,Z.isNative=hc,Z.isNil=_c,Z.isNull=pc,Z.isNumber=vc,Z.isObject=fc,Z.isObjectLike=cc,Z.isPlainObject=gc,Z.isRegExp=Ah,Z.isSafeInteger=yc,Z.isSet=kh,Z.isString=dc,Z.isSymbol=bc,Z.isTypedArray=Ih,Z.isUndefined=wc,Z.isWeakMap=mc,Z.isWeakSet=xc,Z.join=xo,Z.kebabCase=Kh,Z.last=jo,Z.lastIndexOf=Ao,Z.lowerCase=Vh,Z.lowerFirst=Gh,Z.lt=Oh,Z.lte=Rh,Z.max=Ya,Z.maxBy=Qa,Z.mean=Xa,Z.meanBy=nl,Z.min=tl,Z.minBy=rl,Z.stubArray=Pa,Z.stubFalse=qa,Z.stubObject=Za,Z.stubString=Ka,\nZ.stubTrue=Va,Z.multiply=_p,Z.nth=ko,Z.noConflict=$a,Z.noop=Da,Z.now=fh,Z.pad=ha,Z.padEnd=pa,Z.padStart=_a,Z.parseInt=va,Z.random=oa,Z.reduce=bf,Z.reduceRight=wf,Z.repeat=ga,Z.replace=ya,Z.result=Hc,Z.round=vp,Z.runInContext=p,Z.sample=xf,Z.size=kf,Z.snakeCase=Hh,Z.some=If,Z.sortedIndex=Wo,Z.sortedIndexBy=Lo,Z.sortedIndexOf=Co,Z.sortedLastIndex=Uo,Z.sortedLastIndexBy=Bo,Z.sortedLastIndexOf=To,Z.startCase=Jh,Z.startsWith=ba,Z.subtract=gp,Z.sum=el,Z.sumBy=ul,Z.template=wa,Z.times=Ga,Z.toFinite=Ac,Z.toInteger=kc,\nZ.toLength=Ic,Z.toLower=ma,Z.toNumber=Oc,Z.toSafeInteger=zc,Z.toString=Ec,Z.toUpper=xa,Z.trim=ja,Z.trimEnd=Aa,Z.trimStart=ka,Z.truncate=Ia,Z.unescape=Oa,Z.uniqueId=Ja,Z.upperCase=Yh,Z.upperFirst=Qh,Z.each=_f,Z.eachRight=vf,Z.first=bo,Ta(Z,function(){var n={};return ue(Z,function(t,r){bl.call(Z.prototype,r)||(n[r]=t)}),n}(),{chain:false}),Z.VERSION=nn,r([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(n){Z[n].placeholder=Z}),r([\"drop\",\"take\"],function(n,t){Ut.prototype[n]=function(r){\nr=r===X?1:Gl(kc(r),0);var e=this.__filtered__&&!t?new Ut(this):this.clone();return e.__filtered__?e.__takeCount__=Hl(r,e.__takeCount__):e.__views__.push({size:Hl(r,Bn),type:n+(e.__dir__<0?\"Right\":\"\")}),e},Ut.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),r([\"filter\",\"map\",\"takeWhile\"],function(n,t){var r=t+1,e=r==zn||r==Sn;Ut.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r([\"head\",\"last\"],function(n,t){\nvar r=\"take\"+(t?\"Right\":\"\");Ut.prototype[n]=function(){return this[r](1).value()[0]}}),r([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");Ut.prototype[n]=function(){return this.__filtered__?new Ut(this):this[r](1)}}),Ut.prototype.compact=function(){return this.filter(La)},Ut.prototype.find=function(n){return this.filter(n).head()},Ut.prototype.findLast=function(n){return this.reverse().find(n)},Ut.prototype.invokeMap=uu(function(n,t){return typeof n==\"function\"?new Ut(this):this.map(function(r){\nreturn Oe(r,n,t)})}),Ut.prototype.reject=function(n){return this.filter(Uf(mi(n)))},Ut.prototype.slice=function(n,t){n=kc(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Ut(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==X&&(t=kc(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Ut.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Ut.prototype.toArray=function(){return this.take(Bn)},ue(Ut.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Z[e?\"take\"+(\"last\"==t?\"Right\":\"\"):t],i=e||/^find/.test(t);\nu&&(Z.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Ut,c=o[0],l=f||bh(t),s=function(n){var t=u.apply(Z,a([n],o));return e&&h?t[0]:t};l&&r&&typeof c==\"function\"&&1!=c.length&&(f=l=false);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new Ut(this);var g=n.apply(t,o);return g.__actions__.push({func:nf,args:[s],thisArg:X}),new Y(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})}),r([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(n){\nvar t=_l[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);Z.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(bh(u)?u:[],n)}return this[r](function(r){return t.apply(bh(r)?r:[],n)})}}),ue(Ut.prototype,function(n,t){var r=Z[t];if(r){var e=r.name+\"\";bl.call(fs,e)||(fs[e]=[]),fs[e].push({name:t,func:r})}}),fs[Qu(X,gn).name]=[{name:\"wrapper\",func:X}],Ut.prototype.clone=Dt,Ut.prototype.reverse=Qt,Ut.prototype.value=Xt,Z.prototype.at=Qs,\nZ.prototype.chain=tf,Z.prototype.commit=rf,Z.prototype.next=ef,Z.prototype.plant=of,Z.prototype.reverse=ff,Z.prototype.toJSON=Z.prototype.valueOf=Z.prototype.value=cf,Z.prototype.first=Z.prototype.head,Ul&&(Z.prototype[Ul]=uf),Z},be=de();typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?(re._=be, define(function(){return be})):ue?((ue.exports=be)._=be,ee._=be):re._=be}).call(this);", "/** Used to map aliases to their real names. */\nexports.aliasToReal = {\n\n  // Lodash aliases.\n  'each': 'forEach',\n  'eachRight': 'forEachRight',\n  'entries': 'toPairs',\n  'entriesIn': 'toPairsIn',\n  'extend': 'assignIn',\n  'extendAll': 'assignInAll',\n  'extendAllWith': 'assignInAllWith',\n  'extendWith': 'assignInWith',\n  'first': 'head',\n\n  // Methods that are curried variants of others.\n  'conforms': 'conformsTo',\n  'matches': 'isMatch',\n  'property': 'get',\n\n  // Ramda aliases.\n  '__': 'placeholder',\n  'F': 'stubFalse',\n  'T': 'stubTrue',\n  'all': 'every',\n  'allPass': 'overEvery',\n  'always': 'constant',\n  'any': 'some',\n  'anyPass': 'overSome',\n  'apply': 'spread',\n  'assoc': 'set',\n  'assocPath': 'set',\n  'complement': 'negate',\n  'compose': 'flowRight',\n  'contains': 'includes',\n  'dissoc': 'unset',\n  'dissocPath': 'unset',\n  'dropLast': 'dropRight',\n  'dropLastWhile': 'dropRightWhile',\n  'equals': 'isEqual',\n  'identical': 'eq',\n  'indexBy': 'keyBy',\n  'init': 'initial',\n  'invertObj': 'invert',\n  'juxt': 'over',\n  'omitAll': 'omit',\n  'nAry': 'ary',\n  'path': 'get',\n  'pathEq': 'matchesProperty',\n  'pathOr': 'getOr',\n  'paths': 'at',\n  'pickAll': 'pick',\n  'pipe': 'flow',\n  'pluck': 'map',\n  'prop': 'get',\n  'propEq': 'matchesProperty',\n  'propOr': 'getOr',\n  'props': 'at',\n  'symmetricDifference': 'xor',\n  'symmetricDifferenceBy': 'xorBy',\n  'symmetricDifferenceWith': 'xorWith',\n  'takeLast': 'takeRight',\n  'takeLastWhile': 'takeRightWhile',\n  'unapply': 'rest',\n  'unnest': 'flatten',\n  'useWith': 'overArgs',\n  'where': 'conformsTo',\n  'whereEq': 'isMatch',\n  'zipObj': 'zipObject'\n};\n\n/** Used to map ary to method names. */\nexports.aryMethod = {\n  '1': [\n    'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',\n    'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',\n    'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',\n    'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',\n    'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',\n    'uniqueId', 'words', 'zipAll'\n  ],\n  '2': [\n    'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',\n    'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',\n    'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',\n    'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',\n    'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',\n    'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',\n    'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',\n    'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',\n    'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',\n    'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',\n    'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',\n    'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',\n    'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',\n    'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',\n    'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',\n    'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',\n    'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',\n    'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',\n    'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',\n    'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',\n    'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',\n    'zipObjectDeep'\n  ],\n  '3': [\n    'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',\n    'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',\n    'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',\n    'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',\n    'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',\n    'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',\n    'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',\n    'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',\n    'xorWith', 'zipWith'\n  ],\n  '4': [\n    'fill', 'setWith', 'updateWith'\n  ]\n};\n\n/** Used to map ary to rearg configs. */\nexports.aryRearg = {\n  '2': [1, 0],\n  '3': [2, 0, 1],\n  '4': [3, 2, 0, 1]\n};\n\n/** Used to map method names to their iteratee ary. */\nexports.iterateeAry = {\n  'dropRightWhile': 1,\n  'dropWhile': 1,\n  'every': 1,\n  'filter': 1,\n  'find': 1,\n  'findFrom': 1,\n  'findIndex': 1,\n  'findIndexFrom': 1,\n  'findKey': 1,\n  'findLast': 1,\n  'findLastFrom': 1,\n  'findLastIndex': 1,\n  'findLastIndexFrom': 1,\n  'findLastKey': 1,\n  'flatMap': 1,\n  'flatMapDeep': 1,\n  'flatMapDepth': 1,\n  'forEach': 1,\n  'forEachRight': 1,\n  'forIn': 1,\n  'forInRight': 1,\n  'forOwn': 1,\n  'forOwnRight': 1,\n  'map': 1,\n  'mapKeys': 1,\n  'mapValues': 1,\n  'partition': 1,\n  'reduce': 2,\n  'reduceRight': 2,\n  'reject': 1,\n  'remove': 1,\n  'some': 1,\n  'takeRightWhile': 1,\n  'takeWhile': 1,\n  'times': 1,\n  'transform': 2\n};\n\n/** Used to map method names to iteratee rearg configs. */\nexports.iterateeRearg = {\n  'mapKeys': [1],\n  'reduceRight': [1, 0]\n};\n\n/** Used to map method names to rearg configs. */\nexports.methodRearg = {\n  'assignInAllWith': [1, 0],\n  'assignInWith': [1, 2, 0],\n  'assignAllWith': [1, 0],\n  'assignWith': [1, 2, 0],\n  'differenceBy': [1, 2, 0],\n  'differenceWith': [1, 2, 0],\n  'getOr': [2, 1, 0],\n  'intersectionBy': [1, 2, 0],\n  'intersectionWith': [1, 2, 0],\n  'isEqualWith': [1, 2, 0],\n  'isMatchWith': [2, 1, 0],\n  'mergeAllWith': [1, 0],\n  'mergeWith': [1, 2, 0],\n  'padChars': [2, 1, 0],\n  'padCharsEnd': [2, 1, 0],\n  'padCharsStart': [2, 1, 0],\n  'pullAllBy': [2, 1, 0],\n  'pullAllWith': [2, 1, 0],\n  'rangeStep': [1, 2, 0],\n  'rangeStepRight': [1, 2, 0],\n  'setWith': [3, 1, 2, 0],\n  'sortedIndexBy': [2, 1, 0],\n  'sortedLastIndexBy': [2, 1, 0],\n  'unionBy': [1, 2, 0],\n  'unionWith': [1, 2, 0],\n  'updateWith': [3, 1, 2, 0],\n  'xorBy': [1, 2, 0],\n  'xorWith': [1, 2, 0],\n  'zipWith': [1, 2, 0]\n};\n\n/** Used to map method names to spread configs. */\nexports.methodSpread = {\n  'assignAll': { 'start': 0 },\n  'assignAllWith': { 'start': 0 },\n  'assignInAll': { 'start': 0 },\n  'assignInAllWith': { 'start': 0 },\n  'defaultsAll': { 'start': 0 },\n  'defaultsDeepAll': { 'start': 0 },\n  'invokeArgs': { 'start': 2 },\n  'invokeArgsMap': { 'start': 2 },\n  'mergeAll': { 'start': 0 },\n  'mergeAllWith': { 'start': 0 },\n  'partial': { 'start': 1 },\n  'partialRight': { 'start': 1 },\n  'without': { 'start': 1 },\n  'zipAll': { 'start': 0 }\n};\n\n/** Used to identify methods which mutate arrays or objects. */\nexports.mutate = {\n  'array': {\n    'fill': true,\n    'pull': true,\n    'pullAll': true,\n    'pullAllBy': true,\n    'pullAllWith': true,\n    'pullAt': true,\n    'remove': true,\n    'reverse': true\n  },\n  'object': {\n    'assign': true,\n    'assignAll': true,\n    'assignAllWith': true,\n    'assignIn': true,\n    'assignInAll': true,\n    'assignInAllWith': true,\n    'assignInWith': true,\n    'assignWith': true,\n    'defaults': true,\n    'defaultsAll': true,\n    'defaultsDeep': true,\n    'defaultsDeepAll': true,\n    'merge': true,\n    'mergeAll': true,\n    'mergeAllWith': true,\n    'mergeWith': true,\n  },\n  'set': {\n    'set': true,\n    'setWith': true,\n    'unset': true,\n    'update': true,\n    'updateWith': true\n  }\n};\n\n/** Used to map real names to their aliases. */\nexports.realToAlias = (function() {\n  var hasOwnProperty = Object.prototype.hasOwnProperty,\n      object = exports.aliasToReal,\n      result = {};\n\n  for (var key in object) {\n    var value = object[key];\n    if (hasOwnProperty.call(result, value)) {\n      result[value].push(key);\n    } else {\n      result[value] = [key];\n    }\n  }\n  return result;\n}());\n\n/** Used to map method names to other names. */\nexports.remap = {\n  'assignAll': 'assign',\n  'assignAllWith': 'assignWith',\n  'assignInAll': 'assignIn',\n  'assignInAllWith': 'assignInWith',\n  'curryN': 'curry',\n  'curryRightN': 'curryRight',\n  'defaultsAll': 'defaults',\n  'defaultsDeepAll': 'defaultsDeep',\n  'findFrom': 'find',\n  'findIndexFrom': 'findIndex',\n  'findLastFrom': 'findLast',\n  'findLastIndexFrom': 'findLastIndex',\n  'getOr': 'get',\n  'includesFrom': 'includes',\n  'indexOfFrom': 'indexOf',\n  'invokeArgs': 'invoke',\n  'invokeArgsMap': 'invokeMap',\n  'lastIndexOfFrom': 'lastIndexOf',\n  'mergeAll': 'merge',\n  'mergeAllWith': 'mergeWith',\n  'padChars': 'pad',\n  'padCharsEnd': 'padEnd',\n  'padCharsStart': 'padStart',\n  'propertyOf': 'get',\n  'rangeStep': 'range',\n  'rangeStepRight': 'rangeRight',\n  'restFrom': 'rest',\n  'spreadFrom': 'spread',\n  'trimChars': 'trim',\n  'trimCharsEnd': 'trimEnd',\n  'trimCharsStart': 'trimStart',\n  'zipAll': 'zip'\n};\n\n/** Used to track methods that skip fixing their arity. */\nexports.skipFixed = {\n  'castArray': true,\n  'flow': true,\n  'flowRight': true,\n  'iteratee': true,\n  'mixin': true,\n  'rearg': true,\n  'runInContext': true\n};\n\n/** Used to track methods that skip rearranging arguments. */\nexports.skipRearg = {\n  'add': true,\n  'assign': true,\n  'assignIn': true,\n  'bind': true,\n  'bindKey': true,\n  'concat': true,\n  'difference': true,\n  'divide': true,\n  'eq': true,\n  'gt': true,\n  'gte': true,\n  'isEqual': true,\n  'lt': true,\n  'lte': true,\n  'matchesProperty': true,\n  'merge': true,\n  'multiply': true,\n  'overArgs': true,\n  'partial': true,\n  'partialRight': true,\n  'propertyOf': true,\n  'random': true,\n  'range': true,\n  'rangeRight': true,\n  'subtract': true,\n  'zip': true,\n  'zipObject': true,\n  'zipObjectDeep': true\n};\n", "/**\n * The default argument placeholder value for methods.\n *\n * @type {Object}\n */\nmodule.exports = {};\n", "var mapping = require('./_mapping'),\n    fallbackHolder = require('./placeholder');\n\n/** Built-in value reference. */\nvar push = Array.prototype.push;\n\n/**\n * Creates a function, with an arity of `n`, that invokes `func` with the\n * arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} n The arity of the new function.\n * @returns {Function} Returns the new function.\n */\nfunction baseArity(func, n) {\n  return n == 2\n    ? function(a, b) { return func.apply(undefined, arguments); }\n    : function(a) { return func.apply(undefined, arguments); };\n}\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments, ignoring\n * any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\nfunction baseAry(func, n) {\n  return n == 2\n    ? function(a, b) { return func(a, b); }\n    : function(a) { return func(a); };\n}\n\n/**\n * Creates a clone of `array`.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the cloned array.\n */\nfunction cloneArray(array) {\n  var length = array ? array.length : 0,\n      result = Array(length);\n\n  while (length--) {\n    result[length] = array[length];\n  }\n  return result;\n}\n\n/**\n * Creates a function that clones a given object using the assignment `func`.\n *\n * @private\n * @param {Function} func The assignment function.\n * @returns {Function} Returns the new cloner function.\n */\nfunction createCloner(func) {\n  return function(object) {\n    return func({}, object);\n  };\n}\n\n/**\n * A specialized version of `_.spread` which flattens the spread array into\n * the arguments of the invoked `func`.\n *\n * @private\n * @param {Function} func The function to spread arguments over.\n * @param {number} start The start position of the spread.\n * @returns {Function} Returns the new function.\n */\nfunction flatSpread(func, start) {\n  return function() {\n    var length = arguments.length,\n        lastIndex = length - 1,\n        args = Array(length);\n\n    while (length--) {\n      args[length] = arguments[length];\n    }\n    var array = args[start],\n        otherArgs = args.slice(0, start);\n\n    if (array) {\n      push.apply(otherArgs, array);\n    }\n    if (start != lastIndex) {\n      push.apply(otherArgs, args.slice(start + 1));\n    }\n    return func.apply(this, otherArgs);\n  };\n}\n\n/**\n * Creates a function that wraps `func` and uses `cloner` to clone the first\n * argument it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} cloner The function to clone arguments.\n * @returns {Function} Returns the new immutable function.\n */\nfunction wrapImmutable(func, cloner) {\n  return function() {\n    var length = arguments.length;\n    if (!length) {\n      return;\n    }\n    var args = Array(length);\n    while (length--) {\n      args[length] = arguments[length];\n    }\n    var result = args[0] = cloner.apply(undefined, args);\n    func.apply(undefined, args);\n    return result;\n  };\n}\n\n/**\n * The base implementation of `convert` which accepts a `util` object of methods\n * required to perform conversions.\n *\n * @param {Object} util The util object.\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.cap=true] Specify capping iteratee arguments.\n * @param {boolean} [options.curry=true] Specify currying.\n * @param {boolean} [options.fixed=true] Specify fixed arity.\n * @param {boolean} [options.immutable=true] Specify immutable operations.\n * @param {boolean} [options.rearg=true] Specify rearranging arguments.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction baseConvert(util, name, func, options) {\n  var isLib = typeof name == 'function',\n      isObj = name === Object(name);\n\n  if (isObj) {\n    options = func;\n    func = name;\n    name = undefined;\n  }\n  if (func == null) {\n    throw new TypeError;\n  }\n  options || (options = {});\n\n  var config = {\n    'cap': 'cap' in options ? options.cap : true,\n    'curry': 'curry' in options ? options.curry : true,\n    'fixed': 'fixed' in options ? options.fixed : true,\n    'immutable': 'immutable' in options ? options.immutable : true,\n    'rearg': 'rearg' in options ? options.rearg : true\n  };\n\n  var defaultHolder = isLib ? func : fallbackHolder,\n      forceCurry = ('curry' in options) && options.curry,\n      forceFixed = ('fixed' in options) && options.fixed,\n      forceRearg = ('rearg' in options) && options.rearg,\n      pristine = isLib ? func.runInContext() : undefined;\n\n  var helpers = isLib ? func : {\n    'ary': util.ary,\n    'assign': util.assign,\n    'clone': util.clone,\n    'curry': util.curry,\n    'forEach': util.forEach,\n    'isArray': util.isArray,\n    'isError': util.isError,\n    'isFunction': util.isFunction,\n    'isWeakMap': util.isWeakMap,\n    'iteratee': util.iteratee,\n    'keys': util.keys,\n    'rearg': util.rearg,\n    'toInteger': util.toInteger,\n    'toPath': util.toPath\n  };\n\n  var ary = helpers.ary,\n      assign = helpers.assign,\n      clone = helpers.clone,\n      curry = helpers.curry,\n      each = helpers.forEach,\n      isArray = helpers.isArray,\n      isError = helpers.isError,\n      isFunction = helpers.isFunction,\n      isWeakMap = helpers.isWeakMap,\n      keys = helpers.keys,\n      rearg = helpers.rearg,\n      toInteger = helpers.toInteger,\n      toPath = helpers.toPath;\n\n  var aryMethodKeys = keys(mapping.aryMethod);\n\n  var wrappers = {\n    'castArray': function(castArray) {\n      return function() {\n        var value = arguments[0];\n        return isArray(value)\n          ? castArray(cloneArray(value))\n          : castArray.apply(undefined, arguments);\n      };\n    },\n    'iteratee': function(iteratee) {\n      return function() {\n        var func = arguments[0],\n            arity = arguments[1],\n            result = iteratee(func, arity),\n            length = result.length;\n\n        if (config.cap && typeof arity == 'number') {\n          arity = arity > 2 ? (arity - 2) : 1;\n          return (length && length <= arity) ? result : baseAry(result, arity);\n        }\n        return result;\n      };\n    },\n    'mixin': function(mixin) {\n      return function(source) {\n        var func = this;\n        if (!isFunction(func)) {\n          return mixin(func, Object(source));\n        }\n        var pairs = [];\n        each(keys(source), function(key) {\n          if (isFunction(source[key])) {\n            pairs.push([key, func.prototype[key]]);\n          }\n        });\n\n        mixin(func, Object(source));\n\n        each(pairs, function(pair) {\n          var value = pair[1];\n          if (isFunction(value)) {\n            func.prototype[pair[0]] = value;\n          } else {\n            delete func.prototype[pair[0]];\n          }\n        });\n        return func;\n      };\n    },\n    'nthArg': function(nthArg) {\n      return function(n) {\n        var arity = n < 0 ? 1 : (toInteger(n) + 1);\n        return curry(nthArg(n), arity);\n      };\n    },\n    'rearg': function(rearg) {\n      return function(func, indexes) {\n        var arity = indexes ? indexes.length : 0;\n        return curry(rearg(func, indexes), arity);\n      };\n    },\n    'runInContext': function(runInContext) {\n      return function(context) {\n        return baseConvert(util, runInContext(context), options);\n      };\n    }\n  };\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Casts `func` to a function with an arity capped iteratee if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @returns {Function} Returns the cast function.\n   */\n  function castCap(name, func) {\n    if (config.cap) {\n      var indexes = mapping.iterateeRearg[name];\n      if (indexes) {\n        return iterateeRearg(func, indexes);\n      }\n      var n = !isLib && mapping.iterateeAry[name];\n      if (n) {\n        return iterateeAry(func, n);\n      }\n    }\n    return func;\n  }\n\n  /**\n   * Casts `func` to a curried function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity of `func`.\n   * @returns {Function} Returns the cast function.\n   */\n  function castCurry(name, func, n) {\n    return (forceCurry || (config.curry && n > 1))\n      ? curry(func, n)\n      : func;\n  }\n\n  /**\n   * Casts `func` to a fixed arity function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity cap.\n   * @returns {Function} Returns the cast function.\n   */\n  function castFixed(name, func, n) {\n    if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {\n      var data = mapping.methodSpread[name],\n          start = data && data.start;\n\n      return start  === undefined ? ary(func, n) : flatSpread(func, start);\n    }\n    return func;\n  }\n\n  /**\n   * Casts `func` to an rearged function if needed.\n   *\n   * @private\n   * @param {string} name The name of the function to inspect.\n   * @param {Function} func The function to inspect.\n   * @param {number} n The arity of `func`.\n   * @returns {Function} Returns the cast function.\n   */\n  function castRearg(name, func, n) {\n    return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))\n      ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])\n      : func;\n  }\n\n  /**\n   * Creates a clone of `object` by `path`.\n   *\n   * @private\n   * @param {Object} object The object to clone.\n   * @param {Array|string} path The path to clone by.\n   * @returns {Object} Returns the cloned object.\n   */\n  function cloneByPath(object, path) {\n    path = toPath(path);\n\n    var index = -1,\n        length = path.length,\n        lastIndex = length - 1,\n        result = clone(Object(object)),\n        nested = result;\n\n    while (nested != null && ++index < length) {\n      var key = path[index],\n          value = nested[key];\n\n      if (value != null &&\n          !(isFunction(value) || isError(value) || isWeakMap(value))) {\n        nested[key] = clone(index == lastIndex ? value : Object(value));\n      }\n      nested = nested[key];\n    }\n    return result;\n  }\n\n  /**\n   * Converts `lodash` to an immutable auto-curried iteratee-first data-last\n   * version with conversion `options` applied.\n   *\n   * @param {Object} [options] The options object. See `baseConvert` for more details.\n   * @returns {Function} Returns the converted `lodash`.\n   */\n  function convertLib(options) {\n    return _.runInContext.convert(options)(undefined);\n  }\n\n  /**\n   * Create a converter function for `func` of `name`.\n   *\n   * @param {string} name The name of the function to convert.\n   * @param {Function} func The function to convert.\n   * @returns {Function} Returns the new converter function.\n   */\n  function createConverter(name, func) {\n    var realName = mapping.aliasToReal[name] || name,\n        methodName = mapping.remap[realName] || realName,\n        oldOptions = options;\n\n    return function(options) {\n      var newUtil = isLib ? pristine : helpers,\n          newFunc = isLib ? pristine[methodName] : func,\n          newOptions = assign(assign({}, oldOptions), options);\n\n      return baseConvert(newUtil, realName, newFunc, newOptions);\n    };\n  }\n\n  /**\n   * Creates a function that wraps `func` to invoke its iteratee, with up to `n`\n   * arguments, ignoring any additional arguments.\n   *\n   * @private\n   * @param {Function} func The function to cap iteratee arguments for.\n   * @param {number} n The arity cap.\n   * @returns {Function} Returns the new function.\n   */\n  function iterateeAry(func, n) {\n    return overArg(func, function(func) {\n      return typeof func == 'function' ? baseAry(func, n) : func;\n    });\n  }\n\n  /**\n   * Creates a function that wraps `func` to invoke its iteratee with arguments\n   * arranged according to the specified `indexes` where the argument value at\n   * the first index is provided as the first argument, the argument value at\n   * the second index is provided as the second argument, and so on.\n   *\n   * @private\n   * @param {Function} func The function to rearrange iteratee arguments for.\n   * @param {number[]} indexes The arranged argument indexes.\n   * @returns {Function} Returns the new function.\n   */\n  function iterateeRearg(func, indexes) {\n    return overArg(func, function(func) {\n      var n = indexes.length;\n      return baseArity(rearg(baseAry(func, n), indexes), n);\n    });\n  }\n\n  /**\n   * Creates a function that invokes `func` with its first 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() {\n      var length = arguments.length;\n      if (!length) {\n        return func();\n      }\n      var args = Array(length);\n      while (length--) {\n        args[length] = arguments[length];\n      }\n      var index = config.rearg ? 0 : (length - 1);\n      args[index] = transform(args[index]);\n      return func.apply(undefined, args);\n    };\n  }\n\n  /**\n   * Creates a function that wraps `func` and applys the conversions\n   * rules by `name`.\n   *\n   * @private\n   * @param {string} name The name of the function to wrap.\n   * @param {Function} func The function to wrap.\n   * @returns {Function} Returns the converted function.\n   */\n  function wrap(name, func, placeholder) {\n    var result,\n        realName = mapping.aliasToReal[name] || name,\n        wrapped = func,\n        wrapper = wrappers[realName];\n\n    if (wrapper) {\n      wrapped = wrapper(func);\n    }\n    else if (config.immutable) {\n      if (mapping.mutate.array[realName]) {\n        wrapped = wrapImmutable(func, cloneArray);\n      }\n      else if (mapping.mutate.object[realName]) {\n        wrapped = wrapImmutable(func, createCloner(func));\n      }\n      else if (mapping.mutate.set[realName]) {\n        wrapped = wrapImmutable(func, cloneByPath);\n      }\n    }\n    each(aryMethodKeys, function(aryKey) {\n      each(mapping.aryMethod[aryKey], function(otherName) {\n        if (realName == otherName) {\n          var data = mapping.methodSpread[realName],\n              afterRearg = data && data.afterRearg;\n\n          result = afterRearg\n            ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)\n            : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);\n\n          result = castCap(realName, result);\n          result = castCurry(realName, result, aryKey);\n          return false;\n        }\n      });\n      return !result;\n    });\n\n    result || (result = wrapped);\n    if (result == func) {\n      result = forceCurry ? curry(result, 1) : function() {\n        return func.apply(this, arguments);\n      };\n    }\n    result.convert = createConverter(realName, func);\n    result.placeholder = func.placeholder = placeholder;\n\n    return result;\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  if (!isObj) {\n    return wrap(name, func, defaultHolder);\n  }\n  var _ = func;\n\n  // Convert methods by ary cap.\n  var pairs = [];\n  each(aryMethodKeys, function(aryKey) {\n    each(mapping.aryMethod[aryKey], function(key) {\n      var func = _[mapping.remap[key] || key];\n      if (func) {\n        pairs.push([key, wrap(key, func, _)]);\n      }\n    });\n  });\n\n  // Convert remaining methods.\n  each(keys(_), function(key) {\n    var func = _[key];\n    if (typeof func == 'function') {\n      var length = pairs.length;\n      while (length--) {\n        if (pairs[length][0] == key) {\n          return;\n        }\n      }\n      func.convert = createConverter(key, func);\n      pairs.push([key, func]);\n    }\n  });\n\n  // Assign to `_` leaving `_.prototype` unchanged to allow chaining.\n  each(pairs, function(pair) {\n    _[pair[0]] = pair[1];\n  });\n\n  _.convert = convertLib;\n  _.placeholder = _;\n\n  // Assign aliases.\n  each(keys(_), function(key) {\n    each(mapping.realToAlias[key] || [], function(alias) {\n      _[alias] = _[key];\n    });\n  });\n\n  return _;\n}\n\nmodule.exports = baseConvert;\n", "var _ = require('./lodash.min').runInContext();\nmodule.exports = require('./fp/_baseConvert')(_, _);\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isJsonObject = exports.typeofJsonValue = void 0;\n/**\n * Get the type of a JSON value.\n * Distinguishes between array, null and object.\n */\nfunction typeofJsonValue(value) {\n    let t = typeof value;\n    if (t == \"object\") {\n        if (Array.isArray(value))\n            return \"array\";\n        if (value === null)\n            return \"null\";\n    }\n    return t;\n}\nexports.typeofJsonValue = typeofJsonValue;\n/**\n * Is this a JSON object (instead of an array or null)?\n */\nfunction isJsonObject(value) {\n    return value !== null && typeof value == \"object\" && !Array.isArray(value);\n}\nexports.isJsonObject = isJsonObject;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.base64encode = exports.base64decode = void 0;\n// lookup table from base64 character to byte\nlet encTable = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decTable = [];\nfor (let i = 0; i < encTable.length; i++)\n    decTable[encTable[i].charCodeAt(0)] = i;\n// support base64url variants\ndecTable[\"-\".charCodeAt(0)] = encTable.indexOf(\"+\");\ndecTable[\"_\".charCodeAt(0)] = encTable.indexOf(\"/\");\n/**\n * Decodes a base64 string to a byte array.\n *\n * - ignores white-space, including line breaks and tabs\n * - allows inner padding (can decode concatenated base64 strings)\n * - does not require padding\n * - understands base64url encoding:\n *   \"-\" instead of \"+\",\n *   \"_\" instead of \"/\",\n *   no padding\n */\nfunction base64decode(base64Str) {\n    // estimate byte size, not accounting for inner padding and whitespace\n    let es = base64Str.length * 3 / 4;\n    // if (es % 3 !== 0)\n    // throw new Error('invalid base64 string');\n    if (base64Str[base64Str.length - 2] == '=')\n        es -= 2;\n    else if (base64Str[base64Str.length - 1] == '=')\n        es -= 1;\n    let bytes = new Uint8Array(es), bytePos = 0, // position in byte array\n    groupPos = 0, // position in base64 group\n    b, // current byte\n    p = 0 // previous byte\n    ;\n    for (let i = 0; i < base64Str.length; i++) {\n        b = decTable[base64Str.charCodeAt(i)];\n        if (b === undefined) {\n            // noinspection FallThroughInSwitchStatementJS\n            switch (base64Str[i]) {\n                case '=':\n                    groupPos = 0; // reset state when padding found\n                case '\\n':\n                case '\\r':\n                case '\\t':\n                case ' ':\n                    continue; // skip white-space, and padding\n                default:\n                    throw Error(`invalid base64 string.`);\n            }\n        }\n        switch (groupPos) {\n            case 0:\n                p = b;\n                groupPos = 1;\n                break;\n            case 1:\n                bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n                p = b;\n                groupPos = 2;\n                break;\n            case 2:\n                bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n                p = b;\n                groupPos = 3;\n                break;\n            case 3:\n                bytes[bytePos++] = (p & 3) << 6 | b;\n                groupPos = 0;\n                break;\n        }\n    }\n    if (groupPos == 1)\n        throw Error(`invalid base64 string.`);\n    return bytes.subarray(0, bytePos);\n}\nexports.base64decode = base64decode;\n/**\n * Encodes a byte array to a base64 string.\n * Adds padding at the end.\n * Does not insert newlines.\n */\nfunction base64encode(bytes) {\n    let base64 = '', groupPos = 0, // position in base64 group\n    b, // current byte\n    p = 0; // carry over from previous byte\n    for (let i = 0; i < bytes.length; i++) {\n        b = bytes[i];\n        switch (groupPos) {\n            case 0:\n                base64 += encTable[b >> 2];\n                p = (b & 3) << 4;\n                groupPos = 1;\n                break;\n            case 1:\n                base64 += encTable[p | b >> 4];\n                p = (b & 15) << 2;\n                groupPos = 2;\n                break;\n            case 2:\n                base64 += encTable[p | b >> 6];\n                base64 += encTable[b & 63];\n                groupPos = 0;\n                break;\n        }\n    }\n    // padding required?\n    if (groupPos) {\n        base64 += encTable[p];\n        base64 += '=';\n        if (groupPos == 1)\n            base64 += '=';\n    }\n    return base64;\n}\nexports.base64encode = base64encode;\n", "\"use strict\";\n// Copyright (c) 2016, Daniel Wirtz  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n//   notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above copyright\n//   notice, this list of conditions and the following disclaimer in the\n//   documentation and/or other materials provided with the distribution.\n// * Neither the name of its author, nor the names of its contributors\n//   may be used to endorse or promote products derived from this software\n//   without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utf8read = void 0;\nconst fromCharCodes = (chunk) => String.fromCharCode.apply(String, chunk);\n/**\n * @deprecated This function will no longer be exported with the next major\n * release, since protobuf-ts has switch to TextDecoder API. If you need this\n * function, please migrate to @protobufjs/utf8. For context, see\n * https://github.com/timostamm/protobuf-ts/issues/184\n *\n * Reads UTF8 bytes as a string.\n *\n * See [protobufjs / utf8](https://github.com/protobufjs/protobuf.js/blob/9893e35b854621cce64af4bf6be2cff4fb892796/lib/utf8/index.js#L40)\n *\n * Copyright (c) 2016, Daniel Wirtz\n */\nfunction utf8read(bytes) {\n    if (bytes.length < 1)\n        return \"\";\n    let pos = 0, // position in bytes\n    parts = [], chunk = [], i = 0, // char offset\n    t; // temporary\n    let len = bytes.length;\n    while (pos < len) {\n        t = bytes[pos++];\n        if (t < 128)\n            chunk[i++] = t;\n        else if (t > 191 && t < 224)\n            chunk[i++] = (t & 31) << 6 | bytes[pos++] & 63;\n        else if (t > 239 && t < 365) {\n            t = ((t & 7) << 18 | (bytes[pos++] & 63) << 12 | (bytes[pos++] & 63) << 6 | bytes[pos++] & 63) - 0x10000;\n            chunk[i++] = 0xD800 + (t >> 10);\n            chunk[i++] = 0xDC00 + (t & 1023);\n        }\n        else\n            chunk[i++] = (t & 15) << 12 | (bytes[pos++] & 63) << 6 | bytes[pos++] & 63;\n        if (i > 8191) {\n            parts.push(fromCharCodes(chunk));\n            i = 0;\n        }\n    }\n    if (parts.length) {\n        if (i)\n            parts.push(fromCharCodes(chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return fromCharCodes(chunk.slice(0, i));\n}\nexports.utf8read = utf8read;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WireType = exports.mergeBinaryOptions = exports.UnknownFieldHandler = void 0;\n/**\n * This handler implements the default behaviour for unknown fields.\n * When reading data, unknown fields are stored on the message, in a\n * symbol property.\n * When writing data, the symbol property is queried and unknown fields\n * are serialized into the output again.\n */\nvar UnknownFieldHandler;\n(function (UnknownFieldHandler) {\n    /**\n     * The symbol used to store unknown fields for a message.\n     * The property must conform to `UnknownFieldContainer`.\n     */\n    UnknownFieldHandler.symbol = Symbol.for(\"protobuf-ts/unknown\");\n    /**\n     * Store an unknown field during binary read directly on the message.\n     * This method is compatible with `BinaryReadOptions.readUnknownField`.\n     */\n    UnknownFieldHandler.onRead = (typeName, message, fieldNo, wireType, data) => {\n        let container = is(message) ? message[UnknownFieldHandler.symbol] : message[UnknownFieldHandler.symbol] = [];\n        container.push({ no: fieldNo, wireType, data });\n    };\n    /**\n     * Write unknown fields stored for the message to the writer.\n     * This method is compatible with `BinaryWriteOptions.writeUnknownFields`.\n     */\n    UnknownFieldHandler.onWrite = (typeName, message, writer) => {\n        for (let { no, wireType, data } of UnknownFieldHandler.list(message))\n            writer.tag(no, wireType).raw(data);\n    };\n    /**\n     * List unknown fields stored for the message.\n     * Note that there may be multiples fields with the same number.\n     */\n    UnknownFieldHandler.list = (message, fieldNo) => {\n        if (is(message)) {\n            let all = message[UnknownFieldHandler.symbol];\n            return fieldNo ? all.filter(uf => uf.no == fieldNo) : all;\n        }\n        return [];\n    };\n    /**\n     * Returns the last unknown field by field number.\n     */\n    UnknownFieldHandler.last = (message, fieldNo) => UnknownFieldHandler.list(message, fieldNo).slice(-1)[0];\n    const is = (message) => message && Array.isArray(message[UnknownFieldHandler.symbol]);\n})(UnknownFieldHandler = exports.UnknownFieldHandler || (exports.UnknownFieldHandler = {}));\n/**\n * Merges binary write or read options. Later values override earlier values.\n */\nfunction mergeBinaryOptions(a, b) {\n    return Object.assign(Object.assign({}, a), b);\n}\nexports.mergeBinaryOptions = mergeBinaryOptions;\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nvar WireType;\n(function (WireType) {\n    /**\n     * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n     */\n    WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n    /**\n     * Used for fixed64, sfixed64, double.\n     * Always 8 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n    /**\n     * Used for string, bytes, embedded messages, packed repeated fields\n     *\n     * Only repeated numeric types (types which use the varint, 32-bit,\n     * or 64-bit wire types) can be packed. In proto3, such fields are\n     * packed by default.\n     */\n    WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n    /**\n     * Used for groups\n     * @deprecated\n     */\n    WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n    /**\n     * Used for groups\n     * @deprecated\n     */\n    WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n    /**\n     * Used for fixed32, sfixed32, float.\n     * Always 4 bytes with little-endian byte order.\n     */\n    WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType = exports.WireType || (exports.WireType = {}));\n", "\"use strict\";\n// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it.  This code is not\n// standalone and requires a support library to be linked with it.  This\n// support library is itself covered by the above license.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.varint32read = exports.varint32write = exports.int64toString = exports.int64fromString = exports.varint64write = exports.varint64read = void 0;\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [0]: high bits\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nfunction varint64read() {\n    let lowBits = 0;\n    let highBits = 0;\n    for (let shift = 0; shift < 28; shift += 7) {\n        let b = this.buf[this.pos++];\n        lowBits |= (b & 0x7F) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    let middleByte = this.buf[this.pos++];\n    // last four bits of the first 32 bit number\n    lowBits |= (middleByte & 0x0F) << 28;\n    // 3 upper bits are part of the next 32 bit number\n    highBits = (middleByte & 0x70) >> 4;\n    if ((middleByte & 0x80) == 0) {\n        this.assertBounds();\n        return [lowBits, highBits];\n    }\n    for (let shift = 3; shift <= 31; shift += 7) {\n        let b = this.buf[this.pos++];\n        highBits |= (b & 0x7F) << shift;\n        if ((b & 0x80) == 0) {\n            this.assertBounds();\n            return [lowBits, highBits];\n        }\n    }\n    throw new Error('invalid varint');\n}\nexports.varint64read = varint64read;\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nfunction varint64write(lo, hi, bytes) {\n    for (let i = 0; i < 28; i = i + 7) {\n        const shift = lo >>> i;\n        const hasNext = !((shift >>> 7) == 0 && hi == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    const splitBits = ((lo >>> 28) & 0x0F) | ((hi & 0x07) << 4);\n    const hasMoreBits = !((hi >> 3) == 0);\n    bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xFF);\n    if (!hasMoreBits) {\n        return;\n    }\n    for (let i = 3; i < 31; i = i + 7) {\n        const shift = hi >>> i;\n        const hasNext = !((shift >>> 7) == 0);\n        const byte = (hasNext ? shift | 0x80 : shift) & 0xFF;\n        bytes.push(byte);\n        if (!hasNext) {\n            return;\n        }\n    }\n    bytes.push((hi >>> 31) & 0x01);\n}\nexports.varint64write = varint64write;\n// constants for binary math\nconst TWO_PWR_32_DBL = (1 << 16) * (1 << 16);\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Returns tuple:\n * [0]: minus sign?\n * [1]: low bits\n * [2]: high bits\n *\n * Copyright 2008 Google Inc.\n */\nfunction int64fromString(dec) {\n    // Check for minus sign.\n    let minus = dec[0] == '-';\n    if (minus)\n        dec = dec.slice(1);\n    // Work 6 decimal digits at a time, acting like we're converting base 1e6\n    // digits to binary. This is safe to do with floating point math because\n    // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n    const base = 1e6;\n    let lowBits = 0;\n    let highBits = 0;\n    function add1e6digit(begin, end) {\n        // Note: Number('') is 0.\n        const digit1e6 = Number(dec.slice(begin, end));\n        highBits *= base;\n        lowBits = lowBits * base + digit1e6;\n        // Carry bits from lowBits to highBits\n        if (lowBits >= TWO_PWR_32_DBL) {\n            highBits = highBits + ((lowBits / TWO_PWR_32_DBL) | 0);\n            lowBits = lowBits % TWO_PWR_32_DBL;\n        }\n    }\n    add1e6digit(-24, -18);\n    add1e6digit(-18, -12);\n    add1e6digit(-12, -6);\n    add1e6digit(-6);\n    return [minus, lowBits, highBits];\n}\nexports.int64fromString = int64fromString;\n/**\n * Format 64 bit integer value (as two JS numbers) to decimal string.\n *\n * Copyright 2008 Google Inc.\n */\nfunction int64toString(bitsLow, bitsHigh) {\n    // Skip the expensive conversion if the number is small enough to use the\n    // built-in conversions.\n    if ((bitsHigh >>> 0) <= 0x1FFFFF) {\n        return '' + (TWO_PWR_32_DBL * bitsHigh + (bitsLow >>> 0));\n    }\n    // What this code is doing is essentially converting the input number from\n    // base-2 to base-1e7, which allows us to represent the 64-bit range with\n    // only 3 (very large) digits. Those digits are then trivial to convert to\n    // a base-10 string.\n    // The magic numbers used here are -\n    // 2^24 = 16777216 = (1,6777216) in base-1e7.\n    // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n    // Split 32:32 representation into 16:24:24 representation so our\n    // intermediate digits don't overflow.\n    let low = bitsLow & 0xFFFFFF;\n    let mid = (((bitsLow >>> 24) | (bitsHigh << 8)) >>> 0) & 0xFFFFFF;\n    let high = (bitsHigh >> 16) & 0xFFFF;\n    // Assemble our three base-1e7 digits, ignoring carries. The maximum\n    // value in a digit at this step is representable as a 48-bit integer, which\n    // can be stored in a 64-bit floating point number.\n    let digitA = low + (mid * 6777216) + (high * 6710656);\n    let digitB = mid + (high * 8147497);\n    let digitC = (high * 2);\n    // Apply carries from A to B and from B to C.\n    let base = 10000000;\n    if (digitA >= base) {\n        digitB += Math.floor(digitA / base);\n        digitA %= base;\n    }\n    if (digitB >= base) {\n        digitC += Math.floor(digitB / base);\n        digitB %= base;\n    }\n    // Convert base-1e7 digits to base-10, with optional leading zeroes.\n    function decimalFrom1e7(digit1e7, needLeadingZeros) {\n        let partial = digit1e7 ? String(digit1e7) : '';\n        if (needLeadingZeros) {\n            return '0000000'.slice(partial.length) + partial;\n        }\n        return partial;\n    }\n    return decimalFrom1e7(digitC, /*needLeadingZeros=*/ 0) +\n        decimalFrom1e7(digitB, /*needLeadingZeros=*/ digitC) +\n        // If the final 1e7 digit didn't need leading zeros, we would have\n        // returned via the trivial code path at the top.\n        decimalFrom1e7(digitA, /*needLeadingZeros=*/ 1);\n}\nexports.int64toString = int64toString;\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nfunction varint32write(value, bytes) {\n    if (value >= 0) {\n        // write value as varint 32\n        while (value > 0x7f) {\n            bytes.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        bytes.push(value);\n    }\n    else {\n        for (let i = 0; i < 9; i++) {\n            bytes.push(value & 127 | 128);\n            value = value >> 7;\n        }\n        bytes.push(1);\n    }\n}\nexports.varint32write = varint32write;\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nfunction varint32read() {\n    let b = this.buf[this.pos++];\n    let result = b & 0x7F;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7F) << 7;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7F) << 14;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    b = this.buf[this.pos++];\n    result |= (b & 0x7F) << 21;\n    if ((b & 0x80) == 0) {\n        this.assertBounds();\n        return result;\n    }\n    // Extract only last 4 bits\n    b = this.buf[this.pos++];\n    result |= (b & 0x0F) << 28;\n    for (let readBytes = 5; ((b & 0x80) !== 0) && readBytes < 10; readBytes++)\n        b = this.buf[this.pos++];\n    if ((b & 0x80) != 0)\n        throw new Error('invalid varint');\n    this.assertBounds();\n    // Result can have 32 bits, convert it to unsigned\n    return result >>> 0;\n}\nexports.varint32read = varint32read;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PbLong = exports.PbULong = exports.detectBi = void 0;\nconst goog_varint_1 = require(\"./goog-varint\");\nlet BI;\nfunction detectBi() {\n    const dv = new DataView(new ArrayBuffer(8));\n    const ok = globalThis.BigInt !== undefined\n        && typeof dv.getBigInt64 === \"function\"\n        && typeof dv.getBigUint64 === \"function\"\n        && typeof dv.setBigInt64 === \"function\"\n        && typeof dv.setBigUint64 === \"function\";\n    BI = ok ? {\n        MIN: BigInt(\"-9223372036854775808\"),\n        MAX: BigInt(\"9223372036854775807\"),\n        UMIN: BigInt(\"0\"),\n        UMAX: BigInt(\"18446744073709551615\"),\n        C: BigInt,\n        V: dv,\n    } : undefined;\n}\nexports.detectBi = detectBi;\ndetectBi();\nfunction assertBi(bi) {\n    if (!bi)\n        throw new Error(\"BigInt unavailable, see https://github.com/timostamm/protobuf-ts/blob/v1.0.8/MANUAL.md#bigint-support\");\n}\n// used to validate from(string) input (when bigint is unavailable)\nconst RE_DECIMAL_STR = /^-?[0-9]+$/;\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\nconst HALF_2_PWR_32 = 0x080000000;\n// base class for PbLong and PbULong provides shared code\nclass SharedPbLong {\n    /**\n     * Create a new instance with the given bits.\n     */\n    constructor(lo, hi) {\n        this.lo = lo | 0;\n        this.hi = hi | 0;\n    }\n    /**\n     * Is this instance equal to 0?\n     */\n    isZero() {\n        return this.lo == 0 && this.hi == 0;\n    }\n    /**\n     * Convert to a native number.\n     */\n    toNumber() {\n        let result = this.hi * TWO_PWR_32_DBL + (this.lo >>> 0);\n        if (!Number.isSafeInteger(result))\n            throw new Error(\"cannot convert to safe number\");\n        return result;\n    }\n}\n/**\n * 64-bit unsigned integer as two 32-bit values.\n * Converts between `string`, `number` and `bigint` representations.\n */\nclass PbULong extends SharedPbLong {\n    /**\n     * Create instance from a `string`, `number` or `bigint`.\n     */\n    static from(value) {\n        if (BI)\n            // noinspection FallThroughInSwitchStatementJS\n            switch (typeof value) {\n                case \"string\":\n                    if (value == \"0\")\n                        return this.ZERO;\n                    if (value == \"\")\n                        throw new Error('string is no integer');\n                    value = BI.C(value);\n                case \"number\":\n                    if (value === 0)\n                        return this.ZERO;\n                    value = BI.C(value);\n                case \"bigint\":\n                    if (!value)\n                        return this.ZERO;\n                    if (value < BI.UMIN)\n                        throw new Error('signed value for ulong');\n                    if (value > BI.UMAX)\n                        throw new Error('ulong too large');\n                    BI.V.setBigUint64(0, value, true);\n                    return new PbULong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));\n            }\n        else\n            switch (typeof value) {\n                case \"string\":\n                    if (value == \"0\")\n                        return this.ZERO;\n                    value = value.trim();\n                    if (!RE_DECIMAL_STR.test(value))\n                        throw new Error('string is no integer');\n                    let [minus, lo, hi] = goog_varint_1.int64fromString(value);\n                    if (minus)\n                        throw new Error('signed value for ulong');\n                    return new PbULong(lo, hi);\n                case \"number\":\n                    if (value == 0)\n                        return this.ZERO;\n                    if (!Number.isSafeInteger(value))\n                        throw new Error('number is no integer');\n                    if (value < 0)\n                        throw new Error('signed value for ulong');\n                    return new PbULong(value, value / TWO_PWR_32_DBL);\n            }\n        throw new Error('unknown value ' + typeof value);\n    }\n    /**\n     * Convert to decimal string.\n     */\n    toString() {\n        return BI ? this.toBigInt().toString() : goog_varint_1.int64toString(this.lo, this.hi);\n    }\n    /**\n     * Convert to native bigint.\n     */\n    toBigInt() {\n        assertBi(BI);\n        BI.V.setInt32(0, this.lo, true);\n        BI.V.setInt32(4, this.hi, true);\n        return BI.V.getBigUint64(0, true);\n    }\n}\nexports.PbULong = PbULong;\n/**\n * ulong 0 singleton.\n */\nPbULong.ZERO = new PbULong(0, 0);\n/**\n * 64-bit signed integer as two 32-bit values.\n * Converts between `string`, `number` and `bigint` representations.\n */\nclass PbLong extends SharedPbLong {\n    /**\n     * Create instance from a `string`, `number` or `bigint`.\n     */\n    static from(value) {\n        if (BI)\n            // noinspection FallThroughInSwitchStatementJS\n            switch (typeof value) {\n                case \"string\":\n                    if (value == \"0\")\n                        return this.ZERO;\n                    if (value == \"\")\n                        throw new Error('string is no integer');\n                    value = BI.C(value);\n                case \"number\":\n                    if (value === 0)\n                        return this.ZERO;\n                    value = BI.C(value);\n                case \"bigint\":\n                    if (!value)\n                        return this.ZERO;\n                    if (value < BI.MIN)\n                        throw new Error('signed long too small');\n                    if (value > BI.MAX)\n                        throw new Error('signed long too large');\n                    BI.V.setBigInt64(0, value, true);\n                    return new PbLong(BI.V.getInt32(0, true), BI.V.getInt32(4, true));\n            }\n        else\n            switch (typeof value) {\n                case \"string\":\n                    if (value == \"0\")\n                        return this.ZERO;\n                    value = value.trim();\n                    if (!RE_DECIMAL_STR.test(value))\n                        throw new Error('string is no integer');\n                    let [minus, lo, hi] = goog_varint_1.int64fromString(value);\n                    if (minus) {\n                        if (hi > HALF_2_PWR_32 || (hi == HALF_2_PWR_32 && lo != 0))\n                            throw new Error('signed long too small');\n                    }\n                    else if (hi >= HALF_2_PWR_32)\n                        throw new Error('signed long too large');\n                    let pbl = new PbLong(lo, hi);\n                    return minus ? pbl.negate() : pbl;\n                case \"number\":\n                    if (value == 0)\n                        return this.ZERO;\n                    if (!Number.isSafeInteger(value))\n                        throw new Error('number is no integer');\n                    return value > 0\n                        ? new PbLong(value, value / TWO_PWR_32_DBL)\n                        : new PbLong(-value, -value / TWO_PWR_32_DBL).negate();\n            }\n        throw new Error('unknown value ' + typeof value);\n    }\n    /**\n     * Do we have a minus sign?\n     */\n    isNegative() {\n        return (this.hi & HALF_2_PWR_32) !== 0;\n    }\n    /**\n     * Negate two's complement.\n     * Invert all the bits and add one to the result.\n     */\n    negate() {\n        let hi = ~this.hi, lo = this.lo;\n        if (lo)\n            lo = ~lo + 1;\n        else\n            hi += 1;\n        return new PbLong(lo, hi);\n    }\n    /**\n     * Convert to decimal string.\n     */\n    toString() {\n        if (BI)\n            return this.toBigInt().toString();\n        if (this.isNegative()) {\n            let n = this.negate();\n            return '-' + goog_varint_1.int64toString(n.lo, n.hi);\n        }\n        return goog_varint_1.int64toString(this.lo, this.hi);\n    }\n    /**\n     * Convert to native bigint.\n     */\n    toBigInt() {\n        assertBi(BI);\n        BI.V.setInt32(0, this.lo, true);\n        BI.V.setInt32(4, this.hi, true);\n        return BI.V.getBigInt64(0, true);\n    }\n}\nexports.PbLong = PbLong;\n/**\n * long 0 singleton.\n */\nPbLong.ZERO = new PbLong(0, 0);\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BinaryReader = exports.binaryReadOptions = void 0;\nconst binary_format_contract_1 = require(\"./binary-format-contract\");\nconst pb_long_1 = require(\"./pb-long\");\nconst goog_varint_1 = require(\"./goog-varint\");\nconst defaultsRead = {\n    readUnknownField: true,\n    readerFactory: bytes => new BinaryReader(bytes),\n};\n/**\n * Make options for reading binary data form partial options.\n */\nfunction binaryReadOptions(options) {\n    return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;\n}\nexports.binaryReadOptions = binaryReadOptions;\nclass BinaryReader {\n    constructor(buf, textDecoder) {\n        this.varint64 = goog_varint_1.varint64read; // dirty cast for `this`\n        /**\n         * Read a `uint32` field, an unsigned 32 bit varint.\n         */\n        this.uint32 = goog_varint_1.varint32read; // dirty cast for `this` and access to protected `buf`\n        this.buf = buf;\n        this.len = buf.length;\n        this.pos = 0;\n        this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n        this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder(\"utf-8\", {\n            fatal: true,\n            ignoreBOM: true,\n        });\n    }\n    /**\n     * Reads a tag - field number and wire type.\n     */\n    tag() {\n        let tag = this.uint32(), fieldNo = tag >>> 3, wireType = tag & 7;\n        if (fieldNo <= 0 || wireType < 0 || wireType > 5)\n            throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n        return [fieldNo, wireType];\n    }\n    /**\n     * Skip one element on the wire and return the skipped data.\n     * Supports WireType.StartGroup since v2.0.0-alpha.23.\n     */\n    skip(wireType) {\n        let start = this.pos;\n        // noinspection FallThroughInSwitchStatementJS\n        switch (wireType) {\n            case binary_format_contract_1.WireType.Varint:\n                while (this.buf[this.pos++] & 0x80) {\n                    // ignore\n                }\n                break;\n            case binary_format_contract_1.WireType.Bit64:\n                this.pos += 4;\n            case binary_format_contract_1.WireType.Bit32:\n                this.pos += 4;\n                break;\n            case binary_format_contract_1.WireType.LengthDelimited:\n                let len = this.uint32();\n                this.pos += len;\n                break;\n            case binary_format_contract_1.WireType.StartGroup:\n                // From descriptor.proto: Group type is deprecated, not supported in proto3.\n                // But we must still be able to parse and treat as unknown.\n                let t;\n                while ((t = this.tag()[1]) !== binary_format_contract_1.WireType.EndGroup) {\n                    this.skip(t);\n                }\n                break;\n            default:\n                throw new Error(\"cant skip wire type \" + wireType);\n        }\n        this.assertBounds();\n        return this.buf.subarray(start, this.pos);\n    }\n    /**\n     * Throws error if position in byte array is out of range.\n     */\n    assertBounds() {\n        if (this.pos > this.len)\n            throw new RangeError(\"premature EOF\");\n    }\n    /**\n     * Read a `int32` field, a signed 32 bit varint.\n     */\n    int32() {\n        return this.uint32() | 0;\n    }\n    /**\n     * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32() {\n        let zze = this.uint32();\n        // decode zigzag\n        return (zze >>> 1) ^ -(zze & 1);\n    }\n    /**\n     * Read a `int64` field, a signed 64-bit varint.\n     */\n    int64() {\n        return new pb_long_1.PbLong(...this.varint64());\n    }\n    /**\n     * Read a `uint64` field, an unsigned 64-bit varint.\n     */\n    uint64() {\n        return new pb_long_1.PbULong(...this.varint64());\n    }\n    /**\n     * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64() {\n        let [lo, hi] = this.varint64();\n        // decode zig zag\n        let s = -(lo & 1);\n        lo = ((lo >>> 1 | (hi & 1) << 31) ^ s);\n        hi = (hi >>> 1 ^ s);\n        return new pb_long_1.PbLong(lo, hi);\n    }\n    /**\n     * Read a `bool` field, a variant.\n     */\n    bool() {\n        let [lo, hi] = this.varint64();\n        return lo !== 0 || hi !== 0;\n    }\n    /**\n     * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32() {\n        return this.view.getUint32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32() {\n        return this.view.getInt32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64() {\n        return new pb_long_1.PbULong(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64() {\n        return new pb_long_1.PbLong(this.sfixed32(), this.sfixed32());\n    }\n    /**\n     * Read a `float` field, 32-bit floating point number.\n     */\n    float() {\n        return this.view.getFloat32((this.pos += 4) - 4, true);\n    }\n    /**\n     * Read a `double` field, a 64-bit floating point number.\n     */\n    double() {\n        return this.view.getFloat64((this.pos += 8) - 8, true);\n    }\n    /**\n     * Read a `bytes` field, length-delimited arbitrary data.\n     */\n    bytes() {\n        let len = this.uint32();\n        let start = this.pos;\n        this.pos += len;\n        this.assertBounds();\n        return this.buf.subarray(start, start + len);\n    }\n    /**\n     * Read a `string` field, length-delimited data converted to UTF-8 text.\n     */\n    string() {\n        return this.textDecoder.decode(this.bytes());\n    }\n}\nexports.BinaryReader = BinaryReader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assertFloat32 = exports.assertUInt32 = exports.assertInt32 = exports.assertNever = exports.assert = void 0;\n/**\n * assert that condition is true or throw error (with message)\n */\nfunction assert(condition, msg) {\n    if (!condition) {\n        throw new Error(msg);\n    }\n}\nexports.assert = assert;\n/**\n * assert that value cannot exist = type `never`. throw runtime error if it does.\n */\nfunction assertNever(value, msg) {\n    throw new Error(msg !== null && msg !== void 0 ? msg : 'Unexpected object: ' + value);\n}\nexports.assertNever = assertNever;\nconst FLOAT32_MAX = 3.4028234663852886e+38, FLOAT32_MIN = -3.4028234663852886e+38, UINT32_MAX = 0xFFFFFFFF, INT32_MAX = 0X7FFFFFFF, INT32_MIN = -0X80000000;\nfunction assertInt32(arg) {\n    if (typeof arg !== \"number\")\n        throw new Error('invalid int 32: ' + typeof arg);\n    if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN)\n        throw new Error('invalid int 32: ' + arg);\n}\nexports.assertInt32 = assertInt32;\nfunction assertUInt32(arg) {\n    if (typeof arg !== \"number\")\n        throw new Error('invalid uint 32: ' + typeof arg);\n    if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0)\n        throw new Error('invalid uint 32: ' + arg);\n}\nexports.assertUInt32 = assertUInt32;\nfunction assertFloat32(arg) {\n    if (typeof arg !== \"number\")\n        throw new Error('invalid float 32: ' + typeof arg);\n    if (!Number.isFinite(arg))\n        return;\n    if (arg > FLOAT32_MAX || arg < FLOAT32_MIN)\n        throw new Error('invalid float 32: ' + arg);\n}\nexports.assertFloat32 = assertFloat32;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BinaryWriter = exports.binaryWriteOptions = void 0;\nconst pb_long_1 = require(\"./pb-long\");\nconst goog_varint_1 = require(\"./goog-varint\");\nconst assert_1 = require(\"./assert\");\nconst defaultsWrite = {\n    writeUnknownFields: true,\n    writerFactory: () => new BinaryWriter(),\n};\n/**\n * Make options for writing binary data form partial options.\n */\nfunction binaryWriteOptions(options) {\n    return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;\n}\nexports.binaryWriteOptions = binaryWriteOptions;\nclass BinaryWriter {\n    constructor(textEncoder) {\n        /**\n         * Previous fork states.\n         */\n        this.stack = [];\n        this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();\n        this.chunks = [];\n        this.buf = [];\n    }\n    /**\n     * Return all bytes written and reset this writer.\n     */\n    finish() {\n        this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n        let len = 0;\n        for (let i = 0; i < this.chunks.length; i++)\n            len += this.chunks[i].length;\n        let bytes = new Uint8Array(len);\n        let offset = 0;\n        for (let i = 0; i < this.chunks.length; i++) {\n            bytes.set(this.chunks[i], offset);\n            offset += this.chunks[i].length;\n        }\n        this.chunks = [];\n        return bytes;\n    }\n    /**\n     * Start a new fork for length-delimited data like a message\n     * or a packed repeated field.\n     *\n     * Must be joined later with `join()`.\n     */\n    fork() {\n        this.stack.push({ chunks: this.chunks, buf: this.buf });\n        this.chunks = [];\n        this.buf = [];\n        return this;\n    }\n    /**\n     * Join the last fork. Write its length and bytes, then\n     * return to the previous state.\n     */\n    join() {\n        // get chunk of fork\n        let chunk = this.finish();\n        // restore previous state\n        let prev = this.stack.pop();\n        if (!prev)\n            throw new Error('invalid state, fork stack empty');\n        this.chunks = prev.chunks;\n        this.buf = prev.buf;\n        // write length of chunk as varint\n        this.uint32(chunk.byteLength);\n        return this.raw(chunk);\n    }\n    /**\n     * Writes a tag (field number and wire type).\n     *\n     * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n     *\n     * Generated code should compute the tag ahead of time and call `uint32()`.\n     */\n    tag(fieldNo, type) {\n        return this.uint32((fieldNo << 3 | type) >>> 0);\n    }\n    /**\n     * Write a chunk of raw bytes.\n     */\n    raw(chunk) {\n        if (this.buf.length) {\n            this.chunks.push(new Uint8Array(this.buf));\n            this.buf = [];\n        }\n        this.chunks.push(chunk);\n        return this;\n    }\n    /**\n     * Write a `uint32` value, an unsigned 32 bit varint.\n     */\n    uint32(value) {\n        assert_1.assertUInt32(value);\n        // write value as varint 32, inlined for speed\n        while (value > 0x7f) {\n            this.buf.push((value & 0x7f) | 0x80);\n            value = value >>> 7;\n        }\n        this.buf.push(value);\n        return this;\n    }\n    /**\n     * Write a `int32` value, a signed 32 bit varint.\n     */\n    int32(value) {\n        assert_1.assertInt32(value);\n        goog_varint_1.varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `bool` value, a variant.\n     */\n    bool(value) {\n        this.buf.push(value ? 1 : 0);\n        return this;\n    }\n    /**\n     * Write a `bytes` value, length-delimited arbitrary data.\n     */\n    bytes(value) {\n        this.uint32(value.byteLength); // write length of chunk as varint\n        return this.raw(value);\n    }\n    /**\n     * Write a `string` value, length-delimited data converted to UTF-8 text.\n     */\n    string(value) {\n        let chunk = this.textEncoder.encode(value);\n        this.uint32(chunk.byteLength); // write length of chunk as varint\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `float` value, 32-bit floating point number.\n     */\n    float(value) {\n        assert_1.assertFloat32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setFloat32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `double` value, a 64-bit floating point number.\n     */\n    double(value) {\n        let chunk = new Uint8Array(8);\n        new DataView(chunk.buffer).setFloat64(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n     */\n    fixed32(value) {\n        assert_1.assertUInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setUint32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n     */\n    sfixed32(value) {\n        assert_1.assertInt32(value);\n        let chunk = new Uint8Array(4);\n        new DataView(chunk.buffer).setInt32(0, value, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n     */\n    sint32(value) {\n        assert_1.assertInt32(value);\n        // zigzag encode\n        value = ((value << 1) ^ (value >> 31)) >>> 0;\n        goog_varint_1.varint32write(value, this.buf);\n        return this;\n    }\n    /**\n     * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n     */\n    sfixed64(value) {\n        let chunk = new Uint8Array(8);\n        let view = new DataView(chunk.buffer);\n        let long = pb_long_1.PbLong.from(value);\n        view.setInt32(0, long.lo, true);\n        view.setInt32(4, long.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n     */\n    fixed64(value) {\n        let chunk = new Uint8Array(8);\n        let view = new DataView(chunk.buffer);\n        let long = pb_long_1.PbULong.from(value);\n        view.setInt32(0, long.lo, true);\n        view.setInt32(4, long.hi, true);\n        return this.raw(chunk);\n    }\n    /**\n     * Write a `int64` value, a signed 64-bit varint.\n     */\n    int64(value) {\n        let long = pb_long_1.PbLong.from(value);\n        goog_varint_1.varint64write(long.lo, long.hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n     */\n    sint64(value) {\n        let long = pb_long_1.PbLong.from(value), \n        // zigzag encode\n        sign = long.hi >> 31, lo = (long.lo << 1) ^ sign, hi = ((long.hi << 1) | (long.lo >>> 31)) ^ sign;\n        goog_varint_1.varint64write(lo, hi, this.buf);\n        return this;\n    }\n    /**\n     * Write a `uint64` value, an unsigned 64-bit varint.\n     */\n    uint64(value) {\n        let long = pb_long_1.PbULong.from(value);\n        goog_varint_1.varint64write(long.lo, long.hi, this.buf);\n        return this;\n    }\n}\nexports.BinaryWriter = BinaryWriter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.mergeJsonOptions = exports.jsonWriteOptions = exports.jsonReadOptions = void 0;\nconst defaultsWrite = {\n    emitDefaultValues: false,\n    enumAsInteger: false,\n    useProtoFieldName: false,\n    prettySpaces: 0,\n}, defaultsRead = {\n    ignoreUnknownFields: false,\n};\n/**\n * Make options for reading JSON data from partial options.\n */\nfunction jsonReadOptions(options) {\n    return options ? Object.assign(Object.assign({}, defaultsRead), options) : defaultsRead;\n}\nexports.jsonReadOptions = jsonReadOptions;\n/**\n * Make options for writing JSON data from partial options.\n */\nfunction jsonWriteOptions(options) {\n    return options ? Object.assign(Object.assign({}, defaultsWrite), options) : defaultsWrite;\n}\nexports.jsonWriteOptions = jsonWriteOptions;\n/**\n * Merges JSON write or read options. Later values override earlier values. Type registries are merged.\n */\nfunction mergeJsonOptions(a, b) {\n    var _a, _b;\n    let c = Object.assign(Object.assign({}, a), b);\n    c.typeRegistry = [...((_a = a === null || a === void 0 ? void 0 : a.typeRegistry) !== null && _a !== void 0 ? _a : []), ...((_b = b === null || b === void 0 ? void 0 : b.typeRegistry) !== null && _b !== void 0 ? _b : [])];\n    return c;\n}\nexports.mergeJsonOptions = mergeJsonOptions;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MESSAGE_TYPE = void 0;\n/**\n * The symbol used as a key on message objects to store the message type.\n *\n * Note that this is an experimental feature - it is here to stay, but\n * implementation details may change without notice.\n */\nexports.MESSAGE_TYPE = Symbol.for(\"protobuf-ts/message-type\");\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.lowerCamelCase = void 0;\n/**\n * Converts snake_case to lowerCamelCase.\n *\n * Should behave like protoc:\n * https://github.com/protocolbuffers/protobuf/blob/e8ae137c96444ea313485ed1118c5e43b2099cf1/src/google/protobuf/compiler/java/java_helpers.cc#L118\n */\nfunction lowerCamelCase(snakeCase) {\n    let capNext = false;\n    const sb = [];\n    for (let i = 0; i < snakeCase.length; i++) {\n        let next = snakeCase.charAt(i);\n        if (next == '_') {\n            capNext = true;\n        }\n        else if (/\\d/.test(next)) {\n            sb.push(next);\n            capNext = true;\n        }\n        else if (capNext) {\n            sb.push(next.toUpperCase());\n            capNext = false;\n        }\n        else if (i == 0) {\n            sb.push(next.toLowerCase());\n        }\n        else {\n            sb.push(next);\n        }\n    }\n    return sb.join('');\n}\nexports.lowerCamelCase = lowerCamelCase;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readMessageOption = exports.readFieldOption = exports.readFieldOptions = exports.normalizeFieldInfo = exports.RepeatType = exports.LongType = exports.ScalarType = void 0;\nconst lower_camel_case_1 = require(\"./lower-camel-case\");\n/**\n * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nvar ScalarType;\n(function (ScalarType) {\n    // 0 is reserved for errors.\n    // Order is weird for historical reasons.\n    ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n    ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if\n    // negative values are likely.\n    ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n    ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if\n    // negative values are likely.\n    ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n    ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n    ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n    ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n    ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n    // Tag-delimited aggregate.\n    // Group type is deprecated and not supported in proto3. However, Proto3\n    // implementations should still be able to parse the group wire format and\n    // treat group fields as unknown fields.\n    // TYPE_GROUP = 10,\n    // TYPE_MESSAGE = 11,  // Length-delimited aggregate.\n    // New in version 2.\n    ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n    ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n    // TYPE_ENUM = 14,\n    ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n    ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n    ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n    ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType = exports.ScalarType || (exports.ScalarType = {}));\n/**\n * JavaScript representation of 64 bit integral types. Equivalent to the\n * field option \"jstype\".\n *\n * By default, protobuf-ts represents 64 bit types as `bigint`.\n *\n * You can change the default behaviour by enabling the plugin parameter\n * `long_type_string`, which will represent 64 bit types as `string`.\n *\n * Alternatively, you can change the behaviour for individual fields\n * with the field option \"jstype\":\n *\n * ```protobuf\n * uint64 my_field = 1 [jstype = JS_STRING];\n * uint64 other_field = 2 [jstype = JS_NUMBER];\n * ```\n */\nvar LongType;\n(function (LongType) {\n    /**\n     * Use JavaScript `bigint`.\n     *\n     * Field option `[jstype = JS_NORMAL]`.\n     */\n    LongType[LongType[\"BIGINT\"] = 0] = \"BIGINT\";\n    /**\n     * Use JavaScript `string`.\n     *\n     * Field option `[jstype = JS_STRING]`.\n     */\n    LongType[LongType[\"STRING\"] = 1] = \"STRING\";\n    /**\n     * Use JavaScript `number`.\n     *\n     * Large values will loose precision.\n     *\n     * Field option `[jstype = JS_NUMBER]`.\n     */\n    LongType[LongType[\"NUMBER\"] = 2] = \"NUMBER\";\n})(LongType = exports.LongType || (exports.LongType = {}));\n/**\n * Protobuf 2.1.0 introduced packed repeated fields.\n * Setting the field option `[packed = true]` enables packing.\n *\n * In proto3, all repeated fields are packed by default.\n * Setting the field option `[packed = false]` disables packing.\n *\n * Packed repeated fields are encoded with a single tag,\n * then a length-delimiter, then the element values.\n *\n * Unpacked repeated fields are encoded with a tag and\n * value for each element.\n *\n * `bytes` and `string` cannot be packed.\n */\nvar RepeatType;\n(function (RepeatType) {\n    /**\n     * The field is not repeated.\n     */\n    RepeatType[RepeatType[\"NO\"] = 0] = \"NO\";\n    /**\n     * The field is repeated and should be packed.\n     * Invalid for `bytes` and `string`, they cannot be packed.\n     */\n    RepeatType[RepeatType[\"PACKED\"] = 1] = \"PACKED\";\n    /**\n     * The field is repeated but should not be packed.\n     * The only valid repeat type for repeated `bytes` and `string`.\n     */\n    RepeatType[RepeatType[\"UNPACKED\"] = 2] = \"UNPACKED\";\n})(RepeatType = exports.RepeatType || (exports.RepeatType = {}));\n/**\n * Turns PartialFieldInfo into FieldInfo.\n */\nfunction normalizeFieldInfo(field) {\n    var _a, _b, _c, _d;\n    field.localName = (_a = field.localName) !== null && _a !== void 0 ? _a : lower_camel_case_1.lowerCamelCase(field.name);\n    field.jsonName = (_b = field.jsonName) !== null && _b !== void 0 ? _b : lower_camel_case_1.lowerCamelCase(field.name);\n    field.repeat = (_c = field.repeat) !== null && _c !== void 0 ? _c : RepeatType.NO;\n    field.opt = (_d = field.opt) !== null && _d !== void 0 ? _d : (field.repeat ? false : field.oneof ? false : field.kind == \"message\");\n    return field;\n}\nexports.normalizeFieldInfo = normalizeFieldInfo;\n/**\n * Read custom field options from a generated message type.\n *\n * @deprecated use readFieldOption()\n */\nfunction readFieldOptions(messageType, fieldName, extensionName, extensionType) {\n    var _a;\n    const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;\n    return options && options[extensionName] ? extensionType.fromJson(options[extensionName]) : undefined;\n}\nexports.readFieldOptions = readFieldOptions;\nfunction readFieldOption(messageType, fieldName, extensionName, extensionType) {\n    var _a;\n    const options = (_a = messageType.fields.find((m, i) => m.localName == fieldName || i == fieldName)) === null || _a === void 0 ? void 0 : _a.options;\n    if (!options) {\n        return undefined;\n    }\n    const optionVal = options[extensionName];\n    if (optionVal === undefined) {\n        return optionVal;\n    }\n    return extensionType ? extensionType.fromJson(optionVal) : optionVal;\n}\nexports.readFieldOption = readFieldOption;\nfunction readMessageOption(messageType, extensionName, extensionType) {\n    const options = messageType.options;\n    const optionVal = options[extensionName];\n    if (optionVal === undefined) {\n        return optionVal;\n    }\n    return extensionType ? extensionType.fromJson(optionVal) : optionVal;\n}\nexports.readMessageOption = readMessageOption;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getSelectedOneofValue = exports.clearOneofValue = exports.setUnknownOneofValue = exports.setOneofValue = exports.getOneofValue = exports.isOneofGroup = void 0;\n/**\n * Is the given value a valid oneof group?\n *\n * We represent protobuf `oneof` as algebraic data types (ADT) in generated\n * code. But when working with messages of unknown type, the ADT does not\n * help us.\n *\n * This type guard checks if the given object adheres to the ADT rules, which\n * are as follows:\n *\n * 1) Must be an object.\n *\n * 2) Must have a \"oneofKind\" discriminator property.\n *\n * 3) If \"oneofKind\" is `undefined`, no member field is selected. The object\n * must not have any other properties.\n *\n * 4) If \"oneofKind\" is a `string`, the member field with this name is\n * selected.\n *\n * 5) If a member field is selected, the object must have a second property\n * with this name. The property must not be `undefined`.\n *\n * 6) No extra properties are allowed. The object has either one property\n * (no selection) or two properties (selection).\n *\n */\nfunction isOneofGroup(any) {\n    if (typeof any != 'object' || any === null || !any.hasOwnProperty('oneofKind')) {\n        return false;\n    }\n    switch (typeof any.oneofKind) {\n        case \"string\":\n            if (any[any.oneofKind] === undefined)\n                return false;\n            return Object.keys(any).length == 2;\n        case \"undefined\":\n            return Object.keys(any).length == 1;\n        default:\n            return false;\n    }\n}\nexports.isOneofGroup = isOneofGroup;\n/**\n * Returns the value of the given field in a oneof group.\n */\nfunction getOneofValue(oneof, kind) {\n    return oneof[kind];\n}\nexports.getOneofValue = getOneofValue;\nfunction setOneofValue(oneof, kind, value) {\n    if (oneof.oneofKind !== undefined) {\n        delete oneof[oneof.oneofKind];\n    }\n    oneof.oneofKind = kind;\n    if (value !== undefined) {\n        oneof[kind] = value;\n    }\n}\nexports.setOneofValue = setOneofValue;\nfunction setUnknownOneofValue(oneof, kind, value) {\n    if (oneof.oneofKind !== undefined) {\n        delete oneof[oneof.oneofKind];\n    }\n    oneof.oneofKind = kind;\n    if (value !== undefined && kind !== undefined) {\n        oneof[kind] = value;\n    }\n}\nexports.setUnknownOneofValue = setUnknownOneofValue;\n/**\n * Removes the selected field in a oneof group.\n *\n * Note that the recommended way to modify a oneof group is to set\n * a new object:\n *\n * ```ts\n * message.result = { oneofKind: undefined };\n * ```\n */\nfunction clearOneofValue(oneof) {\n    if (oneof.oneofKind !== undefined) {\n        delete oneof[oneof.oneofKind];\n    }\n    oneof.oneofKind = undefined;\n}\nexports.clearOneofValue = clearOneofValue;\n/**\n * Returns the selected value of the given oneof group.\n *\n * Not that the recommended way to access a oneof group is to check\n * the \"oneofKind\" property and let TypeScript narrow down the union\n * type for you:\n *\n * ```ts\n * if (message.result.oneofKind === \"error\") {\n *   message.result.error; // string\n * }\n * ```\n *\n * In the rare case you just need the value, and do not care about\n * which protobuf field is selected, you can use this function\n * for convenience.\n */\nfunction getSelectedOneofValue(oneof) {\n    if (oneof.oneofKind === undefined) {\n        return undefined;\n    }\n    return oneof[oneof.oneofKind];\n}\nexports.getSelectedOneofValue = getSelectedOneofValue;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReflectionTypeCheck = void 0;\nconst reflection_info_1 = require(\"./reflection-info\");\nconst oneof_1 = require(\"./oneof\");\n// noinspection JSMethodCanBeStatic\nclass ReflectionTypeCheck {\n    constructor(info) {\n        var _a;\n        this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];\n    }\n    prepare() {\n        if (this.data)\n            return;\n        const req = [], known = [], oneofs = [];\n        for (let field of this.fields) {\n            if (field.oneof) {\n                if (!oneofs.includes(field.oneof)) {\n                    oneofs.push(field.oneof);\n                    req.push(field.oneof);\n                    known.push(field.oneof);\n                }\n            }\n            else {\n                known.push(field.localName);\n                switch (field.kind) {\n                    case \"scalar\":\n                    case \"enum\":\n                        if (!field.opt || field.repeat)\n                            req.push(field.localName);\n                        break;\n                    case \"message\":\n                        if (field.repeat)\n                            req.push(field.localName);\n                        break;\n                    case \"map\":\n                        req.push(field.localName);\n                        break;\n                }\n            }\n        }\n        this.data = { req, known, oneofs: Object.values(oneofs) };\n    }\n    /**\n     * Is the argument a valid message as specified by the\n     * reflection information?\n     *\n     * Checks all field types recursively. The `depth`\n     * specifies how deep into the structure the check will be.\n     *\n     * With a depth of 0, only the presence of fields\n     * is checked.\n     *\n     * With a depth of 1 or more, the field types are checked.\n     *\n     * With a depth of 2 or more, the members of map, repeated\n     * and message fields are checked.\n     *\n     * Message fields will be checked recursively with depth - 1.\n     *\n     * The number of map entries / repeated values being checked\n     * is < depth.\n     */\n    is(message, depth, allowExcessProperties = false) {\n        if (depth < 0)\n            return true;\n        if (message === null || message === undefined || typeof message != 'object')\n            return false;\n        this.prepare();\n        let keys = Object.keys(message), data = this.data;\n        // if a required field is missing in arg, this cannot be a T\n        if (keys.length < data.req.length || data.req.some(n => !keys.includes(n)))\n            return false;\n        if (!allowExcessProperties) {\n            // if the arg contains a key we dont know, this is not a literal T\n            if (keys.some(k => !data.known.includes(k)))\n                return false;\n        }\n        // \"With a depth of 0, only the presence and absence of fields is checked.\"\n        // \"With a depth of 1 or more, the field types are checked.\"\n        if (depth < 1) {\n            return true;\n        }\n        // check oneof group\n        for (const name of data.oneofs) {\n            const group = message[name];\n            if (!oneof_1.isOneofGroup(group))\n                return false;\n            if (group.oneofKind === undefined)\n                continue;\n            const field = this.fields.find(f => f.localName === group.oneofKind);\n            if (!field)\n                return false; // we found no field, but have a kind, something is wrong\n            if (!this.field(group[group.oneofKind], field, allowExcessProperties, depth))\n                return false;\n        }\n        // check types\n        for (const field of this.fields) {\n            if (field.oneof !== undefined)\n                continue;\n            if (!this.field(message[field.localName], field, allowExcessProperties, depth))\n                return false;\n        }\n        return true;\n    }\n    field(arg, field, allowExcessProperties, depth) {\n        let repeated = field.repeat;\n        switch (field.kind) {\n            case \"scalar\":\n                if (arg === undefined)\n                    return field.opt;\n                if (repeated)\n                    return this.scalars(arg, field.T, depth, field.L);\n                return this.scalar(arg, field.T, field.L);\n            case \"enum\":\n                if (arg === undefined)\n                    return field.opt;\n                if (repeated)\n                    return this.scalars(arg, reflection_info_1.ScalarType.INT32, depth);\n                return this.scalar(arg, reflection_info_1.ScalarType.INT32);\n            case \"message\":\n                if (arg === undefined)\n                    return true;\n                if (repeated)\n                    return this.messages(arg, field.T(), allowExcessProperties, depth);\n                return this.message(arg, field.T(), allowExcessProperties, depth);\n            case \"map\":\n                if (typeof arg != 'object' || arg === null)\n                    return false;\n                if (depth < 2)\n                    return true;\n                if (!this.mapKeys(arg, field.K, depth))\n                    return false;\n                switch (field.V.kind) {\n                    case \"scalar\":\n                        return this.scalars(Object.values(arg), field.V.T, depth, field.V.L);\n                    case \"enum\":\n                        return this.scalars(Object.values(arg), reflection_info_1.ScalarType.INT32, depth);\n                    case \"message\":\n                        return this.messages(Object.values(arg), field.V.T(), allowExcessProperties, depth);\n                }\n                break;\n        }\n        return true;\n    }\n    message(arg, type, allowExcessProperties, depth) {\n        if (allowExcessProperties) {\n            return type.isAssignable(arg, depth);\n        }\n        return type.is(arg, depth);\n    }\n    messages(arg, type, allowExcessProperties, depth) {\n        if (!Array.isArray(arg))\n            return false;\n        if (depth < 2)\n            return true;\n        if (allowExcessProperties) {\n            for (let i = 0; i < arg.length && i < depth; i++)\n                if (!type.isAssignable(arg[i], depth - 1))\n                    return false;\n        }\n        else {\n            for (let i = 0; i < arg.length && i < depth; i++)\n                if (!type.is(arg[i], depth - 1))\n                    return false;\n        }\n        return true;\n    }\n    scalar(arg, type, longType) {\n        let argType = typeof arg;\n        switch (type) {\n            case reflection_info_1.ScalarType.UINT64:\n            case reflection_info_1.ScalarType.FIXED64:\n            case reflection_info_1.ScalarType.INT64:\n            case reflection_info_1.ScalarType.SFIXED64:\n            case reflection_info_1.ScalarType.SINT64:\n                switch (longType) {\n                    case reflection_info_1.LongType.BIGINT:\n                        return argType == \"bigint\";\n                    case reflection_info_1.LongType.NUMBER:\n                        return argType == \"number\" && !isNaN(arg);\n                    default:\n                        return argType == \"string\";\n                }\n            case reflection_info_1.ScalarType.BOOL:\n                return argType == 'boolean';\n            case reflection_info_1.ScalarType.STRING:\n                return argType == 'string';\n            case reflection_info_1.ScalarType.BYTES:\n                return arg instanceof Uint8Array;\n            case reflection_info_1.ScalarType.DOUBLE:\n            case reflection_info_1.ScalarType.FLOAT:\n                return argType == 'number' && !isNaN(arg);\n            default:\n                // case ScalarType.UINT32:\n                // case ScalarType.FIXED32:\n                // case ScalarType.INT32:\n                // case ScalarType.SINT32:\n                // case ScalarType.SFIXED32:\n                return argType == 'number' && Number.isInteger(arg);\n        }\n    }\n    scalars(arg, type, depth, longType) {\n        if (!Array.isArray(arg))\n            return false;\n        if (depth < 2)\n            return true;\n        if (Array.isArray(arg))\n            for (let i = 0; i < arg.length && i < depth; i++)\n                if (!this.scalar(arg[i], type, longType))\n                    return false;\n        return true;\n    }\n    mapKeys(map, type, depth) {\n        let keys = Object.keys(map);\n        switch (type) {\n            case reflection_info_1.ScalarType.INT32:\n            case reflection_info_1.ScalarType.FIXED32:\n            case reflection_info_1.ScalarType.SFIXED32:\n            case reflection_info_1.ScalarType.SINT32:\n            case reflection_info_1.ScalarType.UINT32:\n                return this.scalars(keys.slice(0, depth).map(k => parseInt(k)), type, depth);\n            case reflection_info_1.ScalarType.BOOL:\n                return this.scalars(keys.slice(0, depth).map(k => k == 'true' ? true : k == 'false' ? false : k), type, depth);\n            default:\n                return this.scalars(keys, type, depth, reflection_info_1.LongType.STRING);\n        }\n    }\n}\nexports.ReflectionTypeCheck = ReflectionTypeCheck;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reflectionLongConvert = void 0;\nconst reflection_info_1 = require(\"./reflection-info\");\n/**\n * Utility method to convert a PbLong or PbUlong to a JavaScript\n * representation during runtime.\n *\n * Works with generated field information, `undefined` is equivalent\n * to `STRING`.\n */\nfunction reflectionLongConvert(long, type) {\n    switch (type) {\n        case reflection_info_1.LongType.BIGINT:\n            return long.toBigInt();\n        case reflection_info_1.LongType.NUMBER:\n            return long.toNumber();\n        default:\n            // case undefined:\n            // case LongType.STRING:\n            return long.toString();\n    }\n}\nexports.reflectionLongConvert = reflectionLongConvert;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReflectionJsonReader = void 0;\nconst json_typings_1 = require(\"./json-typings\");\nconst base64_1 = require(\"./base64\");\nconst reflection_info_1 = require(\"./reflection-info\");\nconst pb_long_1 = require(\"./pb-long\");\nconst assert_1 = require(\"./assert\");\nconst reflection_long_convert_1 = require(\"./reflection-long-convert\");\n/**\n * Reads proto3 messages in canonical JSON format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/proto3#json\n */\nclass ReflectionJsonReader {\n    constructor(info) {\n        this.info = info;\n    }\n    prepare() {\n        var _a;\n        if (this.fMap === undefined) {\n            this.fMap = {};\n            const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];\n            for (const field of fieldsInput) {\n                this.fMap[field.name] = field;\n                this.fMap[field.jsonName] = field;\n                this.fMap[field.localName] = field;\n            }\n        }\n    }\n    // Cannot parse JSON <type of jsonValue> for <type name>#<fieldName>.\n    assert(condition, fieldName, jsonValue) {\n        if (!condition) {\n            let what = json_typings_1.typeofJsonValue(jsonValue);\n            if (what == \"number\" || what == \"boolean\")\n                what = jsonValue.toString();\n            throw new Error(`Cannot parse JSON ${what} for ${this.info.typeName}#${fieldName}`);\n        }\n    }\n    /**\n     * Reads a message from canonical JSON format into the target message.\n     *\n     * Repeated fields are appended. Map entries are added, overwriting\n     * existing keys.\n     *\n     * If a message field is already present, it will be merged with the\n     * new data.\n     */\n    read(input, message, options) {\n        this.prepare();\n        const oneofsHandled = [];\n        for (const [jsonKey, jsonValue] of Object.entries(input)) {\n            const field = this.fMap[jsonKey];\n            if (!field) {\n                if (!options.ignoreUnknownFields)\n                    throw new Error(`Found unknown field while reading ${this.info.typeName} from JSON format. JSON key: ${jsonKey}`);\n                continue;\n            }\n            const localName = field.localName;\n            // handle oneof ADT\n            let target; // this will be the target for the field value, whether it is member of a oneof or not\n            if (field.oneof) {\n                if (jsonValue === null && (field.kind !== 'enum' || field.T()[0] !== 'google.protobuf.NullValue')) {\n                    continue;\n                }\n                // since json objects are unordered by specification, it is not possible to take the last of multiple oneofs\n                if (oneofsHandled.includes(field.oneof))\n                    throw new Error(`Multiple members of the oneof group \"${field.oneof}\" of ${this.info.typeName} are present in JSON.`);\n                oneofsHandled.push(field.oneof);\n                target = message[field.oneof] = {\n                    oneofKind: localName\n                };\n            }\n            else {\n                target = message;\n            }\n            // we have handled oneof above. we just have read the value into `target`.\n            if (field.kind == 'map') {\n                if (jsonValue === null) {\n                    continue;\n                }\n                // check input\n                this.assert(json_typings_1.isJsonObject(jsonValue), field.name, jsonValue);\n                // our target to put map entries into\n                const fieldObj = target[localName];\n                // read entries\n                for (const [jsonObjKey, jsonObjValue] of Object.entries(jsonValue)) {\n                    this.assert(jsonObjValue !== null, field.name + \" map value\", null);\n                    // read value\n                    let val;\n                    switch (field.V.kind) {\n                        case \"message\":\n                            val = field.V.T().internalJsonRead(jsonObjValue, options);\n                            break;\n                        case \"enum\":\n                            val = this.enum(field.V.T(), jsonObjValue, field.name, options.ignoreUnknownFields);\n                            if (val === false)\n                                continue;\n                            break;\n                        case \"scalar\":\n                            val = this.scalar(jsonObjValue, field.V.T, field.V.L, field.name);\n                            break;\n                    }\n                    this.assert(val !== undefined, field.name + \" map value\", jsonObjValue);\n                    // read key\n                    let key = jsonObjKey;\n                    if (field.K == reflection_info_1.ScalarType.BOOL)\n                        key = key == \"true\" ? true : key == \"false\" ? false : key;\n                    key = this.scalar(key, field.K, reflection_info_1.LongType.STRING, field.name).toString();\n                    fieldObj[key] = val;\n                }\n            }\n            else if (field.repeat) {\n                if (jsonValue === null)\n                    continue;\n                // check input\n                this.assert(Array.isArray(jsonValue), field.name, jsonValue);\n                // our target to put array entries into\n                const fieldArr = target[localName];\n                // read array entries\n                for (const jsonItem of jsonValue) {\n                    this.assert(jsonItem !== null, field.name, null);\n                    let val;\n                    switch (field.kind) {\n                        case \"message\":\n                            val = field.T().internalJsonRead(jsonItem, options);\n                            break;\n                        case \"enum\":\n                            val = this.enum(field.T(), jsonItem, field.name, options.ignoreUnknownFields);\n                            if (val === false)\n                                continue;\n                            break;\n                        case \"scalar\":\n                            val = this.scalar(jsonItem, field.T, field.L, field.name);\n                            break;\n                    }\n                    this.assert(val !== undefined, field.name, jsonValue);\n                    fieldArr.push(val);\n                }\n            }\n            else {\n                switch (field.kind) {\n                    case \"message\":\n                        if (jsonValue === null && field.T().typeName != 'google.protobuf.Value') {\n                            this.assert(field.oneof === undefined, field.name + \" (oneof member)\", null);\n                            continue;\n                        }\n                        target[localName] = field.T().internalJsonRead(jsonValue, options, target[localName]);\n                        break;\n                    case \"enum\":\n                        if (jsonValue === null)\n                            continue;\n                        let val = this.enum(field.T(), jsonValue, field.name, options.ignoreUnknownFields);\n                        if (val === false)\n                            continue;\n                        target[localName] = val;\n                        break;\n                    case \"scalar\":\n                        if (jsonValue === null)\n                            continue;\n                        target[localName] = this.scalar(jsonValue, field.T, field.L, field.name);\n                        break;\n                }\n            }\n        }\n    }\n    /**\n     * Returns `false` for unrecognized string representations.\n     *\n     * google.protobuf.NullValue accepts only JSON `null` (or the old `\"NULL_VALUE\"`).\n     */\n    enum(type, json, fieldName, ignoreUnknownFields) {\n        if (type[0] == 'google.protobuf.NullValue')\n            assert_1.assert(json === null || json === \"NULL_VALUE\", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} only accepts null.`);\n        if (json === null)\n            // we require 0 to be default value for all enums\n            return 0;\n        switch (typeof json) {\n            case \"number\":\n                assert_1.assert(Number.isInteger(json), `Unable to parse field ${this.info.typeName}#${fieldName}, enum can only be integral number, got ${json}.`);\n                return json;\n            case \"string\":\n                let localEnumName = json;\n                if (type[2] && json.substring(0, type[2].length) === type[2])\n                    // lookup without the shared prefix\n                    localEnumName = json.substring(type[2].length);\n                let enumNumber = type[1][localEnumName];\n                if (typeof enumNumber === 'undefined' && ignoreUnknownFields) {\n                    return false;\n                }\n                assert_1.assert(typeof enumNumber == \"number\", `Unable to parse field ${this.info.typeName}#${fieldName}, enum ${type[0]} has no value for \"${json}\".`);\n                return enumNumber;\n        }\n        assert_1.assert(false, `Unable to parse field ${this.info.typeName}#${fieldName}, cannot parse enum value from ${typeof json}\".`);\n    }\n    scalar(json, type, longType, fieldName) {\n        let e;\n        try {\n            switch (type) {\n                // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n                // Either numbers or strings are accepted. Exponent notation is also accepted.\n                case reflection_info_1.ScalarType.DOUBLE:\n                case reflection_info_1.ScalarType.FLOAT:\n                    if (json === null)\n                        return .0;\n                    if (json === \"NaN\")\n                        return Number.NaN;\n                    if (json === \"Infinity\")\n                        return Number.POSITIVE_INFINITY;\n                    if (json === \"-Infinity\")\n                        return Number.NEGATIVE_INFINITY;\n                    if (json === \"\") {\n                        e = \"empty string\";\n                        break;\n                    }\n                    if (typeof json == \"string\" && json.trim().length !== json.length) {\n                        e = \"extra whitespace\";\n                        break;\n                    }\n                    if (typeof json != \"string\" && typeof json != \"number\") {\n                        break;\n                    }\n                    let float = Number(json);\n                    if (Number.isNaN(float)) {\n                        e = \"not a number\";\n                        break;\n                    }\n                    if (!Number.isFinite(float)) {\n                        // infinity and -infinity are handled by string representation above, so this is an error\n                        e = \"too large or small\";\n                        break;\n                    }\n                    if (type == reflection_info_1.ScalarType.FLOAT)\n                        assert_1.assertFloat32(float);\n                    return float;\n                // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n                case reflection_info_1.ScalarType.INT32:\n                case reflection_info_1.ScalarType.FIXED32:\n                case reflection_info_1.ScalarType.SFIXED32:\n                case reflection_info_1.ScalarType.SINT32:\n                case reflection_info_1.ScalarType.UINT32:\n                    if (json === null)\n                        return 0;\n                    let int32;\n                    if (typeof json == \"number\")\n                        int32 = json;\n                    else if (json === \"\")\n                        e = \"empty string\";\n                    else if (typeof json == \"string\") {\n                        if (json.trim().length !== json.length)\n                            e = \"extra whitespace\";\n                        else\n                            int32 = Number(json);\n                    }\n                    if (int32 === undefined)\n                        break;\n                    if (type == reflection_info_1.ScalarType.UINT32)\n                        assert_1.assertUInt32(int32);\n                    else\n                        assert_1.assertInt32(int32);\n                    return int32;\n                // int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.\n                case reflection_info_1.ScalarType.INT64:\n                case reflection_info_1.ScalarType.SFIXED64:\n                case reflection_info_1.ScalarType.SINT64:\n                    if (json === null)\n                        return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.ZERO, longType);\n                    if (typeof json != \"number\" && typeof json != \"string\")\n                        break;\n                    return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.from(json), longType);\n                case reflection_info_1.ScalarType.FIXED64:\n                case reflection_info_1.ScalarType.UINT64:\n                    if (json === null)\n                        return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.ZERO, longType);\n                    if (typeof json != \"number\" && typeof json != \"string\")\n                        break;\n                    return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.from(json), longType);\n                // bool:\n                case reflection_info_1.ScalarType.BOOL:\n                    if (json === null)\n                        return false;\n                    if (typeof json !== \"boolean\")\n                        break;\n                    return json;\n                // string:\n                case reflection_info_1.ScalarType.STRING:\n                    if (json === null)\n                        return \"\";\n                    if (typeof json !== \"string\") {\n                        e = \"extra whitespace\";\n                        break;\n                    }\n                    try {\n                        encodeURIComponent(json);\n                    }\n                    catch (e) {\n                        e = \"invalid UTF8\";\n                        break;\n                    }\n                    return json;\n                // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n                // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n                case reflection_info_1.ScalarType.BYTES:\n                    if (json === null || json === \"\")\n                        return new Uint8Array(0);\n                    if (typeof json !== 'string')\n                        break;\n                    return base64_1.base64decode(json);\n            }\n        }\n        catch (error) {\n            e = error.message;\n        }\n        this.assert(false, fieldName + (e ? \" - \" + e : \"\"), json);\n    }\n}\nexports.ReflectionJsonReader = ReflectionJsonReader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReflectionJsonWriter = void 0;\nconst base64_1 = require(\"./base64\");\nconst pb_long_1 = require(\"./pb-long\");\nconst reflection_info_1 = require(\"./reflection-info\");\nconst assert_1 = require(\"./assert\");\n/**\n * Writes proto3 messages in canonical JSON format using reflection\n * information.\n *\n * https://developers.google.com/protocol-buffers/docs/proto3#json\n */\nclass ReflectionJsonWriter {\n    constructor(info) {\n        var _a;\n        this.fields = (_a = info.fields) !== null && _a !== void 0 ? _a : [];\n    }\n    /**\n     * Converts the message to a JSON object, based on the field descriptors.\n     */\n    write(message, options) {\n        const json = {}, source = message;\n        for (const field of this.fields) {\n            // field is not part of a oneof, simply write as is\n            if (!field.oneof) {\n                let jsonValue = this.field(field, source[field.localName], options);\n                if (jsonValue !== undefined)\n                    json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n                continue;\n            }\n            // field is part of a oneof\n            const group = source[field.oneof];\n            if (group.oneofKind !== field.localName)\n                continue; // not selected, skip\n            const opt = field.kind == 'scalar' || field.kind == 'enum'\n                ? Object.assign(Object.assign({}, options), { emitDefaultValues: true }) : options;\n            let jsonValue = this.field(field, group[field.localName], opt);\n            assert_1.assert(jsonValue !== undefined);\n            json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n        }\n        return json;\n    }\n    field(field, value, options) {\n        let jsonValue = undefined;\n        if (field.kind == 'map') {\n            assert_1.assert(typeof value == \"object\" && value !== null);\n            const jsonObj = {};\n            switch (field.V.kind) {\n                case \"scalar\":\n                    for (const [entryKey, entryValue] of Object.entries(value)) {\n                        const val = this.scalar(field.V.T, entryValue, field.name, false, true);\n                        assert_1.assert(val !== undefined);\n                        jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n                    }\n                    break;\n                case \"message\":\n                    const messageType = field.V.T();\n                    for (const [entryKey, entryValue] of Object.entries(value)) {\n                        const val = this.message(messageType, entryValue, field.name, options);\n                        assert_1.assert(val !== undefined);\n                        jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n                    }\n                    break;\n                case \"enum\":\n                    const enumInfo = field.V.T();\n                    for (const [entryKey, entryValue] of Object.entries(value)) {\n                        assert_1.assert(entryValue === undefined || typeof entryValue == 'number');\n                        const val = this.enum(enumInfo, entryValue, field.name, false, true, options.enumAsInteger);\n                        assert_1.assert(val !== undefined);\n                        jsonObj[entryKey.toString()] = val; // JSON standard allows only (double quoted) string as property key\n                    }\n                    break;\n            }\n            if (options.emitDefaultValues || Object.keys(jsonObj).length > 0)\n                jsonValue = jsonObj;\n        }\n        else if (field.repeat) {\n            assert_1.assert(Array.isArray(value));\n            const jsonArr = [];\n            switch (field.kind) {\n                case \"scalar\":\n                    for (let i = 0; i < value.length; i++) {\n                        const val = this.scalar(field.T, value[i], field.name, field.opt, true);\n                        assert_1.assert(val !== undefined);\n                        jsonArr.push(val);\n                    }\n                    break;\n                case \"enum\":\n                    const enumInfo = field.T();\n                    for (let i = 0; i < value.length; i++) {\n                        assert_1.assert(value[i] === undefined || typeof value[i] == 'number');\n                        const val = this.enum(enumInfo, value[i], field.name, field.opt, true, options.enumAsInteger);\n                        assert_1.assert(val !== undefined);\n                        jsonArr.push(val);\n                    }\n                    break;\n                case \"message\":\n                    const messageType = field.T();\n                    for (let i = 0; i < value.length; i++) {\n                        const val = this.message(messageType, value[i], field.name, options);\n                        assert_1.assert(val !== undefined);\n                        jsonArr.push(val);\n                    }\n                    break;\n            }\n            // add converted array to json output\n            if (options.emitDefaultValues || jsonArr.length > 0 || options.emitDefaultValues)\n                jsonValue = jsonArr;\n        }\n        else {\n            switch (field.kind) {\n                case \"scalar\":\n                    jsonValue = this.scalar(field.T, value, field.name, field.opt, options.emitDefaultValues);\n                    break;\n                case \"enum\":\n                    jsonValue = this.enum(field.T(), value, field.name, field.opt, options.emitDefaultValues, options.enumAsInteger);\n                    break;\n                case \"message\":\n                    jsonValue = this.message(field.T(), value, field.name, options);\n                    break;\n            }\n        }\n        return jsonValue;\n    }\n    /**\n     * Returns `null` as the default for google.protobuf.NullValue.\n     */\n    enum(type, value, fieldName, optional, emitDefaultValues, enumAsInteger) {\n        if (type[0] == 'google.protobuf.NullValue')\n            return !emitDefaultValues && !optional ? undefined : null;\n        if (value === undefined) {\n            assert_1.assert(optional);\n            return undefined;\n        }\n        if (value === 0 && !emitDefaultValues && !optional)\n            // we require 0 to be default value for all enums\n            return undefined;\n        assert_1.assert(typeof value == 'number');\n        assert_1.assert(Number.isInteger(value));\n        if (enumAsInteger || !type[1].hasOwnProperty(value))\n            // if we don't now the enum value, just return the number\n            return value;\n        if (type[2])\n            // restore the dropped prefix\n            return type[2] + type[1][value];\n        return type[1][value];\n    }\n    message(type, value, fieldName, options) {\n        if (value === undefined)\n            return options.emitDefaultValues ? null : undefined;\n        return type.internalJsonWrite(value, options);\n    }\n    scalar(type, value, fieldName, optional, emitDefaultValues) {\n        if (value === undefined) {\n            assert_1.assert(optional);\n            return undefined;\n        }\n        const ed = emitDefaultValues || optional;\n        // noinspection FallThroughInSwitchStatementJS\n        switch (type) {\n            // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n            case reflection_info_1.ScalarType.INT32:\n            case reflection_info_1.ScalarType.SFIXED32:\n            case reflection_info_1.ScalarType.SINT32:\n                if (value === 0)\n                    return ed ? 0 : undefined;\n                assert_1.assertInt32(value);\n                return value;\n            case reflection_info_1.ScalarType.FIXED32:\n            case reflection_info_1.ScalarType.UINT32:\n                if (value === 0)\n                    return ed ? 0 : undefined;\n                assert_1.assertUInt32(value);\n                return value;\n            // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n            // Either numbers or strings are accepted. Exponent notation is also accepted.\n            case reflection_info_1.ScalarType.FLOAT:\n                assert_1.assertFloat32(value);\n            case reflection_info_1.ScalarType.DOUBLE:\n                if (value === 0)\n                    return ed ? 0 : undefined;\n                assert_1.assert(typeof value == 'number');\n                if (Number.isNaN(value))\n                    return 'NaN';\n                if (value === Number.POSITIVE_INFINITY)\n                    return 'Infinity';\n                if (value === Number.NEGATIVE_INFINITY)\n                    return '-Infinity';\n                return value;\n            // string:\n            case reflection_info_1.ScalarType.STRING:\n                if (value === \"\")\n                    return ed ? '' : undefined;\n                assert_1.assert(typeof value == 'string');\n                return value;\n            // bool:\n            case reflection_info_1.ScalarType.BOOL:\n                if (value === false)\n                    return ed ? false : undefined;\n                assert_1.assert(typeof value == 'boolean');\n                return value;\n            // JSON value will be a decimal string. Either numbers or strings are accepted.\n            case reflection_info_1.ScalarType.UINT64:\n            case reflection_info_1.ScalarType.FIXED64:\n                assert_1.assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');\n                let ulong = pb_long_1.PbULong.from(value);\n                if (ulong.isZero() && !ed)\n                    return undefined;\n                return ulong.toString();\n            // JSON value will be a decimal string. Either numbers or strings are accepted.\n            case reflection_info_1.ScalarType.INT64:\n            case reflection_info_1.ScalarType.SFIXED64:\n            case reflection_info_1.ScalarType.SINT64:\n                assert_1.assert(typeof value == 'number' || typeof value == 'string' || typeof value == 'bigint');\n                let long = pb_long_1.PbLong.from(value);\n                if (long.isZero() && !ed)\n                    return undefined;\n                return long.toString();\n            // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n            // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n            case reflection_info_1.ScalarType.BYTES:\n                assert_1.assert(value instanceof Uint8Array);\n                if (!value.byteLength)\n                    return ed ? \"\" : undefined;\n                return base64_1.base64encode(value);\n        }\n    }\n}\nexports.ReflectionJsonWriter = ReflectionJsonWriter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reflectionScalarDefault = void 0;\nconst reflection_info_1 = require(\"./reflection-info\");\nconst reflection_long_convert_1 = require(\"./reflection-long-convert\");\nconst pb_long_1 = require(\"./pb-long\");\n/**\n * Creates the default value for a scalar type.\n */\nfunction reflectionScalarDefault(type, longType = reflection_info_1.LongType.STRING) {\n    switch (type) {\n        case reflection_info_1.ScalarType.BOOL:\n            return false;\n        case reflection_info_1.ScalarType.UINT64:\n        case reflection_info_1.ScalarType.FIXED64:\n            return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbULong.ZERO, longType);\n        case reflection_info_1.ScalarType.INT64:\n        case reflection_info_1.ScalarType.SFIXED64:\n        case reflection_info_1.ScalarType.SINT64:\n            return reflection_long_convert_1.reflectionLongConvert(pb_long_1.PbLong.ZERO, longType);\n        case reflection_info_1.ScalarType.DOUBLE:\n        case reflection_info_1.ScalarType.FLOAT:\n            return 0.0;\n        case reflection_info_1.ScalarType.BYTES:\n            return new Uint8Array(0);\n        case reflection_info_1.ScalarType.STRING:\n            return \"\";\n        default:\n            // case ScalarType.INT32:\n            // case ScalarType.UINT32:\n            // case ScalarType.SINT32:\n            // case ScalarType.FIXED32:\n            // case ScalarType.SFIXED32:\n            return 0;\n    }\n}\nexports.reflectionScalarDefault = reflectionScalarDefault;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReflectionBinaryReader = void 0;\nconst binary_format_contract_1 = require(\"./binary-format-contract\");\nconst reflection_info_1 = require(\"./reflection-info\");\nconst reflection_long_convert_1 = require(\"./reflection-long-convert\");\nconst reflection_scalar_default_1 = require(\"./reflection-scalar-default\");\n/**\n * Reads proto3 messages in binary format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/encoding\n */\nclass ReflectionBinaryReader {\n    constructor(info) {\n        this.info = info;\n    }\n    prepare() {\n        var _a;\n        if (!this.fieldNoToField) {\n            const fieldsInput = (_a = this.info.fields) !== null && _a !== void 0 ? _a : [];\n            this.fieldNoToField = new Map(fieldsInput.map(field => [field.no, field]));\n        }\n    }\n    /**\n     * Reads a message from binary format into the target message.\n     *\n     * Repeated fields are appended. Map entries are added, overwriting\n     * existing keys.\n     *\n     * If a message field is already present, it will be merged with the\n     * new data.\n     */\n    read(reader, message, options, length) {\n        this.prepare();\n        const end = length === undefined ? reader.len : reader.pos + length;\n        while (reader.pos < end) {\n            // read the tag and find the field\n            const [fieldNo, wireType] = reader.tag(), field = this.fieldNoToField.get(fieldNo);\n            if (!field) {\n                let u = options.readUnknownField;\n                if (u == \"throw\")\n                    throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.info.typeName}`);\n                let d = reader.skip(wireType);\n                if (u !== false)\n                    (u === true ? binary_format_contract_1.UnknownFieldHandler.onRead : u)(this.info.typeName, message, fieldNo, wireType, d);\n                continue;\n            }\n            // target object for the field we are reading\n            let target = message, repeated = field.repeat, localName = field.localName;\n            // if field is member of oneof ADT, use ADT as target\n            if (field.oneof) {\n                target = target[field.oneof];\n                // if other oneof member selected, set new ADT\n                if (target.oneofKind !== localName)\n                    target = message[field.oneof] = {\n                        oneofKind: localName\n                    };\n            }\n            // we have handled oneof above, we just have read the value into `target[localName]`\n            switch (field.kind) {\n                case \"scalar\":\n                case \"enum\":\n                    let T = field.kind == \"enum\" ? reflection_info_1.ScalarType.INT32 : field.T;\n                    let L = field.kind == \"scalar\" ? field.L : undefined;\n                    if (repeated) {\n                        let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n                        if (wireType == binary_format_contract_1.WireType.LengthDelimited && T != reflection_info_1.ScalarType.STRING && T != reflection_info_1.ScalarType.BYTES) {\n                            let e = reader.uint32() + reader.pos;\n                            while (reader.pos < e)\n                                arr.push(this.scalar(reader, T, L));\n                        }\n                        else\n                            arr.push(this.scalar(reader, T, L));\n                    }\n                    else\n                        target[localName] = this.scalar(reader, T, L);\n                    break;\n                case \"message\":\n                    if (repeated) {\n                        let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n                        let msg = field.T().internalBinaryRead(reader, reader.uint32(), options);\n                        arr.push(msg);\n                    }\n                    else\n                        target[localName] = field.T().internalBinaryRead(reader, reader.uint32(), options, target[localName]);\n                    break;\n                case \"map\":\n                    let [mapKey, mapVal] = this.mapEntry(field, reader, options);\n                    // safe to assume presence of map object, oneof cannot contain repeated values\n                    target[localName][mapKey] = mapVal;\n                    break;\n            }\n        }\n    }\n    /**\n     * Read a map field, expecting key field = 1, value field = 2\n     */\n    mapEntry(field, reader, options) {\n        let length = reader.uint32();\n        let end = reader.pos + length;\n        let key = undefined; // javascript only allows number or string for object properties\n        let val = undefined;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case 1:\n                    if (field.K == reflection_info_1.ScalarType.BOOL)\n                        key = reader.bool().toString();\n                    else\n                        // long types are read as string, number types are okay as number\n                        key = this.scalar(reader, field.K, reflection_info_1.LongType.STRING);\n                    break;\n                case 2:\n                    switch (field.V.kind) {\n                        case \"scalar\":\n                            val = this.scalar(reader, field.V.T, field.V.L);\n                            break;\n                        case \"enum\":\n                            val = reader.int32();\n                            break;\n                        case \"message\":\n                            val = field.V.T().internalBinaryRead(reader, reader.uint32(), options);\n                            break;\n                    }\n                    break;\n                default:\n                    throw new Error(`Unknown field ${fieldNo} (wire type ${wireType}) in map entry for ${this.info.typeName}#${field.name}`);\n            }\n        }\n        if (key === undefined) {\n            let keyRaw = reflection_scalar_default_1.reflectionScalarDefault(field.K);\n            key = field.K == reflection_info_1.ScalarType.BOOL ? keyRaw.toString() : keyRaw;\n        }\n        if (val === undefined)\n            switch (field.V.kind) {\n                case \"scalar\":\n                    val = reflection_scalar_default_1.reflectionScalarDefault(field.V.T, field.V.L);\n                    break;\n                case \"enum\":\n                    val = 0;\n                    break;\n                case \"message\":\n                    val = field.V.T().create();\n                    break;\n            }\n        return [key, val];\n    }\n    scalar(reader, type, longType) {\n        switch (type) {\n            case reflection_info_1.ScalarType.INT32:\n                return reader.int32();\n            case reflection_info_1.ScalarType.STRING:\n                return reader.string();\n            case reflection_info_1.ScalarType.BOOL:\n                return reader.bool();\n            case reflection_info_1.ScalarType.DOUBLE:\n                return reader.double();\n            case reflection_info_1.ScalarType.FLOAT:\n                return reader.float();\n            case reflection_info_1.ScalarType.INT64:\n                return reflection_long_convert_1.reflectionLongConvert(reader.int64(), longType);\n            case reflection_info_1.ScalarType.UINT64:\n                return reflection_long_convert_1.reflectionLongConvert(reader.uint64(), longType);\n            case reflection_info_1.ScalarType.FIXED64:\n                return reflection_long_convert_1.reflectionLongConvert(reader.fixed64(), longType);\n            case reflection_info_1.ScalarType.FIXED32:\n                return reader.fixed32();\n            case reflection_info_1.ScalarType.BYTES:\n                return reader.bytes();\n            case reflection_info_1.ScalarType.UINT32:\n                return reader.uint32();\n            case reflection_info_1.ScalarType.SFIXED32:\n                return reader.sfixed32();\n            case reflection_info_1.ScalarType.SFIXED64:\n                return reflection_long_convert_1.reflectionLongConvert(reader.sfixed64(), longType);\n            case reflection_info_1.ScalarType.SINT32:\n                return reader.sint32();\n            case reflection_info_1.ScalarType.SINT64:\n                return reflection_long_convert_1.reflectionLongConvert(reader.sint64(), longType);\n        }\n    }\n}\nexports.ReflectionBinaryReader = ReflectionBinaryReader;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ReflectionBinaryWriter = void 0;\nconst binary_format_contract_1 = require(\"./binary-format-contract\");\nconst reflection_info_1 = require(\"./reflection-info\");\nconst assert_1 = require(\"./assert\");\nconst pb_long_1 = require(\"./pb-long\");\n/**\n * Writes proto3 messages in binary format using reflection information.\n *\n * https://developers.google.com/protocol-buffers/docs/encoding\n */\nclass ReflectionBinaryWriter {\n    constructor(info) {\n        this.info = info;\n    }\n    prepare() {\n        if (!this.fields) {\n            const fieldsInput = this.info.fields ? this.info.fields.concat() : [];\n            this.fields = fieldsInput.sort((a, b) => a.no - b.no);\n        }\n    }\n    /**\n     * Writes the message to binary format.\n     */\n    write(message, writer, options) {\n        this.prepare();\n        for (const field of this.fields) {\n            let value, // this will be our field value, whether it is member of a oneof or not\n            emitDefault, // whether we emit the default value (only true for oneof members)\n            repeated = field.repeat, localName = field.localName;\n            // handle oneof ADT\n            if (field.oneof) {\n                const group = message[field.oneof];\n                if (group.oneofKind !== localName)\n                    continue; // if field is not selected, skip\n                value = group[localName];\n                emitDefault = true;\n            }\n            else {\n                value = message[localName];\n                emitDefault = false;\n            }\n            // we have handled oneof above. we just have to honor `emitDefault`.\n            switch (field.kind) {\n                case \"scalar\":\n                case \"enum\":\n                    let T = field.kind == \"enum\" ? reflection_info_1.ScalarType.INT32 : field.T;\n                    if (repeated) {\n                        assert_1.assert(Array.isArray(value));\n                        if (repeated == reflection_info_1.RepeatType.PACKED)\n                            this.packed(writer, T, field.no, value);\n                        else\n                            for (const item of value)\n                                this.scalar(writer, T, field.no, item, true);\n                    }\n                    else if (value === undefined)\n                        assert_1.assert(field.opt);\n                    else\n                        this.scalar(writer, T, field.no, value, emitDefault || field.opt);\n                    break;\n                case \"message\":\n                    if (repeated) {\n                        assert_1.assert(Array.isArray(value));\n                        for (const item of value)\n                            this.message(writer, options, field.T(), field.no, item);\n                    }\n                    else {\n                        this.message(writer, options, field.T(), field.no, value);\n                    }\n                    break;\n                case \"map\":\n                    assert_1.assert(typeof value == 'object' && value !== null);\n                    for (const [key, val] of Object.entries(value))\n                        this.mapEntry(writer, options, field, key, val);\n                    break;\n            }\n        }\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u === true ? binary_format_contract_1.UnknownFieldHandler.onWrite : u)(this.info.typeName, message, writer);\n    }\n    mapEntry(writer, options, field, key, value) {\n        writer.tag(field.no, binary_format_contract_1.WireType.LengthDelimited);\n        writer.fork();\n        // javascript only allows number or string for object properties\n        // we convert from our representation to the protobuf type\n        let keyValue = key;\n        switch (field.K) {\n            case reflection_info_1.ScalarType.INT32:\n            case reflection_info_1.ScalarType.FIXED32:\n            case reflection_info_1.ScalarType.UINT32:\n            case reflection_info_1.ScalarType.SFIXED32:\n            case reflection_info_1.ScalarType.SINT32:\n                keyValue = Number.parseInt(key);\n                break;\n            case reflection_info_1.ScalarType.BOOL:\n                assert_1.assert(key == 'true' || key == 'false');\n                keyValue = key == 'true';\n                break;\n        }\n        // write key, expecting key field number = 1\n        this.scalar(writer, field.K, 1, keyValue, true);\n        // write value, expecting value field number = 2\n        switch (field.V.kind) {\n            case 'scalar':\n                this.scalar(writer, field.V.T, 2, value, true);\n                break;\n            case 'enum':\n                this.scalar(writer, reflection_info_1.ScalarType.INT32, 2, value, true);\n                break;\n            case 'message':\n                this.message(writer, options, field.V.T(), 2, value);\n                break;\n        }\n        writer.join();\n    }\n    message(writer, options, handler, fieldNo, value) {\n        if (value === undefined)\n            return;\n        handler.internalBinaryWrite(value, writer.tag(fieldNo, binary_format_contract_1.WireType.LengthDelimited).fork(), options);\n        writer.join();\n    }\n    /**\n     * Write a single scalar value.\n     */\n    scalar(writer, type, fieldNo, value, emitDefault) {\n        let [wireType, method, isDefault] = this.scalarInfo(type, value);\n        if (!isDefault || emitDefault) {\n            writer.tag(fieldNo, wireType);\n            writer[method](value);\n        }\n    }\n    /**\n     * Write an array of scalar values in packed format.\n     */\n    packed(writer, type, fieldNo, value) {\n        if (!value.length)\n            return;\n        assert_1.assert(type !== reflection_info_1.ScalarType.BYTES && type !== reflection_info_1.ScalarType.STRING);\n        // write tag\n        writer.tag(fieldNo, binary_format_contract_1.WireType.LengthDelimited);\n        // begin length-delimited\n        writer.fork();\n        // write values without tags\n        let [, method,] = this.scalarInfo(type);\n        for (let i = 0; i < value.length; i++)\n            writer[method](value[i]);\n        // end length delimited\n        writer.join();\n    }\n    /**\n     * Get information for writing a scalar value.\n     *\n     * Returns tuple:\n     * [0]: appropriate WireType\n     * [1]: name of the appropriate method of IBinaryWriter\n     * [2]: whether the given value is a default value\n     *\n     * If argument `value` is omitted, [2] is always false.\n     */\n    scalarInfo(type, value) {\n        let t = binary_format_contract_1.WireType.Varint;\n        let m;\n        let i = value === undefined;\n        let d = value === 0;\n        switch (type) {\n            case reflection_info_1.ScalarType.INT32:\n                m = \"int32\";\n                break;\n            case reflection_info_1.ScalarType.STRING:\n                d = i || !value.length;\n                t = binary_format_contract_1.WireType.LengthDelimited;\n                m = \"string\";\n                break;\n            case reflection_info_1.ScalarType.BOOL:\n                d = value === false;\n                m = \"bool\";\n                break;\n            case reflection_info_1.ScalarType.UINT32:\n                m = \"uint32\";\n                break;\n            case reflection_info_1.ScalarType.DOUBLE:\n                t = binary_format_contract_1.WireType.Bit64;\n                m = \"double\";\n                break;\n            case reflection_info_1.ScalarType.FLOAT:\n                t = binary_format_contract_1.WireType.Bit32;\n                m = \"float\";\n                break;\n            case reflection_info_1.ScalarType.INT64:\n                d = i || pb_long_1.PbLong.from(value).isZero();\n                m = \"int64\";\n                break;\n            case reflection_info_1.ScalarType.UINT64:\n                d = i || pb_long_1.PbULong.from(value).isZero();\n                m = \"uint64\";\n                break;\n            case reflection_info_1.ScalarType.FIXED64:\n                d = i || pb_long_1.PbULong.from(value).isZero();\n                t = binary_format_contract_1.WireType.Bit64;\n                m = \"fixed64\";\n                break;\n            case reflection_info_1.ScalarType.BYTES:\n                d = i || !value.byteLength;\n                t = binary_format_contract_1.WireType.LengthDelimited;\n                m = \"bytes\";\n                break;\n            case reflection_info_1.ScalarType.FIXED32:\n                t = binary_format_contract_1.WireType.Bit32;\n                m = \"fixed32\";\n                break;\n            case reflection_info_1.ScalarType.SFIXED32:\n                t = binary_format_contract_1.WireType.Bit32;\n                m = \"sfixed32\";\n                break;\n            case reflection_info_1.ScalarType.SFIXED64:\n                d = i || pb_long_1.PbLong.from(value).isZero();\n                t = binary_format_contract_1.WireType.Bit64;\n                m = \"sfixed64\";\n                break;\n            case reflection_info_1.ScalarType.SINT32:\n                m = \"sint32\";\n                break;\n            case reflection_info_1.ScalarType.SINT64:\n                d = i || pb_long_1.PbLong.from(value).isZero();\n                m = \"sint64\";\n                break;\n        }\n        return [t, m, i || d];\n    }\n}\nexports.ReflectionBinaryWriter = ReflectionBinaryWriter;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reflectionCreate = void 0;\nconst reflection_scalar_default_1 = require(\"./reflection-scalar-default\");\nconst message_type_contract_1 = require(\"./message-type-contract\");\n/**\n * Creates an instance of the generic message, using the field\n * information.\n */\nfunction reflectionCreate(type) {\n    /**\n     * This ternary can be removed in the next major version.\n     * The `Object.create()` code path utilizes a new `messagePrototype`\n     * property on the `IMessageType` which has this same `MESSAGE_TYPE`\n     * non-enumerable property on it. Doing it this way means that we only\n     * pay the cost of `Object.defineProperty()` once per `IMessageType`\n     * class of once per \"instance\". The falsy code path is only provided\n     * for backwards compatibility in cases where the runtime library is\n     * updated without also updating the generated code.\n     */\n    const msg = type.messagePrototype\n        ? Object.create(type.messagePrototype)\n        : Object.defineProperty({}, message_type_contract_1.MESSAGE_TYPE, { value: type });\n    for (let field of type.fields) {\n        let name = field.localName;\n        if (field.opt)\n            continue;\n        if (field.oneof)\n            msg[field.oneof] = { oneofKind: undefined };\n        else if (field.repeat)\n            msg[name] = [];\n        else\n            switch (field.kind) {\n                case \"scalar\":\n                    msg[name] = reflection_scalar_default_1.reflectionScalarDefault(field.T, field.L);\n                    break;\n                case \"enum\":\n                    // we require 0 to be default value for all enums\n                    msg[name] = 0;\n                    break;\n                case \"map\":\n                    msg[name] = {};\n                    break;\n            }\n    }\n    return msg;\n}\nexports.reflectionCreate = reflectionCreate;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reflectionMergePartial = void 0;\n/**\n * Copy partial data into the target message.\n *\n * If a singular scalar or enum field is present in the source, it\n * replaces the field in the target.\n *\n * If a singular message field is present in the source, it is merged\n * with the target field by calling mergePartial() of the responsible\n * message type.\n *\n * If a repeated field is present in the source, its values replace\n * all values in the target array, removing extraneous values.\n * Repeated message fields are copied, not merged.\n *\n * If a map field is present in the source, entries are added to the\n * target map, replacing entries with the same key. Entries that only\n * exist in the target remain. Entries with message values are copied,\n * not merged.\n *\n * Note that this function differs from protobuf merge semantics,\n * which appends repeated fields.\n */\nfunction reflectionMergePartial(info, target, source) {\n    let fieldValue, // the field value we are working with\n    input = source, output; // where we want our field value to go\n    for (let field of info.fields) {\n        let name = field.localName;\n        if (field.oneof) {\n            const group = input[field.oneof]; // this is the oneof`s group in the source\n            if ((group === null || group === void 0 ? void 0 : group.oneofKind) == undefined) { // the user is free to omit\n                continue; // we skip this field, and all other members too\n            }\n            fieldValue = group[name]; // our value comes from the the oneof group of the source\n            output = target[field.oneof]; // and our output is the oneof group of the target\n            output.oneofKind = group.oneofKind; // always update discriminator\n            if (fieldValue == undefined) {\n                delete output[name]; // remove any existing value\n                continue; // skip further work on field\n            }\n        }\n        else {\n            fieldValue = input[name]; // we are using the source directly\n            output = target; // we want our field value to go directly into the target\n            if (fieldValue == undefined) {\n                continue; // skip further work on field, existing value is used as is\n            }\n        }\n        if (field.repeat)\n            output[name].length = fieldValue.length; // resize target array to match source array\n        // now we just work with `fieldValue` and `output` to merge the value\n        switch (field.kind) {\n            case \"scalar\":\n            case \"enum\":\n                if (field.repeat)\n                    for (let i = 0; i < fieldValue.length; i++)\n                        output[name][i] = fieldValue[i]; // not a reference type\n                else\n                    output[name] = fieldValue; // not a reference type\n                break;\n            case \"message\":\n                let T = field.T();\n                if (field.repeat)\n                    for (let i = 0; i < fieldValue.length; i++)\n                        output[name][i] = T.create(fieldValue[i]);\n                else if (output[name] === undefined)\n                    output[name] = T.create(fieldValue); // nothing to merge with\n                else\n                    T.mergePartial(output[name], fieldValue);\n                break;\n            case \"map\":\n                // Map and repeated fields are simply overwritten, not appended or merged\n                switch (field.V.kind) {\n                    case \"scalar\":\n                    case \"enum\":\n                        Object.assign(output[name], fieldValue); // elements are not reference types\n                        break;\n                    case \"message\":\n                        let T = field.V.T();\n                        for (let k of Object.keys(fieldValue))\n                            output[name][k] = T.create(fieldValue[k]);\n                        break;\n                }\n                break;\n        }\n    }\n}\nexports.reflectionMergePartial = reflectionMergePartial;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reflectionEquals = void 0;\nconst reflection_info_1 = require(\"./reflection-info\");\n/**\n * Determines whether two message of the same type have the same field values.\n * Checks for deep equality, traversing repeated fields, oneof groups, maps\n * and messages recursively.\n * Will also return true if both messages are `undefined`.\n */\nfunction reflectionEquals(info, a, b) {\n    if (a === b)\n        return true;\n    if (!a || !b)\n        return false;\n    for (let field of info.fields) {\n        let localName = field.localName;\n        let val_a = field.oneof ? a[field.oneof][localName] : a[localName];\n        let val_b = field.oneof ? b[field.oneof][localName] : b[localName];\n        switch (field.kind) {\n            case \"enum\":\n            case \"scalar\":\n                let t = field.kind == \"enum\" ? reflection_info_1.ScalarType.INT32 : field.T;\n                if (!(field.repeat\n                    ? repeatedPrimitiveEq(t, val_a, val_b)\n                    : primitiveEq(t, val_a, val_b)))\n                    return false;\n                break;\n            case \"map\":\n                if (!(field.V.kind == \"message\"\n                    ? repeatedMsgEq(field.V.T(), objectValues(val_a), objectValues(val_b))\n                    : repeatedPrimitiveEq(field.V.kind == \"enum\" ? reflection_info_1.ScalarType.INT32 : field.V.T, objectValues(val_a), objectValues(val_b))))\n                    return false;\n                break;\n            case \"message\":\n                let T = field.T();\n                if (!(field.repeat\n                    ? repeatedMsgEq(T, val_a, val_b)\n                    : T.equals(val_a, val_b)))\n                    return false;\n                break;\n        }\n    }\n    return true;\n}\nexports.reflectionEquals = reflectionEquals;\nconst objectValues = Object.values;\nfunction primitiveEq(type, a, b) {\n    if (a === b)\n        return true;\n    if (type !== reflection_info_1.ScalarType.BYTES)\n        return false;\n    let ba = a;\n    let bb = b;\n    if (ba.length !== bb.length)\n        return false;\n    for (let i = 0; i < ba.length; i++)\n        if (ba[i] != bb[i])\n            return false;\n    return true;\n}\nfunction repeatedPrimitiveEq(type, a, b) {\n    if (a.length !== b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!primitiveEq(type, a[i], b[i]))\n            return false;\n    return true;\n}\nfunction repeatedMsgEq(type, a, b) {\n    if (a.length !== b.length)\n        return false;\n    for (let i = 0; i < a.length; i++)\n        if (!type.equals(a[i], b[i]))\n            return false;\n    return true;\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageType = void 0;\nconst message_type_contract_1 = require(\"./message-type-contract\");\nconst reflection_info_1 = require(\"./reflection-info\");\nconst reflection_type_check_1 = require(\"./reflection-type-check\");\nconst reflection_json_reader_1 = require(\"./reflection-json-reader\");\nconst reflection_json_writer_1 = require(\"./reflection-json-writer\");\nconst reflection_binary_reader_1 = require(\"./reflection-binary-reader\");\nconst reflection_binary_writer_1 = require(\"./reflection-binary-writer\");\nconst reflection_create_1 = require(\"./reflection-create\");\nconst reflection_merge_partial_1 = require(\"./reflection-merge-partial\");\nconst json_typings_1 = require(\"./json-typings\");\nconst json_format_contract_1 = require(\"./json-format-contract\");\nconst reflection_equals_1 = require(\"./reflection-equals\");\nconst binary_writer_1 = require(\"./binary-writer\");\nconst binary_reader_1 = require(\"./binary-reader\");\nconst baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));\nconst messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {};\n/**\n * This standard message type provides reflection-based\n * operations to work with a message.\n */\nclass MessageType {\n    constructor(name, fields, options) {\n        this.defaultCheckDepth = 16;\n        this.typeName = name;\n        this.fields = fields.map(reflection_info_1.normalizeFieldInfo);\n        this.options = options !== null && options !== void 0 ? options : {};\n        messageTypeDescriptor.value = this;\n        this.messagePrototype = Object.create(null, baseDescriptors);\n        this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this);\n        this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this);\n        this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this);\n        this.refBinReader = new reflection_binary_reader_1.ReflectionBinaryReader(this);\n        this.refBinWriter = new reflection_binary_writer_1.ReflectionBinaryWriter(this);\n    }\n    create(value) {\n        let message = reflection_create_1.reflectionCreate(this);\n        if (value !== undefined) {\n            reflection_merge_partial_1.reflectionMergePartial(this, message, value);\n        }\n        return message;\n    }\n    /**\n     * Clone the message.\n     *\n     * Unknown fields are discarded.\n     */\n    clone(message) {\n        let copy = this.create();\n        reflection_merge_partial_1.reflectionMergePartial(this, copy, message);\n        return copy;\n    }\n    /**\n     * Determines whether two message of the same type have the same field values.\n     * Checks for deep equality, traversing repeated fields, oneof groups, maps\n     * and messages recursively.\n     * Will also return true if both messages are `undefined`.\n     */\n    equals(a, b) {\n        return reflection_equals_1.reflectionEquals(this, a, b);\n    }\n    /**\n     * Is the given value assignable to our message type\n     * and contains no [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?\n     */\n    is(arg, depth = this.defaultCheckDepth) {\n        return this.refTypeCheck.is(arg, depth, false);\n    }\n    /**\n     * Is the given value assignable to our message type,\n     * regardless of [excess properties](https://www.typescriptlang.org/docs/handbook/interfaces.html#excess-property-checks)?\n     */\n    isAssignable(arg, depth = this.defaultCheckDepth) {\n        return this.refTypeCheck.is(arg, depth, true);\n    }\n    /**\n     * Copy partial data into the target message.\n     */\n    mergePartial(target, source) {\n        reflection_merge_partial_1.reflectionMergePartial(this, target, source);\n    }\n    /**\n     * Create a new message from binary format.\n     */\n    fromBinary(data, options) {\n        let opt = binary_reader_1.binaryReadOptions(options);\n        return this.internalBinaryRead(opt.readerFactory(data), data.byteLength, opt);\n    }\n    /**\n     * Read a new message from a JSON value.\n     */\n    fromJson(json, options) {\n        return this.internalJsonRead(json, json_format_contract_1.jsonReadOptions(options));\n    }\n    /**\n     * Read a new message from a JSON string.\n     * This is equivalent to `T.fromJson(JSON.parse(json))`.\n     */\n    fromJsonString(json, options) {\n        let value = JSON.parse(json);\n        return this.fromJson(value, options);\n    }\n    /**\n     * Write the message to canonical JSON value.\n     */\n    toJson(message, options) {\n        return this.internalJsonWrite(message, json_format_contract_1.jsonWriteOptions(options));\n    }\n    /**\n     * Convert the message to canonical JSON string.\n     * This is equivalent to `JSON.stringify(T.toJson(t))`\n     */\n    toJsonString(message, options) {\n        var _a;\n        let value = this.toJson(message, options);\n        return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);\n    }\n    /**\n     * Write the message to binary format.\n     */\n    toBinary(message, options) {\n        let opt = binary_writer_1.binaryWriteOptions(options);\n        return this.internalBinaryWrite(message, opt.writerFactory(), opt).finish();\n    }\n    /**\n     * This is an internal method. If you just want to read a message from\n     * JSON, use `fromJson()` or `fromJsonString()`.\n     *\n     * Reads JSON value and merges the fields into the target\n     * according to protobuf rules. If the target is omitted,\n     * a new instance is created first.\n     */\n    internalJsonRead(json, options, target) {\n        if (json !== null && typeof json == \"object\" && !Array.isArray(json)) {\n            let message = target !== null && target !== void 0 ? target : this.create();\n            this.refJsonReader.read(json, message, options);\n            return message;\n        }\n        throw new Error(`Unable to parse message ${this.typeName} from JSON ${json_typings_1.typeofJsonValue(json)}.`);\n    }\n    /**\n     * This is an internal method. If you just want to write a message\n     * to JSON, use `toJson()` or `toJsonString().\n     *\n     * Writes JSON value and returns it.\n     */\n    internalJsonWrite(message, options) {\n        return this.refJsonWriter.write(message, options);\n    }\n    /**\n     * This is an internal method. If you just want to write a message\n     * in binary format, use `toBinary()`.\n     *\n     * Serializes the message in binary format and appends it to the given\n     * writer. Returns passed writer.\n     */\n    internalBinaryWrite(message, writer, options) {\n        this.refBinWriter.write(message, writer, options);\n        return writer;\n    }\n    /**\n     * This is an internal method. If you just want to read a message from\n     * binary data, use `fromBinary()`.\n     *\n     * Reads data from binary format and merges the fields into\n     * the target according to protobuf rules. If the target is\n     * omitted, a new instance is created first.\n     */\n    internalBinaryRead(reader, length, options, target) {\n        let message = target !== null && target !== void 0 ? target : this.create();\n        this.refBinReader.read(reader, message, options, length);\n        return message;\n    }\n}\nexports.MessageType = MessageType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.containsMessageType = void 0;\nconst message_type_contract_1 = require(\"./message-type-contract\");\n/**\n * Check if the provided object is a proto message.\n *\n * Note that this is an experimental feature - it is here to stay, but\n * implementation details may change without notice.\n */\nfunction containsMessageType(msg) {\n    return msg[message_type_contract_1.MESSAGE_TYPE] != null;\n}\nexports.containsMessageType = containsMessageType;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.listEnumNumbers = exports.listEnumNames = exports.listEnumValues = exports.isEnumObject = void 0;\n/**\n * Is this a lookup object generated by Typescript, for a Typescript enum\n * generated by protobuf-ts?\n *\n * - No `const enum` (enum must not be inlined, we need reverse mapping).\n * - No string enum (we need int32 for protobuf).\n * - Must have a value for 0 (otherwise, we would need to support custom default values).\n */\nfunction isEnumObject(arg) {\n    if (typeof arg != 'object' || arg === null) {\n        return false;\n    }\n    if (!arg.hasOwnProperty(0)) {\n        return false;\n    }\n    for (let k of Object.keys(arg)) {\n        let num = parseInt(k);\n        if (!Number.isNaN(num)) {\n            // is there a name for the number?\n            let nam = arg[num];\n            if (nam === undefined)\n                return false;\n            // does the name resolve back to the number?\n            if (arg[nam] !== num)\n                return false;\n        }\n        else {\n            // is there a number for the name?\n            let num = arg[k];\n            if (num === undefined)\n                return false;\n            // is it a string enum?\n            if (typeof num !== 'number')\n                return false;\n            // do we know the number?\n            if (arg[num] === undefined)\n                return false;\n        }\n    }\n    return true;\n}\nexports.isEnumObject = isEnumObject;\n/**\n * Lists all values of a Typescript enum, as an array of objects with a \"name\"\n * property and a \"number\" property.\n *\n * Note that it is possible that a number appears more than once, because it is\n * possible to have aliases in an enum.\n *\n * Throws if the enum does not adhere to the rules of enums generated by\n * protobuf-ts. See `isEnumObject()`.\n */\nfunction listEnumValues(enumObject) {\n    if (!isEnumObject(enumObject))\n        throw new Error(\"not a typescript enum object\");\n    let values = [];\n    for (let [name, number] of Object.entries(enumObject))\n        if (typeof number == \"number\")\n            values.push({ name, number });\n    return values;\n}\nexports.listEnumValues = listEnumValues;\n/**\n * Lists the names of a Typescript enum.\n *\n * Throws if the enum does not adhere to the rules of enums generated by\n * protobuf-ts. See `isEnumObject()`.\n */\nfunction listEnumNames(enumObject) {\n    return listEnumValues(enumObject).map(val => val.name);\n}\nexports.listEnumNames = listEnumNames;\n/**\n * Lists the numbers of a Typescript enum.\n *\n * Throws if the enum does not adhere to the rules of enums generated by\n * protobuf-ts. See `isEnumObject()`.\n */\nfunction listEnumNumbers(enumObject) {\n    return listEnumValues(enumObject)\n        .map(val => val.number)\n        .filter((num, index, arr) => arr.indexOf(num) == index);\n}\nexports.listEnumNumbers = listEnumNumbers;\n", "\"use strict\";\n// Public API of the protobuf-ts runtime.\n// Note: we do not use `export * from ...` to help tree shakers,\n// webpack verbose output hints that this should be useful\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Convenience JSON typings and corresponding type guards\nvar json_typings_1 = require(\"./json-typings\");\nObject.defineProperty(exports, \"typeofJsonValue\", { enumerable: true, get: function () { return json_typings_1.typeofJsonValue; } });\nObject.defineProperty(exports, \"isJsonObject\", { enumerable: true, get: function () { return json_typings_1.isJsonObject; } });\n// Base 64 encoding\nvar base64_1 = require(\"./base64\");\nObject.defineProperty(exports, \"base64decode\", { enumerable: true, get: function () { return base64_1.base64decode; } });\nObject.defineProperty(exports, \"base64encode\", { enumerable: true, get: function () { return base64_1.base64encode; } });\n// UTF8 encoding\nvar protobufjs_utf8_1 = require(\"./protobufjs-utf8\");\nObject.defineProperty(exports, \"utf8read\", { enumerable: true, get: function () { return protobufjs_utf8_1.utf8read; } });\n// Binary format contracts, options for reading and writing, for example\nvar binary_format_contract_1 = require(\"./binary-format-contract\");\nObject.defineProperty(exports, \"WireType\", { enumerable: true, get: function () { return binary_format_contract_1.WireType; } });\nObject.defineProperty(exports, \"mergeBinaryOptions\", { enumerable: true, get: function () { return binary_format_contract_1.mergeBinaryOptions; } });\nObject.defineProperty(exports, \"UnknownFieldHandler\", { enumerable: true, get: function () { return binary_format_contract_1.UnknownFieldHandler; } });\n// Standard IBinaryReader implementation\nvar binary_reader_1 = require(\"./binary-reader\");\nObject.defineProperty(exports, \"BinaryReader\", { enumerable: true, get: function () { return binary_reader_1.BinaryReader; } });\nObject.defineProperty(exports, \"binaryReadOptions\", { enumerable: true, get: function () { return binary_reader_1.binaryReadOptions; } });\n// Standard IBinaryWriter implementation\nvar binary_writer_1 = require(\"./binary-writer\");\nObject.defineProperty(exports, \"BinaryWriter\", { enumerable: true, get: function () { return binary_writer_1.BinaryWriter; } });\nObject.defineProperty(exports, \"binaryWriteOptions\", { enumerable: true, get: function () { return binary_writer_1.binaryWriteOptions; } });\n// Int64 and UInt64 implementations required for the binary format\nvar pb_long_1 = require(\"./pb-long\");\nObject.defineProperty(exports, \"PbLong\", { enumerable: true, get: function () { return pb_long_1.PbLong; } });\nObject.defineProperty(exports, \"PbULong\", { enumerable: true, get: function () { return pb_long_1.PbULong; } });\n// JSON format contracts, options for reading and writing, for example\nvar json_format_contract_1 = require(\"./json-format-contract\");\nObject.defineProperty(exports, \"jsonReadOptions\", { enumerable: true, get: function () { return json_format_contract_1.jsonReadOptions; } });\nObject.defineProperty(exports, \"jsonWriteOptions\", { enumerable: true, get: function () { return json_format_contract_1.jsonWriteOptions; } });\nObject.defineProperty(exports, \"mergeJsonOptions\", { enumerable: true, get: function () { return json_format_contract_1.mergeJsonOptions; } });\n// Message type contract\nvar message_type_contract_1 = require(\"./message-type-contract\");\nObject.defineProperty(exports, \"MESSAGE_TYPE\", { enumerable: true, get: function () { return message_type_contract_1.MESSAGE_TYPE; } });\n// Message type implementation via reflection\nvar message_type_1 = require(\"./message-type\");\nObject.defineProperty(exports, \"MessageType\", { enumerable: true, get: function () { return message_type_1.MessageType; } });\n// Reflection info, generated by the plugin, exposed to the user, used by reflection ops\nvar reflection_info_1 = require(\"./reflection-info\");\nObject.defineProperty(exports, \"ScalarType\", { enumerable: true, get: function () { return reflection_info_1.ScalarType; } });\nObject.defineProperty(exports, \"LongType\", { enumerable: true, get: function () { return reflection_info_1.LongType; } });\nObject.defineProperty(exports, \"RepeatType\", { enumerable: true, get: function () { return reflection_info_1.RepeatType; } });\nObject.defineProperty(exports, \"normalizeFieldInfo\", { enumerable: true, get: function () { return reflection_info_1.normalizeFieldInfo; } });\nObject.defineProperty(exports, \"readFieldOptions\", { enumerable: true, get: function () { return reflection_info_1.readFieldOptions; } });\nObject.defineProperty(exports, \"readFieldOption\", { enumerable: true, get: function () { return reflection_info_1.readFieldOption; } });\nObject.defineProperty(exports, \"readMessageOption\", { enumerable: true, get: function () { return reflection_info_1.readMessageOption; } });\n// Message operations via reflection\nvar reflection_type_check_1 = require(\"./reflection-type-check\");\nObject.defineProperty(exports, \"ReflectionTypeCheck\", { enumerable: true, get: function () { return reflection_type_check_1.ReflectionTypeCheck; } });\nvar reflection_create_1 = require(\"./reflection-create\");\nObject.defineProperty(exports, \"reflectionCreate\", { enumerable: true, get: function () { return reflection_create_1.reflectionCreate; } });\nvar reflection_scalar_default_1 = require(\"./reflection-scalar-default\");\nObject.defineProperty(exports, \"reflectionScalarDefault\", { enumerable: true, get: function () { return reflection_scalar_default_1.reflectionScalarDefault; } });\nvar reflection_merge_partial_1 = require(\"./reflection-merge-partial\");\nObject.defineProperty(exports, \"reflectionMergePartial\", { enumerable: true, get: function () { return reflection_merge_partial_1.reflectionMergePartial; } });\nvar reflection_equals_1 = require(\"./reflection-equals\");\nObject.defineProperty(exports, \"reflectionEquals\", { enumerable: true, get: function () { return reflection_equals_1.reflectionEquals; } });\nvar reflection_binary_reader_1 = require(\"./reflection-binary-reader\");\nObject.defineProperty(exports, \"ReflectionBinaryReader\", { enumerable: true, get: function () { return reflection_binary_reader_1.ReflectionBinaryReader; } });\nvar reflection_binary_writer_1 = require(\"./reflection-binary-writer\");\nObject.defineProperty(exports, \"ReflectionBinaryWriter\", { enumerable: true, get: function () { return reflection_binary_writer_1.ReflectionBinaryWriter; } });\nvar reflection_json_reader_1 = require(\"./reflection-json-reader\");\nObject.defineProperty(exports, \"ReflectionJsonReader\", { enumerable: true, get: function () { return reflection_json_reader_1.ReflectionJsonReader; } });\nvar reflection_json_writer_1 = require(\"./reflection-json-writer\");\nObject.defineProperty(exports, \"ReflectionJsonWriter\", { enumerable: true, get: function () { return reflection_json_writer_1.ReflectionJsonWriter; } });\nvar reflection_contains_message_type_1 = require(\"./reflection-contains-message-type\");\nObject.defineProperty(exports, \"containsMessageType\", { enumerable: true, get: function () { return reflection_contains_message_type_1.containsMessageType; } });\n// Oneof helpers\nvar oneof_1 = require(\"./oneof\");\nObject.defineProperty(exports, \"isOneofGroup\", { enumerable: true, get: function () { return oneof_1.isOneofGroup; } });\nObject.defineProperty(exports, \"setOneofValue\", { enumerable: true, get: function () { return oneof_1.setOneofValue; } });\nObject.defineProperty(exports, \"getOneofValue\", { enumerable: true, get: function () { return oneof_1.getOneofValue; } });\nObject.defineProperty(exports, \"clearOneofValue\", { enumerable: true, get: function () { return oneof_1.clearOneofValue; } });\nObject.defineProperty(exports, \"getSelectedOneofValue\", { enumerable: true, get: function () { return oneof_1.getSelectedOneofValue; } });\n// Enum object type guard and reflection util, may be interesting to the user.\nvar enum_object_1 = require(\"./enum-object\");\nObject.defineProperty(exports, \"listEnumValues\", { enumerable: true, get: function () { return enum_object_1.listEnumValues; } });\nObject.defineProperty(exports, \"listEnumNames\", { enumerable: true, get: function () { return enum_object_1.listEnumNames; } });\nObject.defineProperty(exports, \"listEnumNumbers\", { enumerable: true, get: function () { return enum_object_1.listEnumNumbers; } });\nObject.defineProperty(exports, \"isEnumObject\", { enumerable: true, get: function () { return enum_object_1.isEnumObject; } });\n// lowerCamelCase() is exported for plugin, rpc-runtime and other rpc packages\nvar lower_camel_case_1 = require(\"./lower-camel-case\");\nObject.defineProperty(exports, \"lowerCamelCase\", { enumerable: true, get: function () { return lower_camel_case_1.lowerCamelCase; } });\n// assertion functions are exported for plugin, may also be useful to user\nvar assert_1 = require(\"./assert\");\nObject.defineProperty(exports, \"assert\", { enumerable: true, get: function () { return assert_1.assert; } });\nObject.defineProperty(exports, \"assertNever\", { enumerable: true, get: function () { return assert_1.assertNever; } });\nObject.defineProperty(exports, \"assertInt32\", { enumerable: true, get: function () { return assert_1.assertInt32; } });\nObject.defineProperty(exports, \"assertUInt32\", { enumerable: true, get: function () { return assert_1.assertUInt32; } });\nObject.defineProperty(exports, \"assertFloat32\", { enumerable: true, get: function () { return assert_1.assertFloat32; } });\n", "var isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n", "\"use strict\";\nvar es5 = require(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var receiver = new FakeConstructor();\n    function ic() {\n        return typeof receiver.foo;\n    }\n    ic();\n    ic();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj instanceof Error ||\n        (obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if (classString(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nvar reflectHandler;\nfunction contextBind(ctx, cb) {\n    if (ctx === null ||\n        typeof cb !== \"function\" ||\n        cb === reflectHandler) {\n        return cb;\n    }\n\n    if (ctx.domain !== null) {\n        cb = ctx.domain.bind(cb);\n    }\n\n    var async = ctx.async;\n    if (async !== null) {\n        var old = cb;\n        cb = function() {\n            var $_len = arguments.length + 2;var args = new Array($_len); for(var $_i = 2; $_i < $_len ; ++$_i) {args[$_i] = arguments[$_i  - 2];};\n            args[0] = old;\n            args[1] = this;\n            return async.runInAsyncScope.apply(async, args);\n        };\n    }\n    return cb;\n}\n\nvar ret = {\n    setReflectHandler: function(fn) {\n        reflectHandler = fn;\n    },\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    contextBind: contextBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version;\n    if (process.versions && process.versions.node) {\n        version = process.versions.node.split(\".\").map(Number);\n    } else if (process.version) {\n        version = process.version.split(\".\").map(Number);\n    }\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\nret.nodeSupportsAsyncResource = ret.isNode && (function() {\n    var supportsAsync = false;\n    try {\n        var res = require(\"async_hooks\").AsyncResource;\n        supportsAsync = typeof res.prototype.runInAsyncScope === \"function\";\n    } catch (e) {\n        supportsAsync = false;\n    }\n    return supportsAsync;\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n", "\"use strict\";\nvar util = require(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova)) &&\n          (\"classList\" in document.documentElement)) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n        };\n\n        return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n", "\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n", "\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = require(\"./schedule\");\nvar Queue = require(\"./queue\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nAsync.prototype.invokeLater = AsyncInvokeLater;\nAsync.prototype.invoke = AsyncInvoke;\nAsync.prototype.settlePromises = AsyncSettlePromises;\n\n\nfunction _drainQueue(queue) {\n    while (queue.length() > 0) {\n        _drainQueueStep(queue);\n    }\n}\n\nfunction _drainQueueStep(queue) {\n    var fn = queue.shift();\n    if (typeof fn !== \"function\") {\n        fn._settlePromises();\n    } else {\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n}\n\nAsync.prototype._drainQueues = function () {\n    _drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n", "\"use strict\";\nvar es5 = require(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = require(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = require(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    case -6: return new Map();\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n        values.suppressUnhandledRejections();\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, Context,\n    enableAsyncHooks, disableAsyncHooks) {\nvar async = Promise._async;\nvar Warning = require(\"./errors\").Warning;\nvar util = require(\"./util\");\nvar es5 = require(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (false ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nvar deferUnhandledRejectionCheck;\n(function() {\n    var promises = [];\n\n    function unhandledRejectionCheck() {\n        for (var i = 0; i < promises.length; ++i) {\n            promises[i]._notifyUnhandledRejection();\n        }\n        unhandledRejectionClear();\n    }\n\n    function unhandledRejectionClear() {\n        promises.length = 0;\n    }\n\n    deferUnhandledRejectionCheck = function(promise) {\n        promises.push(promise);\n        setTimeout(unhandledRejectionCheck, 1);\n    };\n\n    es5.defineProperty(Promise, \"_unhandledRejectionCheck\", {\n        value: unhandledRejectionCheck\n    });\n    es5.defineProperty(Promise, \"_unhandledRejectionClear\", {\n        value: unhandledRejectionClear\n    });\n})();\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    deferUnhandledRejectionCheck(this);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var context = Promise._getContext();\n    possiblyUnhandledRejection = util.contextBind(context, fn);\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var context = Promise._getContext();\n    unhandledRejectionHandled = util.contextBind(context, fn);\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n            Context.deactivateLongStackTraces();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n        Context.activateLongStackTraces();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\n\nvar legacyHandlers = {\n    unhandledrejection: {\n        before: function() {\n            var ret = util.global.onunhandledrejection;\n            util.global.onunhandledrejection = null;\n            return ret;\n        },\n        after: function(fn) {\n            util.global.onunhandledrejection = fn;\n        }\n    },\n    rejectionhandled: {\n        before: function() {\n            var ret = util.global.onrejectionhandled;\n            util.global.onrejectionhandled = null;\n            return ret;\n        },\n        after: function(fn) {\n            util.global.onrejectionhandled = fn;\n        }\n    }\n};\n\nvar fireDomEvent = (function() {\n    var dispatch = function(legacy, e) {\n        if (legacy) {\n            var fn;\n            try {\n                fn = legacy.before();\n                return !util.global.dispatchEvent(e);\n            } finally {\n                legacy.after(fn);\n            }\n        } else {\n            return !util.global.dispatchEvent(e);\n        }\n    };\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var eventData = {\n                    detail: event,\n                    cancelable: true\n                };\n                var domEvent = new CustomEvent(name, eventData);\n                es5.defineProperty(\n                    domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(\n                    domEvent, \"reason\", {value: event.reason});\n\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var domEvent = new Event(name, {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                name = name.toLowerCase();\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name, false, true,\n                    event);\n                return dispatch(legacyHandlers[name], domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    if (\"asyncHooks\" in opts && util.nodeSupportsAsyncResource) {\n        var prev = config.asyncHooks;\n        var cur = !!opts.asyncHooks;\n        if (prev !== cur) {\n            config.asyncHooks = cur;\n            if (cur) {\n                enableAsyncHooks();\n            } else {\n                disableAsyncHooks();\n            }\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction longStackTracesDereferenceTrace() {\n    this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n    var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false,\n    asyncHooks: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    asyncHooks: function() {\n        return config.asyncHooks;\n    },\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n", "\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = require(\"./util\");\nvar getKeys = require(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = require(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = require(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret === NEXT_FILTER) {\n            return ret;\n        } else if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n    var len = arguments.length;\n    if(len === 1) {\n        return this._passThrough(handlerOrPredicate,\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    } else {\n         var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(new TypeError(\n                    \"tapCatch statement predicate: \"\n                    + \"expecting an object but got \" + util.classString(item)\n                ));\n            }\n        }\n        catchInstances.length = j;\n        var handler = arguments[i];\n        return this._passThrough(catchFilter(catchInstances, handler, this),\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n", "\"use strict\";\nvar util = require(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = require(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = require(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!false) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!false) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var context = Promise._getContext();\n                        holder.fn = util.contextBind(context, holder.fn);\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len ; ++$_i) {args[$_i] = arguments[$_i ];};\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n", "\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!false) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};\n    if (!false) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = require(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = require(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var context = Promise._getContext();\n    this._callback = util.contextBind(context, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n    if (util.isArray(promises)) {\n        for (var i = 0; i < promises.length; ++i) {\n            var maybePromise = promises[i];\n            if (maybePromise instanceof Promise) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        }\n    }\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar util = require(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = require(\"./util\");\nvar nodebackForPromise = require(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = require(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!false) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n", "\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\nvar isObject = util.isObject;\nvar es5 = require(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n", "\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = require(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar util = require(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var context = Promise._getContext();\n    this._fn = util.contextBind(context, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined &&\n        this._eachValues !== null &&\n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    for (var j = i; j < length; ++j) {\n        var maybePromise = values[j];\n        if (maybePromise instanceof Promise) {\n            maybePromise.suppressUnhandledRejections();\n        }\n    }\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n\n            if ((i & 127) === 0) {\n                value._setNoAsyncGuarantee();\n            }\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n", "\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = require(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.allSettled = function (promises) {\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n", "\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = require(\"./util\");\nvar RangeError = require(\"./errors\").RangeError;\nvar AggregateError = require(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = require(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n", "\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = require(\"./util\");\n    var TypeError = require(\"./errors\").TypeError;\n    var inherits = require(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n", "\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n", "\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = require(\"./util\");\nutil.setReflectHandler(reflectHandler);\n\nvar getDomain = function() {\n    var domain = process.domain;\n    if (domain === undefined) {\n        return null;\n    }\n    return domain;\n};\nvar getContextDefault = function() {\n    return null;\n};\nvar getContextDomain = function() {\n    return {\n        domain: getDomain(),\n        async: null\n    };\n};\nvar AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?\n    require(\"async_hooks\").AsyncResource : null;\nvar getContextAsyncHooks = function() {\n    return {\n        domain: getDomain(),\n        async: new AsyncResource(\"Bluebird::Promise\")\n    };\n};\nvar getContext = util.isNode ? getContextDomain : getContextDefault;\nutil.notEnumerableProp(Promise, \"_getContext\", getContext);\nvar enableAsyncHooks = function() {\n    getContext = getContextAsyncHooks;\n    util.notEnumerableProp(Promise, \"_getContext\", getContextAsyncHooks);\n};\nvar disableAsyncHooks = function() {\n    getContext = getContextDomain;\n    util.notEnumerableProp(Promise, \"_getContext\", getContextDomain);\n};\n\nvar es5 = require(\"./es5\");\nvar Async = require(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = require(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = require(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    require(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = require(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\n\nvar debug = require(\"./debuggability\")(Promise, Context,\n    enableAsyncHooks, disableAsyncHooks);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    require(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = require(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = require(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (self == null || self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n\n}\n\nfunction Promise(executor) {\n    if (executor !== INTERNAL) {\n        check(this, executor);\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._resolveFromExecutor(executor);\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"Catch statement predicate: \" +\n                    \"expecting an object but got \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n\n        if (typeof fn !== \"function\") {\n            throw new TypeError(\"The last argument to .catch() \" +\n                \"must be a function, got \" + util.toString(fn));\n        }\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var context = getContext();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: util.contextBind(context, handler),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise,\n                receiver, context);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    var bitField = this._bitField;\n    this._bitField = bitField |\n        (((bitField & 536870912) >> 2) ^\n        134217728);\n};\n\nPromise.prototype._setNoAsyncGuarantee = function() {\n    this._bitField = (this._bitField | 536870912) &\n        (~134217728);\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    context\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 = util.contextBind(context, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 = util.contextBind(context, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                util.contextBind(context, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                util.contextBind(context, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(maybePromise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    if (executor === INTERNAL) return;\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n        this._dereferenceTrace();\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n    es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n        get: function () {\n            return \"Object\";\n        }\n    });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\nrequire(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\nrequire(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\nrequire(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\nrequire(\"./direct_resolve\")(Promise);\nrequire(\"./synchronous_inspection\")(Promise);\nrequire(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);\nPromise.Promise = Promise;\nPromise.version = \"3.7.2\";\nrequire('./call_get.js')(Promise);\nrequire('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\nrequire('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./nodeify.js')(Promise);\nrequire('./promisify.js')(Promise, INTERNAL);\nrequire('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\nrequire('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\nrequire('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\nrequire('./settle.js')(Promise, PromiseArray, debug);\nrequire('./some.js')(Promise, PromiseArray, apiRejection);\nrequire('./timers.js')(Promise, INTERNAL, debug);\nrequire('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\nrequire('./any.js')(Promise);\nrequire('./each.js')(Promise, INTERNAL);\nrequire('./filter.js')(Promise, INTERNAL);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n", "\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = require(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n", "'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n  BINARY_TYPES,\n  CLOSE_TIMEOUT: 30000,\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  hasBlob,\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n", "var fs = require('fs')\nvar path = require('path')\nvar os = require('os')\n\n// Workaround to fix webpack's build warnings: 'the request of a dependency is an expression'\nvar runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\n\nvar vars = (process.config && process.config.variables) || {}\nvar prebuildsOnly = !!process.env.PREBUILDS_ONLY\nvar abi = process.versions.modules // TODO: support old node where this is undef\nvar runtime = isElectron() ? 'electron' : (isNwjs() ? 'node-webkit' : 'node')\n\nvar arch = process.env.npm_config_arch || os.arch()\nvar platform = process.env.npm_config_platform || os.platform()\nvar libc = process.env.LIBC || (isAlpine(platform) ? 'musl' : 'glibc')\nvar armv = process.env.ARM_VERSION || (arch === 'arm64' ? '8' : vars.arm_version) || ''\nvar uv = (process.versions.uv || '').split('.')[0]\n\nmodule.exports = load\n\nfunction load (dir) {\n  return runtimeRequire(load.resolve(dir))\n}\n\nload.resolve = load.path = function (dir) {\n  dir = path.resolve(dir || '.')\n\n  try {\n    var name = runtimeRequire(path.join(dir, 'package.json')).name.toUpperCase().replace(/-/g, '_')\n    if (process.env[name + '_PREBUILD']) dir = process.env[name + '_PREBUILD']\n  } catch (err) {}\n\n  if (!prebuildsOnly) {\n    var release = getFirst(path.join(dir, 'build/Release'), matchBuild)\n    if (release) return release\n\n    var debug = getFirst(path.join(dir, 'build/Debug'), matchBuild)\n    if (debug) return debug\n  }\n\n  var prebuild = resolve(dir)\n  if (prebuild) return prebuild\n\n  var nearby = resolve(path.dirname(process.execPath))\n  if (nearby) return nearby\n\n  var target = [\n    'platform=' + platform,\n    'arch=' + arch,\n    'runtime=' + runtime,\n    'abi=' + abi,\n    'uv=' + uv,\n    armv ? 'armv=' + armv : '',\n    'libc=' + libc,\n    'node=' + process.versions.node,\n    process.versions.electron ? 'electron=' + process.versions.electron : '',\n    typeof __webpack_require__ === 'function' ? 'webpack=true' : '' // eslint-disable-line\n  ].filter(Boolean).join(' ')\n\n  throw new Error('No native build was found for ' + target + '\\n    loaded from: ' + dir + '\\n')\n\n  function resolve (dir) {\n    // Find matching \"prebuilds/<platform>-<arch>\" directory\n    var tuples = readdirSync(path.join(dir, 'prebuilds')).map(parseTuple)\n    var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0]\n    if (!tuple) return\n\n    // Find most specific flavor first\n    var prebuilds = path.join(dir, 'prebuilds', tuple.name)\n    var parsed = readdirSync(prebuilds).map(parseTags)\n    var candidates = parsed.filter(matchTags(runtime, abi))\n    var winner = candidates.sort(compareTags(runtime))[0]\n    if (winner) return path.join(prebuilds, winner.file)\n  }\n}\n\nfunction readdirSync (dir) {\n  try {\n    return fs.readdirSync(dir)\n  } catch (err) {\n    return []\n  }\n}\n\nfunction getFirst (dir, filter) {\n  var files = readdirSync(dir).filter(filter)\n  return files[0] && path.join(dir, files[0])\n}\n\nfunction matchBuild (name) {\n  return /\\.node$/.test(name)\n}\n\nfunction parseTuple (name) {\n  // Example: darwin-x64+arm64\n  var arr = name.split('-')\n  if (arr.length !== 2) return\n\n  var platform = arr[0]\n  var architectures = arr[1].split('+')\n\n  if (!platform) return\n  if (!architectures.length) return\n  if (!architectures.every(Boolean)) return\n\n  return { name, platform, architectures }\n}\n\nfunction matchTuple (platform, arch) {\n  return function (tuple) {\n    if (tuple == null) return false\n    if (tuple.platform !== platform) return false\n    return tuple.architectures.includes(arch)\n  }\n}\n\nfunction compareTuples (a, b) {\n  // Prefer single-arch prebuilds over multi-arch\n  return a.architectures.length - b.architectures.length\n}\n\nfunction parseTags (file) {\n  var arr = file.split('.')\n  var extension = arr.pop()\n  var tags = { file: file, specificity: 0 }\n\n  if (extension !== 'node') return\n\n  for (var i = 0; i < arr.length; i++) {\n    var tag = arr[i]\n\n    if (tag === 'node' || tag === 'electron' || tag === 'node-webkit') {\n      tags.runtime = tag\n    } else if (tag === 'napi') {\n      tags.napi = true\n    } else if (tag.slice(0, 3) === 'abi') {\n      tags.abi = tag.slice(3)\n    } else if (tag.slice(0, 2) === 'uv') {\n      tags.uv = tag.slice(2)\n    } else if (tag.slice(0, 4) === 'armv') {\n      tags.armv = tag.slice(4)\n    } else if (tag === 'glibc' || tag === 'musl') {\n      tags.libc = tag\n    } else {\n      continue\n    }\n\n    tags.specificity++\n  }\n\n  return tags\n}\n\nfunction matchTags (runtime, abi) {\n  return function (tags) {\n    if (tags == null) return false\n    if (tags.runtime && tags.runtime !== runtime && !runtimeAgnostic(tags)) return false\n    if (tags.abi && tags.abi !== abi && !tags.napi) return false\n    if (tags.uv && tags.uv !== uv) return false\n    if (tags.armv && tags.armv !== armv) return false\n    if (tags.libc && tags.libc !== libc) return false\n\n    return true\n  }\n}\n\nfunction runtimeAgnostic (tags) {\n  return tags.runtime === 'node' && tags.napi\n}\n\nfunction compareTags (runtime) {\n  // Precedence: non-agnostic runtime, abi over napi, then by specificity.\n  return function (a, b) {\n    if (a.runtime !== b.runtime) {\n      return a.runtime === runtime ? -1 : 1\n    } else if (a.abi !== b.abi) {\n      return a.abi ? -1 : 1\n    } else if (a.specificity !== b.specificity) {\n      return a.specificity > b.specificity ? -1 : 1\n    } else {\n      return 0\n    }\n  }\n}\n\nfunction isNwjs () {\n  return !!(process.versions && process.versions.nw)\n}\n\nfunction isElectron () {\n  if (process.versions && process.versions.electron) return true\n  if (process.env.ELECTRON_RUN_AS_NODE) return true\n  return typeof window !== 'undefined' && window.process && window.process.type === 'renderer'\n}\n\nfunction isAlpine (platform) {\n  return platform === 'linux' && fs.existsSync('/etc/alpine-release')\n}\n\n// Exposed for unit tests\n// TODO: move to lib\nload.parseTags = parseTags\nload.matchTags = matchTags\nload.compareTags = compareTags\nload.parseTuple = parseTuple\nload.matchTuple = matchTuple\nload.compareTuples = compareTuples\n", "const runtimeRequire = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require // eslint-disable-line\nif (typeof runtimeRequire.addon === 'function') { // if the platform supports native resolving prefer that\n  module.exports = runtimeRequire.addon.bind(runtimeRequire)\n} else { // else use the runtime version here\n  module.exports = require('./node-gyp-build.js')\n}\n", "'use strict';\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nconst mask = (source, mask, output, offset, length) => {\n  for (var i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n};\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nconst unmask = (buffer, mask) => {\n  // Required until https://github.com/nodejs/node/issues/9006 is resolved.\n  const length = buffer.length;\n  for (var i = 0; i < length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n};\n\nmodule.exports = { mask, unmask };\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n  if (list.length === 0) return EMPTY_BUFFER;\n  if (list.length === 1) return list[0];\n\n  const target = Buffer.allocUnsafe(totalLength);\n  let offset = 0;\n\n  for (let i = 0; i < list.length; i++) {\n    const buf = list[i];\n    target.set(buf, offset);\n    offset += buf.length;\n  }\n\n  if (offset < totalLength) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\n\n  return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n  for (let i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n  for (let i = 0; i < buffer.length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n  if (buf.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n  toBuffer.readOnly = true;\n\n  if (Buffer.isBuffer(data)) return data;\n\n  let buf;\n\n  if (data instanceof ArrayBuffer) {\n    buf = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n  /**\n   * Creates a new `Limiter`.\n   *\n   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n   *     to run concurrently\n   */\n  constructor(concurrency) {\n    this[kDone] = () => {\n      this.pending--;\n      this[kRun]();\n    };\n    this.concurrency = concurrency || Infinity;\n    this.jobs = [];\n    this.pending = 0;\n  }\n\n  /**\n   * Adds a job to the queue.\n   *\n   * @param {Function} job The job to run\n   * @public\n   */\n  add(job) {\n    this.jobs.push(job);\n    this[kRun]();\n  }\n\n  /**\n   * Removes a job from the queue and runs it if possible.\n   *\n   * @private\n   */\n  [kRun]() {\n    if (this.pending === this.concurrency) return;\n\n    if (this.jobs.length) {\n      const job = this.jobs.shift();\n\n      this.pending++;\n      job(this[kDone]);\n    }\n  }\n}\n\nmodule.exports = Limiter;\n", "'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n  /**\n   * Creates a PerMessageDeflate instance.\n   *\n   * @param {Object} [options] Configuration options\n   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {Boolean} [options.isServer=false] Create the instance in either\n   *     server or client mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\n   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n   *     deflate\n   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n   *     inflate\n   */\n  constructor(options) {\n    this._options = options || {};\n    this._threshold =\n      this._options.threshold !== undefined ? this._options.threshold : 1024;\n    this._maxPayload = this._options.maxPayload | 0;\n    this._isServer = !!this._options.isServer;\n    this._deflate = null;\n    this._inflate = null;\n\n    this.params = null;\n\n    if (!zlibLimiter) {\n      const concurrency =\n        this._options.concurrencyLimit !== undefined\n          ? this._options.concurrencyLimit\n          : 10;\n      zlibLimiter = new Limiter(concurrency);\n    }\n  }\n\n  /**\n   * @type {String}\n   */\n  static get extensionName() {\n    return 'permessage-deflate';\n  }\n\n  /**\n   * Create an extension negotiation offer.\n   *\n   * @return {Object} Extension parameters\n   * @public\n   */\n  offer() {\n    const params = {};\n\n    if (this._options.serverNoContextTakeover) {\n      params.server_no_context_takeover = true;\n    }\n    if (this._options.clientNoContextTakeover) {\n      params.client_no_context_takeover = true;\n    }\n    if (this._options.serverMaxWindowBits) {\n      params.server_max_window_bits = this._options.serverMaxWindowBits;\n    }\n    if (this._options.clientMaxWindowBits) {\n      params.client_max_window_bits = this._options.clientMaxWindowBits;\n    } else if (this._options.clientMaxWindowBits == null) {\n      params.client_max_window_bits = true;\n    }\n\n    return params;\n  }\n\n  /**\n   * Accept an extension negotiation offer/response.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Object} Accepted configuration\n   * @public\n   */\n  accept(configurations) {\n    configurations = this.normalizeParams(configurations);\n\n    this.params = this._isServer\n      ? this.acceptAsServer(configurations)\n      : this.acceptAsClient(configurations);\n\n    return this.params;\n  }\n\n  /**\n   * Releases all resources used by the extension.\n   *\n   * @public\n   */\n  cleanup() {\n    if (this._inflate) {\n      this._inflate.close();\n      this._inflate = null;\n    }\n\n    if (this._deflate) {\n      const callback = this._deflate[kCallback];\n\n      this._deflate.close();\n      this._deflate = null;\n\n      if (callback) {\n        callback(\n          new Error(\n            'The deflate stream was closed while data was being processed'\n          )\n        );\n      }\n    }\n  }\n\n  /**\n   *  Accept an extension negotiation offer.\n   *\n   * @param {Array} offers The extension negotiation offers\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsServer(offers) {\n    const opts = this._options;\n    const accepted = offers.find((params) => {\n      if (\n        (opts.serverNoContextTakeover === false &&\n          params.server_no_context_takeover) ||\n        (params.server_max_window_bits &&\n          (opts.serverMaxWindowBits === false ||\n            (typeof opts.serverMaxWindowBits === 'number' &&\n              opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n        (typeof opts.clientMaxWindowBits === 'number' &&\n          !params.client_max_window_bits)\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n\n    if (!accepted) {\n      throw new Error('None of the extension offers can be accepted');\n    }\n\n    if (opts.serverNoContextTakeover) {\n      accepted.server_no_context_takeover = true;\n    }\n    if (opts.clientNoContextTakeover) {\n      accepted.client_no_context_takeover = true;\n    }\n    if (typeof opts.serverMaxWindowBits === 'number') {\n      accepted.server_max_window_bits = opts.serverMaxWindowBits;\n    }\n    if (typeof opts.clientMaxWindowBits === 'number') {\n      accepted.client_max_window_bits = opts.clientMaxWindowBits;\n    } else if (\n      accepted.client_max_window_bits === true ||\n      opts.clientMaxWindowBits === false\n    ) {\n      delete accepted.client_max_window_bits;\n    }\n\n    return accepted;\n  }\n\n  /**\n   * Accept the extension negotiation response.\n   *\n   * @param {Array} response The extension negotiation response\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsClient(response) {\n    const params = response[0];\n\n    if (\n      this._options.clientNoContextTakeover === false &&\n      params.client_no_context_takeover\n    ) {\n      throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n    }\n\n    if (!params.client_max_window_bits) {\n      if (typeof this._options.clientMaxWindowBits === 'number') {\n        params.client_max_window_bits = this._options.clientMaxWindowBits;\n      }\n    } else if (\n      this._options.clientMaxWindowBits === false ||\n      (typeof this._options.clientMaxWindowBits === 'number' &&\n        params.client_max_window_bits > this._options.clientMaxWindowBits)\n    ) {\n      throw new Error(\n        'Unexpected or invalid parameter \"client_max_window_bits\"'\n      );\n    }\n\n    return params;\n  }\n\n  /**\n   * Normalize parameters.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Array} The offers/response with normalized parameters\n   * @private\n   */\n  normalizeParams(configurations) {\n    configurations.forEach((params) => {\n      Object.keys(params).forEach((key) => {\n        let value = params[key];\n\n        if (value.length > 1) {\n          throw new Error(`Parameter \"${key}\" must have only a single value`);\n        }\n\n        value = value[0];\n\n        if (key === 'client_max_window_bits') {\n          if (value !== true) {\n            const num = +value;\n            if (!Number.isInteger(num) || num < 8 || num > 15) {\n              throw new TypeError(\n                `Invalid value for parameter \"${key}\": ${value}`\n              );\n            }\n            value = num;\n          } else if (!this._isServer) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else if (key === 'server_max_window_bits') {\n          const num = +value;\n          if (!Number.isInteger(num) || num < 8 || num > 15) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n          value = num;\n        } else if (\n          key === 'client_no_context_takeover' ||\n          key === 'server_no_context_takeover'\n        ) {\n          if (value !== true) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else {\n          throw new Error(`Unknown parameter \"${key}\"`);\n        }\n\n        params[key] = value;\n      });\n    });\n\n    return configurations;\n  }\n\n  /**\n   * Decompress data. Concurrency limited.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  decompress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._decompress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Compress data. Concurrency limited.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  compress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._compress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Decompress data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _decompress(data, fin, callback) {\n    const endpoint = this._isServer ? 'client' : 'server';\n\n    if (!this._inflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._inflate = zlib.createInflateRaw({\n        ...this._options.zlibInflateOptions,\n        windowBits\n      });\n      this._inflate[kPerMessageDeflate] = this;\n      this._inflate[kTotalLength] = 0;\n      this._inflate[kBuffers] = [];\n      this._inflate.on('error', inflateOnError);\n      this._inflate.on('data', inflateOnData);\n    }\n\n    this._inflate[kCallback] = callback;\n\n    this._inflate.write(data);\n    if (fin) this._inflate.write(TRAILER);\n\n    this._inflate.flush(() => {\n      const err = this._inflate[kError];\n\n      if (err) {\n        this._inflate.close();\n        this._inflate = null;\n        callback(err);\n        return;\n      }\n\n      const data = bufferUtil.concat(\n        this._inflate[kBuffers],\n        this._inflate[kTotalLength]\n      );\n\n      if (this._inflate._readableState.endEmitted) {\n        this._inflate.close();\n        this._inflate = null;\n      } else {\n        this._inflate[kTotalLength] = 0;\n        this._inflate[kBuffers] = [];\n\n        if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n          this._inflate.reset();\n        }\n      }\n\n      callback(null, data);\n    });\n  }\n\n  /**\n   * Compress data.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _compress(data, fin, callback) {\n    const endpoint = this._isServer ? 'server' : 'client';\n\n    if (!this._deflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._deflate = zlib.createDeflateRaw({\n        ...this._options.zlibDeflateOptions,\n        windowBits\n      });\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      this._deflate.on('data', deflateOnData);\n    }\n\n    this._deflate[kCallback] = callback;\n\n    this._deflate.write(data);\n    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n      if (!this._deflate) {\n        //\n        // The deflate stream was closed while data was being processed.\n        //\n        return;\n      }\n\n      let data = bufferUtil.concat(\n        this._deflate[kBuffers],\n        this._deflate[kTotalLength]\n      );\n\n      if (fin) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\n\n      //\n      // Ensure that the callback will not be called again in\n      // `PerMessageDeflate#cleanup()`.\n      //\n      this._deflate[kCallback] = null;\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n        this._deflate.reset();\n      }\n\n      callback(null, data);\n    });\n  }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n  this[kBuffers].push(chunk);\n  this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n  this[kTotalLength] += chunk.length;\n\n  if (\n    this[kPerMessageDeflate]._maxPayload < 1 ||\n    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n  ) {\n    this[kBuffers].push(chunk);\n    return;\n  }\n\n  this[kError] = new RangeError('Max payload size exceeded');\n  this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n  this[kError][kStatusCode] = 1009;\n  this.removeListener('data', inflateOnData);\n\n  //\n  // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n  // fact that in Node.js versions prior to 13.10.0, the callback for\n  // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n  // `zlib.reset()` ensures that either the callback is invoked or an error is\n  // emitted.\n  //\n  this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n  //\n  // There is no need to call `Zlib#close()` as the handle is automatically\n  // closed when an error is emitted.\n  //\n  this[kPerMessageDeflate]._inflate = null;\n\n  if (this[kError]) {\n    this[kCallback](this[kError]);\n    return;\n  }\n\n  err[kStatusCode] = 1007;\n  this[kCallback](err);\n}\n", "'use strict';\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0x00) {  // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {  // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0  // overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {  // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80 ||  // overlong\n        buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0  // surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {  // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80 ||  // overlong\n        buf[i] === 0xf4 && buf[i + 1] > 0x8f || buf[i] > 0xf4  // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = isValidUTF8;\n", "'use strict';\n\ntry {\n  module.exports = require('node-gyp-build')(__dirname);\n} catch (e) {\n  module.exports = require('./fallback');\n}\n", "'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n  return (\n    (code >= 1000 &&\n      code <= 1014 &&\n      code !== 1004 &&\n      code !== 1005 &&\n      code !== 1006) ||\n    (code >= 3000 && code <= 4999)\n  );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0) {\n      // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {\n      // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0 // Overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {\n      // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {\n      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n        buf[i] > 0xf4 // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n  return (\n    hasBlob &&\n    typeof value === 'object' &&\n    typeof value.arrayBuffer === 'function' &&\n    typeof value.type === 'string' &&\n    typeof value.stream === 'function' &&\n    (value[Symbol.toStringTag] === 'Blob' ||\n      value[Symbol.toStringTag] === 'File')\n  );\n}\n\nmodule.exports = {\n  isBlob,\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  kStatusCode,\n  kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=0] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxBufferedChunks = options.maxBufferedChunks | 0;\n    this._maxFragments = options.maxFragments | 0;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\n\n    this._bufferedBytes = 0;\n    this._buffers = [];\n\n    this._compressed = false;\n    this._payloadLength = 0;\n    this._mask = undefined;\n    this._fragmented = 0;\n    this._masked = false;\n    this._fin = false;\n    this._opcode = 0;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._numFragments = 0;\n    this._fragments = [];\n\n    this._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\n  }\n\n  /**\n   * Implements `Writable.prototype._write()`.\n   *\n   * @param {Buffer} chunk The chunk of data to write\n   * @param {String} encoding The character encoding of `chunk`\n   * @param {Function} cb Callback\n   * @private\n   */\n  _write(chunk, encoding, cb) {\n    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n    if (\n      this._maxBufferedChunks > 0 &&\n      this._buffers.length >= this._maxBufferedChunks\n    ) {\n      cb(\n        this.createError(\n          RangeError,\n          'Too many buffered chunks',\n          false,\n          1008,\n          'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n        )\n      );\n      return;\n    }\n\n    this._bufferedBytes += chunk.length;\n    this._buffers.push(chunk);\n    this.startLoop(cb);\n  }\n\n  /**\n   * Consumes `n` bytes from the buffered data.\n   *\n   * @param {Number} n The number of bytes to consume\n   * @return {Buffer} The consumed bytes\n   * @private\n   */\n  consume(n) {\n    this._bufferedBytes -= n;\n\n    if (n === this._buffers[0].length) return this._buffers.shift();\n\n    if (n < this._buffers[0].length) {\n      const buf = this._buffers[0];\n      this._buffers[0] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, n);\n    }\n\n    const dst = Buffer.allocUnsafe(n);\n\n    do {\n      const buf = this._buffers[0];\n      const offset = dst.length - n;\n\n      if (n >= buf.length) {\n        dst.set(this._buffers.shift(), offset);\n      } else {\n        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n        this._buffers[0] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\n        );\n      }\n\n      n -= buf.length;\n    } while (n > 0);\n\n    return dst;\n  }\n\n  /**\n   * Starts the parsing loop.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  startLoop(cb) {\n    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(2);\n\n    if ((buf[0] & 0x30) !== 0x00) {\n      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._fin = (buf[0] & 0x80) === 0x80;\n    this._opcode = buf[0] & 0x0f;\n    this._payloadLength = buf[1] & 0x7f;\n\n    if (this._opcode === 0x00) {\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n    this._masked = (buf[1] & 0x80) === 0x80;\n\n    if (this._isServer) {\n      if (!this._masked) {\n        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n    else this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\n    if (this._bufferedBytes < 8) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(8);\n    const num = buf.readUInt32BE(0);\n\n    //\n    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n    // if payload length is greater than this number.\n    //\n    if (num > Math.pow(2, 53 - 32) - 1) {\n      const error = this.createError(\n        RangeError,\n        'Unsupported WebSocket frame: payload length > 2^53 - 1',\n        false,\n        1009,\n        'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    }\n\n    if (this._masked) this._state = GET_MASK;\n    else this._state = GET_DATA;\n  }\n\n  /**\n   * Reads mask bytes.\n   *\n   * @private\n   */\n  getMask() {\n    if (this._bufferedBytes < 4) {\n      this._loop = false;\n      return;\n    }\n\n    this._mask = this.consume(4);\n    this._state = GET_DATA;\n  }\n\n  /**\n   * Reads data bytes.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getData(cb) {\n    let data = EMPTY_BUFFER;\n\n    if (this._payloadLength) {\n      if (this._bufferedBytes < this._payloadLength) {\n        this._loop = false;\n        return;\n      }\n\n      data = this.consume(this._payloadLength);\n\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\n\n    if (this._maxFragments > 0 && ++this._numFragments > this._maxFragments) {\n      const error = this.createError(\n        RangeError,\n        'Too many message fragments',\n        false,\n        1008,\n        'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._compressed) {\n      this._state = INFLATING;\n      this.decompress(data, cb);\n      return;\n    }\n\n    if (data.length) {\n      //\n      // This message is not compressed so its length is the sum of the payload\n      // length of all fragments.\n      //\n      this._messageLength = this._totalPayloadLength;\n      this._fragments.push(data);\n    }\n\n    this.dataMessage(cb);\n  }\n\n  /**\n   * Decompresses data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Function} cb Callback\n   * @private\n   */\n  decompress(data, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n      if (err) return cb(err);\n\n      if (buf.length) {\n        this._messageLength += buf.length;\n        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\n    const messageLength = this._messageLength;\n    const fragments = this._fragments;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragmented = 0;\n    this._numFragments = 0;\n    this._fragments = [];\n\n    if (this._opcode === 2) {\n      let data;\n\n      if (this._binaryType === 'nodebuffer') {\n        data = concat(fragments, messageLength);\n      } else if (this._binaryType === 'arraybuffer') {\n        data = toArrayBuffer(concat(fragments, messageLength));\n      } else if (this._binaryType === 'blob') {\n        data = new Blob(fragments);\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\n  }\n\n  /**\n   * Handles a control message.\n   *\n   * @param {Buffer} data Data to handle\n   * @return {(Error|RangeError|undefined)} A possible error\n   * @private\n   */\n  controlMessage(data, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\n\n  /**\n   * Builds an error object.\n   *\n   * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n   * @param {String} message The error message\n   * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n   *     `message`\n   * @param {Number} statusCode The status code\n   * @param {String} errorCode The exposed error code\n   * @return {(Error|RangeError)} The error\n   * @private\n   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\nconst {\n  types: { isUint8Array }\n} = require('util');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._queue = [];\n    this._state = DEFAULT;\n    this.onerror = NOOP;\n    this[kWebSocket] = undefined;\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n    if (options.rsv1) target[0] |= 0x40;\n\n    target[1] = payloadLength;\n\n    if (payloadLength === 126) {\n      target.writeUInt16BE(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\n\n    target[1] |= 0x80;\n    target[offset - 4] = mask[0];\n    target[offset - 3] = mask[1];\n    target[offset - 2] = mask[2];\n    target[offset - 1] = mask[3];\n\n    if (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\n    return [target, data];\n  }\n\n  /**\n   * Sends a close message to the other peer.\n   *\n   * @param {Number} [code] The status code component of the body\n   * @param {(String|Buffer)} [data] The message component of the body\n   * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  close(code, data, mask, cb) {\n    let buf;\n\n    if (code === undefined) {\n      buf = EMPTY_BUFFER;\n    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n      throw new TypeError('First argument must be a valid error code number');\n    } else if (data === undefined || !data.length) {\n      buf = Buffer.allocUnsafe(2);\n      buf.writeUInt16BE(code, 0);\n    } else {\n      const length = Buffer.byteLength(data);\n\n      if (length > 123) {\n        throw new RangeError('The message must not be greater than 123 bytes');\n      }\n\n      buf = Buffer.allocUnsafe(2 + length);\n      buf.writeUInt16BE(code, 0);\n\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else if (isUint8Array(data)) {\n        buf.set(data, 2);\n      } else {\n        throw new TypeError('Second argument must be a string or a Uint8Array');\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), cb);\n    }\n  }\n\n  /**\n   * Sends a ping message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  ping(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a pong message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  pong(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, false, options, cb]);\n      } else {\n        this.getBlobData(data, false, options, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a data message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Object} options Options object\n   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\n   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  send(data, options, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else if (isBlob(data)) {\n      byteLength = data.size;\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= perMessageDeflate._threshold;\n      }\n      this._compress = rsv1;\n    } else {\n      rsv1 = false;\n      opcode = 0;\n    }\n\n    if (options.fin) this._firstFragment = true;\n\n    const opts = {\n      [kByteLength]: byteLength,\n      fin: options.fin,\n      generateMask: this._generateMask,\n      mask: options.mask,\n      maskBuffer: this._maskBuffer,\n      opcode,\n      readOnly,\n      rsv1\n    };\n\n    if (isBlob(data)) {\n      if (this._state !== DEFAULT) {\n        this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n      } else {\n        this.getBlobData(data, this._compress, opts, cb);\n      }\n    } else if (this._state !== DEFAULT) {\n      this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n    } else {\n      this.dispatch(data, this._compress, opts, cb);\n    }\n  }\n\n  /**\n   * Gets the contents of a blob as binary data.\n   *\n   * @param {Blob} blob The blob\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     the data\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  getBlobData(blob, compress, options, cb) {\n    this._bufferedBytes += options[kByteLength];\n    this._state = GET_BLOB_DATA;\n\n    blob\n      .arrayBuffer()\n      .then((arrayBuffer) => {\n        if (this._socket.destroyed) {\n          const err = new Error(\n            'The socket was closed while the blob was being read'\n          );\n\n          //\n          // `callCallbacks` is called in the next tick to ensure that errors\n          // that might be thrown in the callbacks behave like errors thrown\n          // outside the promise chain.\n          //\n          process.nextTick(callCallbacks, this, err, cb);\n          return;\n        }\n\n        this._bufferedBytes -= options[kByteLength];\n        const data = toBuffer(arrayBuffer);\n\n        if (!compress) {\n          this._state = DEFAULT;\n          this.sendFrame(Sender.frame(data, options), cb);\n          this.dequeue();\n        } else {\n          this.dispatch(data, compress, options, cb);\n        }\n      })\n      .catch((err) => {\n        //\n        // `onError` is called in the next tick for the same reason that\n        // `callCallbacks` above is.\n        //\n        process.nextTick(onError, this, err, cb);\n      });\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} data The message to send\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     `data`\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  dispatch(data, compress, options, cb) {\n    if (!compress) {\n      this.sendFrame(Sender.frame(data, options), cb);\n      return;\n    }\n\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    this._bufferedBytes += options[kByteLength];\n    this._state = DEFLATING;\n    perMessageDeflate.compress(data, options.fin, (_, buf) => {\n      if (this._socket.destroyed) {\n        const err = new Error(\n          'The socket was closed while data was being compressed'\n        );\n\n        callCallbacks(this, err, cb);\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._state = DEFAULT;\n      options.readOnly = false;\n      this.sendFrame(Sender.frame(buf, options), cb);\n      this.dequeue();\n    });\n  }\n\n  /**\n   * Executes queued send operations.\n   *\n   * @private\n   */\n  dequeue() {\n    while (this._state === DEFAULT && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\n      Reflect.apply(params[0], this, params.slice(1));\n    }\n  }\n\n  /**\n   * Enqueues a send operation.\n   *\n   * @param {Array} params Send operation parameters.\n   * @private\n   */\n  enqueue(params) {\n    this._bufferedBytes += params[3][kByteLength];\n    this._queue.push(params);\n  }\n\n  /**\n   * Sends a frame.\n   *\n   * @param {(Buffer | String)[]} list The frame to send\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  sendFrame(list, cb) {\n    if (list.length === 2) {\n      this._socket.cork();\n      this._socket.write(list[0]);\n      this._socket.write(list[1], cb);\n      this._socket.uncork();\n    } else {\n      this._socket.write(list[0], cb);\n    }\n  }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n  if (typeof cb === 'function') cb(err);\n\n  for (let i = 0; i < sender._queue.length; i++) {\n    const params = sender._queue[i];\n    const callback = params[params.length - 1];\n\n    if (typeof callback === 'function') callback(err);\n  }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n  callCallbacks(sender, err, cb);\n  sender.onerror(err);\n}\n", "'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n  /**\n   * Register an event listener.\n   *\n   * @param {String} type A string representing the event type to listen for\n   * @param {(Function|Object)} handler The listener to add\n   * @param {Object} [options] An options object specifies characteristics about\n   *     the event listener\n   * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n   *     listener should be invoked at most once after being added. If `true`,\n   *     the listener would be automatically removed when invoked.\n   * @public\n   */\n  addEventListener(type, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\n    }\n  },\n\n  /**\n   * Remove an event listener.\n   *\n   * @param {String} type A string representing the event type to remove\n   * @param {(Function|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n *     parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n  if (dest[name] === undefined) dest[name] = [elem];\n  else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n  const offers = Object.create(null);\n  let params = Object.create(null);\n  let mustUnescape = false;\n  let isEscaping = false;\n  let inQuotes = false;\n  let extensionName;\n  let paramName;\n  let start = -1;\n  let code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    code = header.charCodeAt(i);\n\n    if (extensionName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        const name = header.slice(start, end);\n        if (code === 0x2c) {\n          push(offers, name, params);\n          params = Object.create(null);\n        } else {\n          extensionName = name;\n        }\n\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else if (paramName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (code === 0x20 || code === 0x09) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        push(params, header.slice(start, end), true);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        start = end = -1;\n      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n        paramName = header.slice(start, i);\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else {\n      //\n      // The value of a quoted-string after unescaping must conform to the\n      // token ABNF, so only token characters are valid.\n      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n      //\n      if (isEscaping) {\n        if (tokenChars[code] !== 1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n        if (start === -1) start = i;\n        else if (!mustUnescape) mustUnescape = true;\n        isEscaping = false;\n      } else if (inQuotes) {\n        if (tokenChars[code] === 1) {\n          if (start === -1) start = i;\n        } else if (code === 0x22 /* '\"' */ && start !== -1) {\n          inQuotes = false;\n          end = i;\n        } else if (code === 0x5c /* '\\' */) {\n          isEscaping = true;\n        } else {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n        inQuotes = true;\n      } else if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n        if (end === -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        let value = header.slice(start, end);\n        if (mustUnescape) {\n          value = value.replace(/\\\\/g, '');\n          mustUnescape = false;\n        }\n        push(params, paramName, value);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        paramName = undefined;\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    }\n  }\n\n  if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  if (end === -1) end = i;\n  const token = header.slice(start, end);\n  if (extensionName === undefined) {\n    push(offers, token, params);\n  } else {\n    if (paramName === undefined) {\n      push(params, token, true);\n    } else if (mustUnescape) {\n      push(params, paramName, token.replace(/\\\\/g, ''));\n    } else {\n      push(params, paramName, token);\n    }\n    push(offers, extensionName, params);\n  }\n\n  return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n  return Object.keys(extensions)\n    .map((extension) => {\n      let configurations = extensions[extension];\n      if (!Array.isArray(configurations)) configurations = [configurations];\n      return configurations\n        .map((params) => {\n          return [extension]\n            .concat(\n              Object.keys(params).map((k) => {\n                let values = params[k];\n                if (!Array.isArray(values)) values = [values];\n                return values\n                  .map((v) => (v === true ? k : `${k}=${v}`))\n                  .join('; ');\n              })\n            )\n            .join('; ');\n        })\n        .join(', ');\n    })\n    .join(', ');\n}\n\nmodule.exports = { format, parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n  BINARY_TYPES,\n  CLOSE_TIMEOUT,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n  /**\n   * Create a new `WebSocket`.\n   *\n   * @param {(String|URL)} address The URL to which to connect\n   * @param {(String|String[])} [protocols] The subprotocols\n   * @param {Object} [options] Connection options\n   */\n  constructor(address, protocols, options) {\n    super();\n\n    this._binaryType = BINARY_TYPES[0];\n    this._closeCode = 1006;\n    this._closeFrameReceived = false;\n    this._closeFrameSent = false;\n    this._closeMessage = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._errorEmitted = false;\n    this._extensions = {};\n    this._paused = false;\n    this._protocol = '';\n    this._readyState = WebSocket.CONNECTING;\n    this._receiver = null;\n    this._sender = null;\n    this._socket = null;\n\n    if (address !== null) {\n      this._bufferedAmount = 0;\n      this._isServer = false;\n      this._redirects = 0;\n\n      if (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._closeTimeout = options.closeTimeout;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * For historical reasons, the custom \"nodebuffer\" type is used by the default\n   * instead of \"blob\".\n   *\n   * @type {String}\n   */\n  get binaryType() {\n    return this._binaryType;\n  }\n\n  set binaryType(type) {\n    if (!BINARY_TYPES.includes(type)) return;\n\n    this._binaryType = type;\n\n    //\n    // Allow to change `binaryType` on the fly.\n    //\n    if (this._receiver) this._receiver._binaryType = type;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get bufferedAmount() {\n    if (!this._socket) return this._bufferedAmount;\n\n    return this._socket._writableState.length + this._sender._bufferedBytes;\n  }\n\n  /**\n   * @type {String}\n   */\n  get extensions() {\n    return Object.keys(this._extensions).join();\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\n\n  /**\n   * @type {String}\n   */\n  get protocol() {\n    return this._protocol;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get readyState() {\n    return this._readyState;\n  }\n\n  /**\n   * @type {String}\n   */\n  get url() {\n    return this._url;\n  }\n\n  /**\n   * Set up the socket and the internal resources.\n   *\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=0] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxBufferedChunks: options.maxBufferedChunks,\n      maxFragments: options.maxFragments,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    const sender = new Sender(socket, this._extensions, options.generateMask);\n\n    this._receiver = receiver;\n    this._sender = sender;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    sender[kWebSocket] = this;\n    socket[kWebSocket] = this;\n\n    receiver.on('conclude', receiverOnConclude);\n    receiver.on('drain', receiverOnDrain);\n    receiver.on('error', receiverOnError);\n    receiver.on('message', receiverOnMessage);\n    receiver.on('ping', receiverOnPing);\n    receiver.on('pong', receiverOnPong);\n\n    sender.onerror = senderOnError;\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) socket.setNoDelay();\n\n    if (head.length > 0) socket.unshift(head);\n\n    socket.on('close', socketOnClose);\n    socket.on('data', socketOnData);\n    socket.on('end', socketOnEnd);\n    socket.on('error', socketOnError);\n\n    this._readyState = WebSocket.OPEN;\n    this.emit('open');\n  }\n\n  /**\n   * Emit the `'close'` event.\n   *\n   * @private\n   */\n  emitClose() {\n    if (!this._socket) {\n      this._readyState = WebSocket.CLOSED;\n      this.emit('close', this._closeCode, this._closeMessage);\n      return;\n    }\n\n    if (this._extensions[PerMessageDeflate.extensionName]) {\n      this._extensions[PerMessageDeflate.extensionName].cleanup();\n    }\n\n    this._receiver.removeAllListeners();\n    this._readyState = WebSocket.CLOSED;\n    this.emit('close', this._closeCode, this._closeMessage);\n  }\n\n  /**\n   * Start a closing handshake.\n   *\n   *          +----------+   +-----------+   +----------+\n   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n   *    |     +----------+   +-----------+   +----------+     |\n   *          +----------+   +-----------+         |\n   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING\n   *          +----------+   +-----------+   |\n   *    |           |                        |   +---+        |\n   *                +------------------------+-->|fin| - - - -\n   *    |         +---+                      |   +---+\n   *     - - - - -|fin|<---------------------+\n   *              +---+\n   *\n   * @param {Number} [code] Status code explaining why the connection is closing\n   * @param {(String|Buffer)} [data] The reason why the connection is\n   *     closing\n   * @public\n   */\n  close(code, data) {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this.readyState === WebSocket.CLOSING) {\n      if (\n        this._closeFrameSent &&\n        (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n      ) {\n        this._socket.end();\n      }\n\n      return;\n    }\n\n    this._readyState = WebSocket.CLOSING;\n    this._sender.close(code, data, !this._isServer, (err) => {\n      //\n      // This error is handled by the `'error'` listener on the socket. We only\n      // want to know if the close frame has been sent here.\n      //\n      if (err) return;\n\n      this._closeFrameSent = true;\n\n      if (\n        this._closeFrameReceived ||\n        this._receiver._writableState.errorEmitted\n      ) {\n        this._socket.end();\n      }\n    });\n\n    setCloseTimer(this);\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\n  }\n\n  /**\n   * Send a ping.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the ping is sent\n   * @public\n   */\n  ping(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Send a pong.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the pong is sent\n   * @public\n   */\n  pong(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\n  }\n\n  /**\n   * Send a data message.\n   *\n   * @param {*} data The message to send\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\n   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when data is written out\n   * @public\n   */\n  send(data, options, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof options === 'function') {\n      cb = options;\n      options = {};\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    const opts = {\n      binary: typeof data !== 'string',\n      mask: !this._isServer,\n      compress: true,\n      fin: true,\n      ...options\n    };\n\n    if (!this._extensions[PerMessageDeflate.extensionName]) {\n      opts.compress = false;\n    }\n\n    this._sender.send(data || EMPTY_BUFFER, opts, cb);\n  }\n\n  /**\n   * Forcibly close the connection.\n   *\n   * @public\n   */\n  terminate() {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this._socket) {\n      this._readyState = WebSocket.CLOSING;\n      this._socket.destroy();\n    }\n  }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n[\n  'binaryType',\n  'bufferedAmount',\n  'extensions',\n  'isPaused',\n  'protocol',\n  'readyState',\n  'url'\n].forEach((property) => {\n  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n  Object.defineProperty(WebSocket.prototype, `on${method}`, {\n    enumerable: true,\n    get() {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\n    }\n  });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n *     for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxBufferedChunks=262144] The maximum number of\n *     buffered data chunks\n * @param {Number} [options.maxFragments=16384] The maximum number of message\n *     fragments\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    closeTimeout: CLOSE_TIMEOUT,\n    protocolVersion: protocolVersions[1],\n    maxBufferedChunks: 256 * 1024,\n    maxFragments: 16 * 1024,\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\n  websocket._closeTimeout = opts.closeTimeout;\n\n  if (!protocolVersions.includes(opts.protocolVersion)) {\n    throw new RangeError(\n      `Unsupported protocol version: ${opts.protocolVersion} ` +\n        `(supported versions: ${protocolVersions.join(', ')})`\n    );\n  }\n\n  let parsedUrl;\n\n  if (address instanceof URL) {\n    parsedUrl = address;\n  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https:\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\n    opts.createConnection || (isSecure ? tlsConnect : netConnect);\n  opts.defaultPort = opts.defaultPort || defaultPort;\n  opts.port = parsedUrl.port || defaultPort;\n  opts.host = parsedUrl.hostname.startsWith('[')\n    ? parsedUrl.hostname.slice(1, -1)\n    : parsedUrl.hostname;\n  opts.headers = {\n    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\n  };\n  opts.path = parsedUrl.pathname + parsedUrl.search;\n  opts.timeout = opts.handshakeTimeout;\n\n  if (opts.perMessageDeflate) {\n    perMessageDeflate = new PerMessageDeflate({\n      ...opts.perMessageDeflate,\n      isServer: false,\n      maxPayload: opts.maxPayload\n    });\n    opts.headers['Sec-WebSocket-Extensions'] = format({\n      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n    });\n  }\n  if (protocols.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n  }\n  if (opts.origin) {\n    if (opts.protocolVersion < 13) {\n      opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n    } else {\n      opts.headers.Origin = opts.origin;\n    }\n  }\n  if (parsedUrl.username || parsedUrl.password) {\n    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n  }\n\n  if (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\n\n  if (opts.timeout) {\n    req.on('timeout', () => {\n      abortHandshake(websocket, req, 'Opening handshake has timed out');\n    });\n  }\n\n  req.on('error', (err) => {\n    if (req === null || req[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\n  });\n\n  req.on('response', (res) => {\n    const location = res.headers.location;\n    const statusCode = res.statusCode;\n\n    if (\n      location &&\n      opts.followRedirects &&\n      statusCode >= 300 &&\n      statusCode < 400\n    ) {\n      if (++websocket._redirects > opts.maxRedirects) {\n        abortHandshake(websocket, req, 'Maximum redirects exceeded');\n        return;\n      }\n\n      req.abort();\n\n      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\n\n      initAsClient(websocket, addr, protocols, options);\n    } else if (!websocket.emit('unexpected-response', req, res)) {\n      abortHandshake(\n        websocket,\n        req,\n        `Unexpected server response: ${res.statusCode}`\n      );\n    }\n  });\n\n  req.on('upgrade', (res, socket, head) => {\n    websocket.emit('upgrade', res);\n\n    //\n    // The user may have closed the connection from a listener of the\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    if (res.headers['sec-websocket-accept'] !== digest) {\n      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n      return;\n    }\n\n    const serverProt = res.headers['sec-websocket-protocol'];\n    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no subprotocol';\n    }\n\n    if (protError) {\n      abortHandshake(websocket, socket, protError);\n      return;\n    }\n\n    if (serverProt) websocket._protocol = serverProt;\n\n    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n    if (secWebSocketExtensions !== undefined) {\n      if (!perMessageDeflate) {\n        const message =\n          'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n          'was requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      let extensions;\n\n      try {\n        extensions = parse(secWebSocketExtensions);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      const extensionNames = Object.keys(extensions);\n\n      if (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = 'Server indicated an extension that was not requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      try {\n        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      websocket._extensions[PerMessageDeflate.extensionName] =\n        perMessageDeflate;\n    }\n\n    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxBufferedChunks: opts.maxBufferedChunks,\n      maxFragments: opts.maxFragments,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  //\n  // The following assignment is practically useless and is done only for\n  // consistency.\n  //\n  websocket._errorEmitted = true;\n  websocket.emit('error', err);\n  websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n  options.path = options.socketPath;\n  return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n  options.path = undefined;\n\n  if (!options.servername && options.servername !== '') {\n    options.servername = net.isIP(options.host) ? '' : options.host;\n  }\n\n  return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n *     abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n  websocket._readyState = WebSocket.CLOSING;\n\n  const err = new Error(message);\n  Error.captureStackTrace(err, abortHandshake);\n\n  if (stream.setHeader) {\n    stream[kAborted] = true;\n    stream.abort();\n\n    if (stream.socket && !stream.socket.destroyed) {\n      //\n      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n      // called after the request completed. See\n      // https://github.com/websockets/ws/issues/1869.\n      //\n      stream.socket.destroy();\n    }\n\n    process.nextTick(emitErrorAndClose, websocket, err);\n  } else {\n    stream.destroy(err);\n    stream.once('error', websocket.emit.bind(websocket, 'error'));\n    stream.once('close', websocket.emitClose.bind(websocket));\n  }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n  if (data) {\n    const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n    //\n    // The `_bufferedAmount` property is used only when the peer is a client and\n    // the opening handshake fails. Under these circumstances, in fact, the\n    // `setSocket()` method is not called, so the `_socket` and `_sender`\n    // properties are set to `null`.\n    //\n    if (websocket._socket) websocket._sender._bufferedBytes += length;\n    else websocket._bufferedAmount += length;\n  }\n\n  if (cb) {\n    const err = new Error(\n      `WebSocket is not open: readyState ${websocket.readyState} ` +\n        `(${readyStates[websocket.readyState]})`\n    );\n    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n  const websocket = this[kWebSocket];\n\n  websocket._closeFrameReceived = true;\n  websocket._closeMessage = reason;\n  websocket._closeCode = code;\n\n  if (websocket._socket[kWebSocket] === undefined) return;\n\n  websocket._socket.removeListener('data', socketOnData);\n  process.nextTick(resume, websocket._socket);\n\n  if (code === 1005) websocket.close();\n  else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._socket[kWebSocket] !== undefined) {\n    websocket._socket.removeListener('data', socketOnData);\n\n    //\n    // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n    // https://github.com/websockets/ws/issues/1940.\n    //\n    process.nextTick(resume, websocket._socket);\n\n    websocket.close(err[kStatusCode]);\n  }\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n  this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n  websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n  this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n  stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket.readyState === WebSocket.CLOSED) return;\n  if (websocket.readyState === WebSocket.OPEN) {\n    websocket._readyState = WebSocket.CLOSING;\n    setCloseTimer(websocket);\n  }\n\n  //\n  // `socket.end()` is used instead of `socket.destroy()` to allow the other\n  // peer to finish sending queued data. There is no need to set a timer here\n  // because `CLOSING` means that it is already set or not needed.\n  //\n  this._socket.end();\n\n  if (!websocket._errorEmitted) {\n    websocket._errorEmitted = true;\n    websocket.emit('error', err);\n  }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n  websocket._closeTimer = setTimeout(\n    websocket._socket.destroy.bind(websocket._socket),\n    websocket._closeTimeout\n  );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('close', socketOnClose);\n  this.removeListener('data', socketOnData);\n  this.removeListener('end', socketOnEnd);\n\n  websocket._readyState = WebSocket.CLOSING;\n\n  //\n  // The close frame might not have been received or the `'end'` event emitted,\n  // for example, if the socket was destroyed due to an error. Ensure that the\n  // `receiver` stream is closed after writing any remaining buffered data to\n  // it. If the readable side of the socket is in flowing mode then there is no\n  // buffered data as everything has been already written. If instead, the\n  // socket is paused, any possible buffered data will be read as a single\n  // chunk.\n  //\n  if (\n    !this._readableState.endEmitted &&\n    !websocket._closeFrameReceived &&\n    !websocket._receiver._writableState.errorEmitted &&\n    this._readableState.length !== 0\n  ) {\n    const chunk = this.read(this._readableState.length);\n\n    websocket._receiver.write(chunk);\n  }\n\n  websocket._receiver.end();\n\n  this[kWebSocket] = undefined;\n\n  clearTimeout(websocket._closeTimer);\n\n  if (\n    websocket._receiver._writableState.finished ||\n    websocket._receiver._writableState.errorEmitted\n  ) {\n    websocket.emitClose();\n  } else {\n    websocket._receiver.on('error', receiverOnFinish);\n    websocket._receiver.on('finish', receiverOnFinish);\n  }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n  if (!this[kWebSocket]._receiver.write(chunk)) {\n    this.pause();\n  }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n  const websocket = this[kWebSocket];\n\n  websocket._readyState = WebSocket.CLOSING;\n  websocket._receiver.end();\n  this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('error', socketOnError);\n  this.on('error', NOOP);\n\n  if (websocket) {\n    websocket._readyState = WebSocket.CLOSING;\n    this.destroy();\n  }\n}\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n  stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n  if (!this.destroyed && this._writableState.finished) {\n    this.destroy();\n  }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n  this.removeListener('error', duplexOnError);\n  this.destroy();\n  if (this.listenerCount('error') === 0) {\n    // Do not suppress the throwing behavior.\n    this.emit('error', err);\n  }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n  let terminateOnDestroy = true;\n\n  const duplex = new Duplex({\n    ...options,\n    autoDestroy: false,\n    emitClose: false,\n    objectMode: false,\n    writableObjectMode: false\n  });\n\n  ws.on('message', function message(msg, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\n  });\n\n  ws.once('error', function error(err) {\n    if (duplex.destroyed) return;\n\n    // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n    //\n    // - If the `'error'` event is emitted before the `'open'` event, then\n    //   `ws.terminate()` is a noop as no socket is assigned.\n    // - Otherwise, the error is re-emitted by the listener of the `'error'`\n    //   event of the `Receiver` object. The listener already closes the\n    //   connection by calling `ws.close()`. This allows a close frame to be\n    //   sent to the other peer. If `ws.terminate()` is called right after this,\n    //   then the close frame might not be sent.\n    terminateOnDestroy = false;\n    duplex.destroy(err);\n  });\n\n  ws.once('close', function close() {\n    if (duplex.destroyed) return;\n\n    duplex.push(null);\n  });\n\n  duplex._destroy = function (err, callback) {\n    if (ws.readyState === ws.CLOSED) {\n      callback(err);\n      process.nextTick(emitClose, duplex);\n      return;\n    }\n\n    let called = false;\n\n    ws.once('error', function error(err) {\n      called = true;\n      callback(err);\n    });\n\n    ws.once('close', function close() {\n      if (!called) callback(err);\n      process.nextTick(emitClose, duplex);\n    });\n\n    if (terminateOnDestroy) ws.terminate();\n  };\n\n  duplex._final = function (callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._final(callback);\n      });\n      return;\n    }\n\n    // If the value of the `_socket` property is `null` it means that `ws` is a\n    // client websocket and the handshake failed. In fact, when this happens, a\n    // socket is never assigned to the websocket. Wait for the `'error'` event\n    // that will be emitted by the websocket.\n    if (ws._socket === null) return;\n\n    if (ws._socket._writableState.finished) {\n      callback();\n      if (duplex._readableState.endEmitted) duplex.destroy();\n    } else {\n      ws._socket.once('finish', function finish() {\n        // `duplex` is not destroyed here because the `'end'` event will be\n        // emitted on `duplex` after this `'finish'` event. The EOF signaling\n        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n        callback();\n      });\n      ws.close();\n    }\n  };\n\n  duplex._read = function () {\n    if (ws.isPaused) ws.resume();\n  };\n\n  duplex._write = function (chunk, encoding, callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._write(chunk, encoding, callback);\n      });\n      return;\n    }\n\n    ws.send(chunk, callback);\n  };\n\n  duplex.on('end', duplexOnEnd);\n  duplex.on('error', duplexOnError);\n  return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n  /**\n   * Create a `WebSocketServer` instance.\n   *\n   * @param {Object} options Configuration options\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\n   * @param {Number} [options.backlog=511] The maximum length of the queue of\n   *     pending connections\n   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n   *     track clients\n   * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n   *     wait for the closing handshake to finish after `websocket.close()` is\n   *     called\n   * @param {Function} [options.handleProtocols] A hook to handle protocols\n   * @param {String} [options.host] The hostname where to bind the server\n   * @param {Number} [options.maxBufferedChunks=262144] The maximum number of\n   *     buffered data chunks\n   * @param {Number} [options.maxFragments=16384] The maximum number of message\n   *     fragments\n   * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n   *     size\n   * @param {Boolean} [options.noServer=false] Enable no server mode\n   * @param {String} [options.path] Accept only connections matching this path\n   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n   *     permessage-deflate\n   * @param {Number} [options.port] The port where to bind the server\n   * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n   *     server to use\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxBufferedChunks: 256 * 1024,\n      maxFragments: 16 * 1024,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\n      perMessageDeflate: false,\n      handleProtocols: null,\n      clientTracking: true,\n      closeTimeout: CLOSE_TIMEOUT,\n      verifyClient: null,\n      noServer: false,\n      backlog: null, // use default (511 as implemented in net.js)\n      server: null,\n      host: null,\n      path: null,\n      port: null,\n      WebSocket,\n      ...options\n    };\n\n    if (\n      (options.port == null && !options.server && !options.noServer) ||\n      (options.port != null && (options.server || options.noServer)) ||\n      (options.server && options.noServer)\n    ) {\n      throw new TypeError(\n        'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n          'must be specified'\n      );\n    }\n\n    if (options.port != null) {\n      this._server = http.createServer((req, res) => {\n        const body = http.STATUS_CODES[426];\n\n        res.writeHead(426, {\n          'Content-Length': body.length,\n          'Content-Type': 'text/plain'\n        });\n        res.end(body);\n      });\n      this._server.listen(\n        options.port,\n        options.host,\n        options.backlog,\n        callback\n      );\n    } else if (options.server) {\n      this._server = options.server;\n    }\n\n    if (this._server) {\n      const emitConnection = this.emit.bind(this, 'connection');\n\n      this._removeListeners = addListeners(this._server, {\n        listening: this.emit.bind(this, 'listening'),\n        error: this.emit.bind(this, 'error'),\n        upgrade: (req, socket, head) => {\n          this.handleUpgrade(req, socket, head, emitConnection);\n        }\n      });\n    }\n\n    if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n    if (options.clientTracking) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\n    this.options = options;\n    this._state = RUNNING;\n  }\n\n  /**\n   * Returns the bound address, the address family name, and port of the server\n   * as reported by the operating system if listening on an IP socket.\n   * If the server is listening on a pipe or UNIX domain socket, the name is\n   * returned as a string.\n   *\n   * @return {(Object|String|null)} The address of the server\n   * @public\n   */\n  address() {\n    if (this.options.noServer) {\n      throw new Error('The server is operating in \"noServer\" mode');\n    }\n\n    if (!this._server) return null;\n    return this._server.address();\n  }\n\n  /**\n   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\n  }\n\n  /**\n   * See if a given request should be handled by this server instance.\n   *\n   * @param {http.IncomingMessage} req Request object to inspect\n   * @return {Boolean} `true` if the request is valid, else `false`\n   * @public\n   */\n  shouldHandle(req) {\n    if (this.options.path) {\n      const index = req.url.indexOf('?');\n      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n      if (pathname !== this.options.path) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Handle a HTTP Upgrade request.\n   *\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @public\n   */\n  handleUpgrade(req, socket, head, cb) {\n    socket.on('error', socketOnError);\n\n    const key = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 13 && version !== 8) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n        'Sec-WebSocket-Version': '13, 8'\n      });\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate({\n        ...this.options.perMessageDeflate,\n        isServer: true,\n        maxPayload: this.options.maxPayload\n      });\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    //\n    // Optionally call external client verification handler.\n    //\n    if (this.options.verifyClient) {\n      const info = {\n        origin:\n          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n        secure: !!(req.socket.authorized || req.socket.encrypted),\n        req\n      };\n\n      if (this.options.verifyClient.length === 2) {\n        this.options.verifyClient(info, (verified, code, message, headers) => {\n          if (!verified) {\n            return abortHandshake(socket, code || 401, message, headers);\n          }\n\n          this.completeUpgrade(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @throws {Error} If called more than once with the same socket\n   * @private\n   */\n  completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n    //\n    // Destroy the socket if the client has already sent a FIN packet.\n    //\n    if (!socket.readable || !socket.writable) return socket.destroy();\n\n    if (socket[kWebSocket]) {\n      throw new Error(\n        'server.handleUpgrade() was called more than once with the same ' +\n          'socket, possibly due to a misconfiguration'\n      );\n    }\n\n    if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    const headers = [\n      'HTTP/1.1 101 Switching Protocols',\n      'Upgrade: websocket',\n      'Connection: Upgrade',\n      `Sec-WebSocket-Accept: ${digest}`\n    ];\n\n    const ws = new this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\n\n      if (protocol) {\n        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n        ws._protocol = protocol;\n      }\n    }\n\n    if (extensions[PerMessageDeflate.extensionName]) {\n      const params = extensions[PerMessageDeflate.extensionName].params;\n      const value = extension.format({\n        [PerMessageDeflate.extensionName]: [params]\n      });\n      headers.push(`Sec-WebSocket-Extensions: ${value}`);\n      ws._extensions = extensions;\n    }\n\n    //\n    // Allow external modification/inspection of handshake headers.\n    //\n    this.emit('headers', headers, req);\n\n    socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n    socket.removeListener('error', socketOnError);\n\n    ws.setSocket(socket, head, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxBufferedChunks: this.options.maxBufferedChunks,\n      maxFragments: this.options.maxFragments,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\n    }\n\n    cb(ws, req);\n  }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n *     called\n * @private\n */\nfunction addListeners(server, map) {\n  for (const event of Object.keys(map)) server.on(event, map[event]);\n\n  return function removeListeners() {\n    for (const event of Object.keys(map)) {\n      server.removeListener(event, map[event]);\n    }\n  };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n  server._state = CLOSED;\n  server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n  this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\n  message = message || http.STATUS_CODES[code];\n  headers = {\n    Connection: 'close',\n    'Content-Type': 'text/html',\n    'Content-Length': Buffer.byteLength(message),\n    ...headers\n  };\n\n  socket.once('finish', socket.destroy);\n\n  socket.end(\n    `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n      Object.keys(headers)\n        .map((h) => `${h}: ${headers[h]}`)\n        .join('\\r\\n') +\n      '\\r\\n\\r\\n' +\n      message\n  );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n  server,\n  req,\n  socket,\n  code,\n  message,\n  headers\n) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message, headers);\n  }\n}\n", "require('./').install();\n", "'use strict'\n\nimport { notStrictEqual, strictEqual } from 'assert'\nimport cliui from 'cliui'\nimport escalade from 'escalade/sync'\nimport { inspect } from 'util'\nimport { fileURLToPath } from 'url';\nimport Parser from 'yargs-parser'\nimport { basename, dirname, extname, relative, resolve, join } from 'path'\nimport { getProcessArgvBin } from '../../build/lib/utils/process-argv.js'\nimport stringWidth from 'string-width';\nimport y18n from 'y18n'\nimport { createRequire } from 'node:module';\nimport getCallerFile from 'get-caller-file';\nimport { readFileSync, readdirSync } from 'node:fs'\n\nconst __dirname = fileURLToPath(import.meta.url);\nconst mainFilename = __dirname.substring(0, __dirname.lastIndexOf('node_modules'));\nconst require = createRequire(import.meta.url);\n\nexport default {\n  assert: {\n    notStrictEqual,\n    strictEqual\n  },\n  cliui,\n  findUp: escalade,\n  getEnv: (key) => {\n    return process.env[key]\n  },\n  inspect,\n  getProcessArgvBin,\n  mainFilename: mainFilename || process.cwd(),\n  Parser,\n  path: {\n    basename,\n    dirname,\n    extname,\n    relative,\n    resolve,\n    join\n  },\n  process: {\n    argv: () => process.argv,\n    cwd: process.cwd,\n    emitWarning: (warning, type) => process.emitWarning(warning, type),\n    execPath: () => process.execPath,\n    exit: (code) => {\n      // eslint-disable-next-line n/no-process-exit\n      process.exit(code);\n    },\n    nextTick: process.nextTick,\n    stdColumns: typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null\n  },\n  readFileSync,\n  readdirSync,\n  require,\n  getCallerFile: () => {\n    const callerFile = getCallerFile(3);\n    return callerFile.match(/^file:\\/\\//) ? fileURLToPath(callerFile) : callerFile;\n  },\n  stringWidth,\n  y18n: y18n({\n    directory: resolve(__dirname, '../../../locales'),\n    updateFiles: false\n  })\n}\n", "'use strict';\nconst align = {\n    right: alignRight,\n    center: alignCenter\n};\nconst top = 0;\nconst right = 1;\nconst bottom = 2;\nconst left = 3;\nexport class UI {\n    constructor(opts) {\n        var _a;\n        this.width = opts.width;\n        this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;\n        this.rows = [];\n    }\n    span(...args) {\n        const cols = this.div(...args);\n        cols.span = true;\n    }\n    resetOutput() {\n        this.rows = [];\n    }\n    div(...args) {\n        if (args.length === 0) {\n            this.div('');\n        }\n        if (this.wrap && this.shouldApplyLayoutDSL(...args) && typeof args[0] === 'string') {\n            return this.applyLayoutDSL(args[0]);\n        }\n        const cols = args.map(arg => {\n            if (typeof arg === 'string') {\n                return this.colFromString(arg);\n            }\n            return arg;\n        });\n        this.rows.push(cols);\n        return cols;\n    }\n    shouldApplyLayoutDSL(...args) {\n        return args.length === 1 && typeof args[0] === 'string' &&\n            /[\\t\\n]/.test(args[0]);\n    }\n    applyLayoutDSL(str) {\n        const rows = str.split('\\n').map(row => row.split('\\t'));\n        let leftColumnWidth = 0;\n        // simple heuristic for layout, make sure the\n        // second column lines up along the left-hand.\n        // don't allow the first column to take up more\n        // than 50% of the screen.\n        rows.forEach(columns => {\n            if (columns.length > 1 && mixin.stringWidth(columns[0]) > leftColumnWidth) {\n                leftColumnWidth = Math.min(Math.floor(this.width * 0.5), mixin.stringWidth(columns[0]));\n            }\n        });\n        // generate a table:\n        //  replacing ' ' with padding calculations.\n        //  using the algorithmically generated width.\n        rows.forEach(columns => {\n            this.div(...columns.map((r, i) => {\n                return {\n                    text: r.trim(),\n                    padding: this.measurePadding(r),\n                    width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined\n                };\n            }));\n        });\n        return this.rows[this.rows.length - 1];\n    }\n    colFromString(text) {\n        return {\n            text,\n            padding: this.measurePadding(text)\n        };\n    }\n    measurePadding(str) {\n        // measure padding without ansi escape codes\n        const noAnsi = mixin.stripAnsi(str);\n        return [0, noAnsi.match(/\\s*$/)[0].length, 0, noAnsi.match(/^\\s*/)[0].length];\n    }\n    toString() {\n        const lines = [];\n        this.rows.forEach(row => {\n            this.rowToString(row, lines);\n        });\n        // don't display any lines with the\n        // hidden flag set.\n        return lines\n            .filter(line => !line.hidden)\n            .map(line => line.text)\n            .join('\\n');\n    }\n    rowToString(row, lines) {\n        this.rasterize(row).forEach((rrow, r) => {\n            let str = '';\n            rrow.forEach((col, c) => {\n                const { width } = row[c]; // the width with padding.\n                const wrapWidth = this.negatePadding(row[c]); // the width without padding.\n                let ts = col; // temporary string used during alignment/padding.\n                if (wrapWidth > mixin.stringWidth(col)) {\n                    ts += ' '.repeat(wrapWidth - mixin.stringWidth(col));\n                }\n                // align the string within its column.\n                if (row[c].align && row[c].align !== 'left' && this.wrap) {\n                    const fn = align[row[c].align];\n                    ts = fn(ts, wrapWidth);\n                    if (mixin.stringWidth(ts) < wrapWidth) {\n                        ts += ' '.repeat((width || 0) - mixin.stringWidth(ts) - 1);\n                    }\n                }\n                // apply border and padding to string.\n                const padding = row[c].padding || [0, 0, 0, 0];\n                if (padding[left]) {\n                    str += ' '.repeat(padding[left]);\n                }\n                str += addBorder(row[c], ts, '| ');\n                str += ts;\n                str += addBorder(row[c], ts, ' |');\n                if (padding[right]) {\n                    str += ' '.repeat(padding[right]);\n                }\n                // if prior row is span, try to render the\n                // current row on the prior line.\n                if (r === 0 && lines.length > 0) {\n                    str = this.renderInline(str, lines[lines.length - 1]);\n                }\n            });\n            // remove trailing whitespace.\n            lines.push({\n                text: str.replace(/ +$/, ''),\n                span: row.span\n            });\n        });\n        return lines;\n    }\n    // if the full 'source' can render in\n    // the target line, do so.\n    renderInline(source, previousLine) {\n        const match = source.match(/^ */);\n        const leadingWhitespace = match ? match[0].length : 0;\n        const target = previousLine.text;\n        const targetTextWidth = mixin.stringWidth(target.trimRight());\n        if (!previousLine.span) {\n            return source;\n        }\n        // if we're not applying wrapping logic,\n        // just always append to the span.\n        if (!this.wrap) {\n            previousLine.hidden = true;\n            return target + source;\n        }\n        if (leadingWhitespace < targetTextWidth) {\n            return source;\n        }\n        previousLine.hidden = true;\n        return target.trimRight() + ' '.repeat(leadingWhitespace - targetTextWidth) + source.trimLeft();\n    }\n    rasterize(row) {\n        const rrows = [];\n        const widths = this.columnWidths(row);\n        let wrapped;\n        // word wrap all columns, and create\n        // a data-structure that is easy to rasterize.\n        row.forEach((col, c) => {\n            // leave room for left and right padding.\n            col.width = widths[c];\n            if (this.wrap) {\n                wrapped = mixin.wrap(col.text, this.negatePadding(col), { hard: true }).split('\\n');\n            }\n            else {\n                wrapped = col.text.split('\\n');\n            }\n            if (col.border) {\n                wrapped.unshift('.' + '-'.repeat(this.negatePadding(col) + 2) + '.');\n                wrapped.push(\"'\" + '-'.repeat(this.negatePadding(col) + 2) + \"'\");\n            }\n            // add top and bottom padding.\n            if (col.padding) {\n                wrapped.unshift(...new Array(col.padding[top] || 0).fill(''));\n                wrapped.push(...new Array(col.padding[bottom] || 0).fill(''));\n            }\n            wrapped.forEach((str, r) => {\n                if (!rrows[r]) {\n                    rrows.push([]);\n                }\n                const rrow = rrows[r];\n                for (let i = 0; i < c; i++) {\n                    if (rrow[i] === undefined) {\n                        rrow.push('');\n                    }\n                }\n                rrow.push(str);\n            });\n        });\n        return rrows;\n    }\n    negatePadding(col) {\n        let wrapWidth = col.width || 0;\n        if (col.padding) {\n            wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0);\n        }\n        if (col.border) {\n            wrapWidth -= 4;\n        }\n        return wrapWidth;\n    }\n    columnWidths(row) {\n        if (!this.wrap) {\n            return row.map(col => {\n                return col.width || mixin.stringWidth(col.text);\n            });\n        }\n        let unset = row.length;\n        let remainingWidth = this.width;\n        // column widths can be set in config.\n        const widths = row.map(col => {\n            if (col.width) {\n                unset--;\n                remainingWidth -= col.width;\n                return col.width;\n            }\n            return undefined;\n        });\n        // any unset widths should be calculated.\n        const unsetWidth = unset ? Math.floor(remainingWidth / unset) : 0;\n        return widths.map((w, i) => {\n            if (w === undefined) {\n                return Math.max(unsetWidth, _minWidth(row[i]));\n            }\n            return w;\n        });\n    }\n}\nfunction addBorder(col, ts, style) {\n    if (col.border) {\n        if (/[.']-+[.']/.test(ts)) {\n            return '';\n        }\n        if (ts.trim().length !== 0) {\n            return style;\n        }\n        return '  ';\n    }\n    return '';\n}\n// calculates the minimum width of\n// a column, based on padding preferences.\nfunction _minWidth(col) {\n    const padding = col.padding || [];\n    const minWidth = 1 + (padding[left] || 0) + (padding[right] || 0);\n    if (col.border) {\n        return minWidth + 4;\n    }\n    return minWidth;\n}\nfunction getWindowWidth() {\n    /* c8 ignore next 5: depends on terminal */\n    if (typeof process === 'object' && process.stdout && process.stdout.columns) {\n        return process.stdout.columns;\n    }\n    return 80;\n}\nfunction alignRight(str, width) {\n    str = str.trim();\n    const strWidth = mixin.stringWidth(str);\n    if (strWidth < width) {\n        return ' '.repeat(width - strWidth) + str;\n    }\n    return str;\n}\nfunction alignCenter(str, width) {\n    str = str.trim();\n    const strWidth = mixin.stringWidth(str);\n    /* c8 ignore next 3 */\n    if (strWidth >= width) {\n        return str;\n    }\n    return ' '.repeat((width - strWidth) >> 1) + str;\n}\nlet mixin;\nexport function cliui(opts, _mixin) {\n    mixin = _mixin;\n    return new UI({\n        width: (opts === null || opts === void 0 ? void 0 : opts.width) || getWindowWidth(),\n        wrap: opts === null || opts === void 0 ? void 0 : opts.wrap\n    });\n}\n", "export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\n\t// OSC sequences only: ESC ] ... ST (non-greedy until the first ST)\n\tconst osc = `(?:\\\\u001B\\\\][\\\\s\\\\S]*?${ST})`;\n\n\t// CSI and related: ESC/C1, optional intermediates, optional params (supports ; and :) then final byte\n\tconst csi = '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:\\\\d{1,4}(?:[;:]\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]';\n\n\tconst pattern = `${osc}|${csi}`;\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n", "import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Fast path: ANSI codes require ESC (7-bit) or CSI (8-bit) introducer\n\tif (!string.includes('\\u001B') && !string.includes('\\u009B')) {\n\t\treturn string;\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n", "// Generated by scripts/build.js\n\nexport const ambiguousMinimalCodePoint = 161;\nexport const ambiguousMaximumCodePoint = 1114109;\nexport const ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];\n\nexport const fullwidthMinimalCodePoint = 12288;\nexport const fullwidthMaximumCodePoint = 65510;\nexport const fullwidthRanges = [12288, 12288, 65281, 65376, 65504, 65510];\n\nexport const halfwidthMinimalCodePoint = 8361;\nexport const halfwidthMaximumCodePoint = 65518;\nexport const halfwidthRanges = [8361, 8361, 65377, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65512, 65518];\n\nexport const narrowMinimalCodePoint = 32;\nexport const narrowMaximumCodePoint = 10630;\nexport const narrowRanges = [32, 126, 162, 163, 165, 166, 172, 172, 175, 175, 10214, 10221, 10629, 10630];\n\nexport const wideMinimalCodePoint = 4352;\nexport const wideMaximumCodePoint = 262141;\nexport const wideRanges = [4352, 4447, 8986, 8987, 9001, 9002, 9193, 9196, 9200, 9200, 9203, 9203, 9725, 9726, 9748, 9749, 9776, 9783, 9800, 9811, 9855, 9855, 9866, 9871, 9875, 9875, 9889, 9889, 9898, 9899, 9917, 9918, 9924, 9925, 9934, 9934, 9940, 9940, 9962, 9962, 9970, 9971, 9973, 9973, 9978, 9978, 9981, 9981, 9989, 9989, 9994, 9995, 10024, 10024, 10060, 10060, 10062, 10062, 10067, 10069, 10071, 10071, 10133, 10135, 10160, 10160, 10175, 10175, 11035, 11036, 11088, 11088, 11093, 11093, 11904, 11929, 11931, 12019, 12032, 12245, 12272, 12287, 12289, 12350, 12353, 12438, 12441, 12543, 12549, 12591, 12593, 12686, 12688, 12773, 12783, 12830, 12832, 12871, 12880, 42124, 42128, 42182, 43360, 43388, 44032, 55203, 63744, 64255, 65040, 65049, 65072, 65106, 65108, 65126, 65128, 65131, 94176, 94180, 94192, 94198, 94208, 101589, 101631, 101662, 101760, 101874, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 119552, 119638, 119648, 119670, 126980, 126980, 127183, 127183, 127374, 127374, 127377, 127386, 127488, 127490, 127504, 127547, 127552, 127560, 127568, 127569, 127584, 127589, 127744, 127776, 127789, 127797, 127799, 127868, 127870, 127891, 127904, 127946, 127951, 127955, 127968, 127984, 127988, 127988, 127992, 128062, 128064, 128064, 128066, 128252, 128255, 128317, 128331, 128334, 128336, 128359, 128378, 128378, 128405, 128406, 128420, 128420, 128507, 128591, 128640, 128709, 128716, 128716, 128720, 128722, 128725, 128728, 128732, 128735, 128747, 128748, 128756, 128764, 128992, 129003, 129008, 129008, 129292, 129338, 129340, 129349, 129351, 129535, 129648, 129660, 129664, 129674, 129678, 129734, 129736, 129736, 129741, 129756, 129759, 129770, 129775, 129784, 131072, 196605, 196608, 262141];\n", "/**\nBinary search on a sorted flat array of [start, end] pairs.\n\n@param {number[]} ranges - Flat array of inclusive [start, end] range pairs, e.g. [0, 5, 10, 20].\n@param {number} codePoint - The value to search for.\n@returns {boolean} Whether the value falls within any of the ranges.\n*/\nexport const isInRange = (ranges, codePoint) => {\n\tlet low = 0;\n\tlet high = Math.floor(ranges.length / 2) - 1;\n\twhile (low <= high) {\n\t\tconst mid = Math.floor((low + high) / 2);\n\t\tconst i = mid * 2;\n\t\tif (codePoint < ranges[i]) {\n\t\t\thigh = mid - 1;\n\t\t} else if (codePoint > ranges[i + 1]) {\n\t\t\tlow = mid + 1;\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n};\n", "import {\n\tambiguousMinimalCodePoint,\n\tambiguousMaximumCodePoint,\n\tambiguousRanges,\n\n\tfullwidthMinimalCodePoint,\n\tfullwidthMaximumCodePoint,\n\tfullwidthRanges,\n\n\thalfwidthMinimalCodePoint,\n\thalfwidthMaximumCodePoint,\n\thalfwidthRanges,\n\n\tnarrowMinimalCodePoint,\n\tnarrowMaximumCodePoint,\n\tnarrowRanges,\n\n\twideMinimalCodePoint,\n\twideMaximumCodePoint,\n\twideRanges,\n} from './lookup-data.js';\nimport {isInRange} from './utilities.js';\n\nconst commonCjkCodePoint = 0x4E_00;\nconst [wideFastPathStart, wideFastPathEnd] = /* #__PURE__ */ findWideFastPathRange(wideRanges);\n\n// Use a hot-path range so common `isWide` calls can skip binary search.\n// The range containing U+4E00 covers common CJK ideographs;\n// fallback to the largest range for resilience to Unicode table changes.\nfunction findWideFastPathRange(ranges) {\n\tlet fastPathStart = ranges[0];\n\tlet fastPathEnd = ranges[1];\n\n\tfor (let index = 0; index < ranges.length; index += 2) {\n\t\tconst start = ranges[index];\n\t\tconst end = ranges[index + 1];\n\n\t\tif (\n\t\t\tcommonCjkCodePoint >= start\n\t\t\t&& commonCjkCodePoint <= end\n\t\t) {\n\t\t\treturn [start, end];\n\t\t}\n\n\t\tif ((end - start) > (fastPathEnd - fastPathStart)) {\n\t\t\tfastPathStart = start;\n\t\t\tfastPathEnd = end;\n\t\t}\n\t}\n\n\treturn [fastPathStart, fastPathEnd];\n}\n\nexport const isAmbiguous = codePoint => {\n\tif (\n\t\tcodePoint < ambiguousMinimalCodePoint\n\t\t|| codePoint > ambiguousMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(ambiguousRanges, codePoint);\n};\n\nexport const isFullWidth = codePoint => {\n\tif (\n\t\tcodePoint < fullwidthMinimalCodePoint\n\t\t|| codePoint > fullwidthMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(fullwidthRanges, codePoint);\n};\n\nconst isHalfWidth = codePoint => {\n\tif (\n\t\tcodePoint < halfwidthMinimalCodePoint\n\t\t|| codePoint > halfwidthMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(halfwidthRanges, codePoint);\n};\n\nconst isNarrow = codePoint => {\n\tif (\n\t\tcodePoint < narrowMinimalCodePoint\n\t\t|| codePoint > narrowMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(narrowRanges, codePoint);\n};\n\nexport const isWide = codePoint => {\n\tif (\n\t\tcodePoint >= wideFastPathStart\n\t\t&& codePoint <= wideFastPathEnd\n\t) {\n\t\treturn true;\n\t}\n\n\tif (\n\t\tcodePoint < wideMinimalCodePoint\n\t\t|| codePoint > wideMaximumCodePoint\n\t) {\n\t\treturn false;\n\t}\n\n\treturn isInRange(wideRanges, codePoint);\n};\n\nexport function getCategory(codePoint) {\n\tif (isAmbiguous(codePoint)) {\n\t\treturn 'ambiguous';\n\t}\n\n\tif (isFullWidth(codePoint)) {\n\t\treturn 'fullwidth';\n\t}\n\n\tif (isHalfWidth(codePoint)) {\n\t\treturn 'halfwidth';\n\t}\n\n\tif (isNarrow(codePoint)) {\n\t\treturn 'narrow';\n\t}\n\n\tif (isWide(codePoint)) {\n\t\treturn 'wide';\n\t}\n\n\treturn 'neutral';\n}\n", "import {getCategory, isAmbiguous, isFullWidth, isWide} from './lookup.js';\n\nfunction validate(codePoint) {\n\tif (!Number.isSafeInteger(codePoint)) {\n\t\tthrow new TypeError(`Expected a code point, got \\`${typeof codePoint}\\`.`);\n\t}\n}\n\nexport function eastAsianWidthType(codePoint) {\n\tvalidate(codePoint);\n\n\treturn getCategory(codePoint);\n}\n\nexport function eastAsianWidth(codePoint, {ambiguousAsWide = false} = {}) {\n\tvalidate(codePoint);\n\n\tif (\n\t\tisFullWidth(codePoint)\n\t\t|| isWide(codePoint)\n\t\t|| (ambiguousAsWide && isAmbiguous(codePoint))\n\t) {\n\t\treturn 2;\n\t}\n\n\treturn 1;\n}\n\n// Private exports for https://github.com/sindresorhus/is-fullwidth-code-point\nexport {isFullWidth as _isFullWidth, isWide as _isWide} from './lookup.js';\n", "import stripAnsi from 'strip-ansi';\nimport {eastAsianWidth} from 'get-east-asian-width';\nimport emojiRegex from 'emoji-regex';\n\nconst segmenter = new Intl.Segmenter();\n\nconst defaultIgnorableCodePointRegex = /^\\p{Default_Ignorable_Code_Point}$/u;\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tconst {\n\t\tambiguousIsNarrow = true,\n\t\tcountAnsiEscapeCodes = false,\n\t} = options;\n\n\tif (!countAnsiEscapeCodes) {\n\t\tstring = stripAnsi(string);\n\t}\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tlet width = 0;\n\tconst eastAsianWidthOptions = {ambiguousAsWide: !ambiguousIsNarrow};\n\n\tfor (const {segment: character} of segmenter.segment(string)) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore zero-width characters\n\t\tif (\n\t\t\t(codePoint >= 0x20_0B && codePoint <= 0x20_0F) // Zero-width space, non-joiner, joiner, left-to-right mark, right-to-left mark\n\t\t\t|| codePoint === 0xFE_FF // Zero-width no-break space\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (\n\t\t\t(codePoint >= 0x3_00 && codePoint <= 0x3_6F) // Combining diacritical marks\n\t\t\t|| (codePoint >= 0x1A_B0 && codePoint <= 0x1A_FF) // Combining diacritical marks extended\n\t\t\t|| (codePoint >= 0x1D_C0 && codePoint <= 0x1D_FF) // Combining diacritical marks supplement\n\t\t\t|| (codePoint >= 0x20_D0 && codePoint <= 0x20_FF) // Combining diacritical marks for symbols\n\t\t\t|| (codePoint >= 0xFE_20 && codePoint <= 0xFE_2F) // Combining half marks\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore surrogate pairs\n\t\tif (codePoint >= 0xD8_00 && codePoint <= 0xDF_FF) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore variation selectors\n\t\tif (codePoint >= 0xFE_00 && codePoint <= 0xFE_0F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// This covers some of the above cases, but we still keep them for performance reasons.\n\t\tif (defaultIgnorableCodePointRegex.test(character)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// TODO: Use `/\\p{RGI_Emoji}/v` when targeting Node.js 20.\n\t\tif (emojiRegex().test(character)) {\n\t\t\twidth += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\twidth += eastAsianWidth(codePoint, eastAsianWidthOptions);\n\t}\n\n\treturn width;\n}\n", "const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n", "import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = url => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows.at(-1)));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\n\t\t\tconst ansiEscapeLinkCandidate = characters.slice(index + 1, index + 1 + ANSI_ESCAPE_LINK.length).join('');\n\t\t\tisInsideLinkEscape = ansiEscapeLinkCandidate === ANSI_ESCAPE_LINK;\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows.at(-1).length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode.\n//\n// 'hard' will never allow a string to take up more than columns characters.\n//\n// 'soft' allows long words to expand past the column length.\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows.at(-1).trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows.at(-1));\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst preString = rows.join('\\n');\n\tconst pre = [...preString];\n\n\t// We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n\tlet preStringIndex = 0;\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(preString.slice(preStringIndex)) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\n\t\tpreStringIndex += character.length;\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replaceAll('\\r\\n', '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n", "// Bootstrap cliui with CommonJS dependencies:\nimport { cliui } from './build/lib/index.js'\nimport stringWidth from 'string-width'\nimport stripAnsi from 'strip-ansi'\nimport wrapAnsi from 'wrap-ansi'\n\nexport default function ui (opts) {\n  return cliui(opts, {\n    stringWidth,\n    stripAnsi,\n    wrap: wrapAnsi\n  })\n}\n\nexport {ui as 'module.exports'};\n", "import { dirname, resolve } from 'path';\nimport { readdirSync, statSync } from 'fs';\n\nexport default function (start, callback) {\n\tlet dir = resolve('.', start);\n\tlet tmp, stats = statSync(dir);\n\n\tif (!stats.isDirectory()) {\n\t\tdir = dirname(dir);\n\t}\n\n\twhile (true) {\n\t\ttmp = callback(dir, readdirSync(dir));\n\t\tif (tmp) return resolve(dir, tmp);\n\t\tdir = dirname(tmp = dir);\n\t\tif (tmp === dir) break;\n\t}\n}\n", "/**\n * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js\n *\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nvar _a, _b, _c;\n/* eslint-disable n/no-unpublished-import */\nimport { format } from 'util';\nimport { normalize, resolve } from 'path';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nimport { YargsParser } from './yargs-parser.js';\nimport { readFileSync } from 'fs';\nimport { createRequire } from 'node:module';\n// See https://github.com/yargs/yargs-parser#supported-nodejs-versions for our\n// version support policy. The YARGS_MIN_NODE_VERSION is used for testing only.\nconst minNodeVersion = (process && process.env && process.env.YARGS_MIN_NODE_VERSION)\n    ? Number(process.env.YARGS_MIN_NODE_VERSION)\n    : 20;\nconst nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);\nif (nodeVersion) {\n    const major = Number(nodeVersion.match(/^([^.]+)/)[1]);\n    if (major < minNodeVersion) {\n        throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);\n    }\n}\n// Creates a yargs-parser instance using Node.js standard libraries:\nconst env = process ? process.env : {};\nconst require = createRequire ? createRequire(import.meta.url) : undefined;\nconst parser = new YargsParser({\n    cwd: process.cwd,\n    env: () => {\n        return env;\n    },\n    format,\n    normalize,\n    resolve,\n    require: (path) => {\n        if (typeof require !== 'undefined') {\n            return require(path);\n        }\n        else if (path.match(/\\.json$/)) {\n            // Addresses: https://github.com/yargs/yargs/issues/2040\n            return JSON.parse(readFileSync(path, 'utf8'));\n        }\n        else {\n            throw Error('only .json config files are supported in ESM');\n        }\n    }\n});\nconst yargsParser = function Parser(args, opts) {\n    const result = parser.parse(args.slice(), opts);\n    return result.argv;\n};\nyargsParser.detailed = function (args, opts) {\n    return parser.parse(args.slice(), opts);\n};\nyargsParser.camelCase = camelCase;\nyargsParser.decamelize = decamelize;\nyargsParser.looksLikeNumber = looksLikeNumber;\nexport default yargsParser;\n// special syntax to allow unqualified default export from CommonJS\nexport { yargsParser as 'module.exports' };\n", "/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport function camelCase(str) {\n    // Handle the case where an argument is provided as camel case, e.g., fooBar.\n    // by ensuring that the string isn't already mixed case:\n    const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase();\n    if (!isCamelCase) {\n        str = str.toLowerCase();\n    }\n    if (str.indexOf('-') === -1 && str.indexOf('_') === -1) {\n        return str;\n    }\n    else {\n        let camelcase = '';\n        let nextChrUpper = false;\n        const leadingHyphens = str.match(/^-+/);\n        for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) {\n            let chr = str.charAt(i);\n            if (nextChrUpper) {\n                nextChrUpper = false;\n                chr = chr.toUpperCase();\n            }\n            if (i !== 0 && (chr === '-' || chr === '_')) {\n                nextChrUpper = true;\n            }\n            else if (chr !== '-' && chr !== '_') {\n                camelcase += chr;\n            }\n        }\n        return camelcase;\n    }\n}\nexport function decamelize(str, joinString) {\n    const lowercase = str.toLowerCase();\n    joinString = joinString || '-';\n    let notCamelcase = '';\n    for (let i = 0; i < str.length; i++) {\n        const chrLower = lowercase.charAt(i);\n        const chrString = str.charAt(i);\n        if (chrLower !== chrString && i > 0) {\n            notCamelcase += `${joinString}${lowercase.charAt(i)}`;\n        }\n        else {\n            notCamelcase += chrString;\n        }\n    }\n    return notCamelcase;\n}\nexport function looksLikeNumber(x) {\n    if (x === null || x === undefined)\n        return false;\n    // if loaded from config, may already be a number.\n    if (typeof x === 'number')\n        return true;\n    // hexadecimal.\n    if (/^0x[0-9a-f]+$/i.test(x))\n        return true;\n    // don't treat 0123 as a number; as it drops the leading '0'.\n    if (/^0[^.]/.test(x))\n        return false;\n    return /^[-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n", "/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\n// take an un-split argv string and tokenize it.\nexport function tokenizeArgString(argString) {\n    if (Array.isArray(argString)) {\n        return argString.map(e => typeof e !== 'string' ? e + '' : e);\n    }\n    argString = argString.trim();\n    let i = 0;\n    let prevC = null;\n    let c = null;\n    let opening = null;\n    const args = [];\n    for (let ii = 0; ii < argString.length; ii++) {\n        prevC = c;\n        c = argString.charAt(ii);\n        // split on spaces unless we're in quotes.\n        if (c === ' ' && !opening) {\n            if (!(prevC === ' ')) {\n                i++;\n            }\n            continue;\n        }\n        // don't split the string if we're in matching\n        // opening or closing single and double quotes.\n        if (c === opening) {\n            opening = null;\n        }\n        else if ((c === \"'\" || c === '\"') && !opening) {\n            opening = c;\n        }\n        if (!args[i])\n            args[i] = '';\n        args[i] += c;\n    }\n    return args;\n}\n", "/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\nexport var DefaultValuesForTypeKey;\n(function (DefaultValuesForTypeKey) {\n    DefaultValuesForTypeKey[\"BOOLEAN\"] = \"boolean\";\n    DefaultValuesForTypeKey[\"STRING\"] = \"string\";\n    DefaultValuesForTypeKey[\"NUMBER\"] = \"number\";\n    DefaultValuesForTypeKey[\"ARRAY\"] = \"array\";\n})(DefaultValuesForTypeKey || (DefaultValuesForTypeKey = {}));\n", "/**\n * @license\n * Copyright (c) 2016, Contributors\n * SPDX-License-Identifier: ISC\n */\n/* eslint-disable prefer-arrow-callback */\nimport { tokenizeArgString } from './tokenize-arg-string.js';\nimport { DefaultValuesForTypeKey } from './yargs-parser-types.js';\nimport { camelCase, decamelize, looksLikeNumber } from './string-utils.js';\nlet mixin;\nexport class YargsParser {\n    constructor(_mixin) {\n        mixin = _mixin;\n    }\n    parse(argsInput, options) {\n        const opts = Object.assign({\n            alias: undefined,\n            array: undefined,\n            boolean: undefined,\n            config: undefined,\n            configObjects: undefined,\n            configuration: undefined,\n            coerce: undefined,\n            count: undefined,\n            default: undefined,\n            envPrefix: undefined,\n            narg: undefined,\n            normalize: undefined,\n            string: undefined,\n            number: undefined,\n            __: undefined,\n            key: undefined\n        }, options);\n        // allow a string argument to be passed in rather\n        // than an argv array.\n        const args = tokenizeArgString(argsInput);\n        // tokenizeArgString adds extra quotes to args if argsInput is a string\n        // only strip those extra quotes in processValue if argsInput is a string\n        const inputIsString = typeof argsInput === 'string';\n        // aliases might have transitive relationships, normalize this.\n        const aliases = combineAliases(Object.assign(Object.create(null), opts.alias));\n        const configuration = Object.assign({\n            'boolean-negation': true,\n            'camel-case-expansion': true,\n            'combine-arrays': false,\n            'dot-notation': true,\n            'duplicate-arguments-array': true,\n            'flatten-duplicate-arrays': true,\n            'greedy-arrays': true,\n            'halt-at-non-option': false,\n            'nargs-eats-options': false,\n            'negation-prefix': 'no-',\n            'parse-numbers': true,\n            'parse-positional-numbers': true,\n            'populate--': false,\n            'set-placeholder-key': false,\n            'short-option-groups': true,\n            'strip-aliased': false,\n            'strip-dashed': false,\n            'unknown-options-as-args': false\n        }, opts.configuration);\n        const defaults = Object.assign(Object.create(null), opts.default);\n        const configObjects = opts.configObjects || [];\n        const envPrefix = opts.envPrefix;\n        const notFlagsOption = configuration['populate--'];\n        const notFlagsArgv = notFlagsOption ? '--' : '_';\n        const newAliases = Object.create(null);\n        const defaulted = Object.create(null);\n        // allow a i18n handler to be passed in, default to a fake one (util.format).\n        const __ = opts.__ || mixin.format;\n        const flags = {\n            aliases: Object.create(null),\n            arrays: Object.create(null),\n            bools: Object.create(null),\n            strings: Object.create(null),\n            numbers: Object.create(null),\n            counts: Object.create(null),\n            normalize: Object.create(null),\n            configs: Object.create(null),\n            nargs: Object.create(null),\n            coercions: Object.create(null),\n            keys: []\n        };\n        const negative = /^-([0-9]+(\\.[0-9]+)?|\\.[0-9]+)$/;\n        const negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)');\n        [].concat(opts.array || []).filter(Boolean).forEach(function (opt) {\n            const key = typeof opt === 'object' ? opt.key : opt;\n            // assign to flags[bools|strings|numbers]\n            const assignment = Object.keys(opt).map(function (key) {\n                const arrayFlagKeys = {\n                    boolean: 'bools',\n                    string: 'strings',\n                    number: 'numbers'\n                };\n                return arrayFlagKeys[key];\n            }).filter(Boolean).pop();\n            // assign key to be coerced\n            if (assignment) {\n                flags[assignment][key] = true;\n            }\n            flags.arrays[key] = true;\n            flags.keys.push(key);\n        });\n        [].concat(opts.boolean || []).filter(Boolean).forEach(function (key) {\n            flags.bools[key] = true;\n            flags.keys.push(key);\n        });\n        [].concat(opts.string || []).filter(Boolean).forEach(function (key) {\n            flags.strings[key] = true;\n            flags.keys.push(key);\n        });\n        [].concat(opts.number || []).filter(Boolean).forEach(function (key) {\n            flags.numbers[key] = true;\n            flags.keys.push(key);\n        });\n        [].concat(opts.count || []).filter(Boolean).forEach(function (key) {\n            flags.counts[key] = true;\n            flags.keys.push(key);\n        });\n        [].concat(opts.normalize || []).filter(Boolean).forEach(function (key) {\n            flags.normalize[key] = true;\n            flags.keys.push(key);\n        });\n        if (typeof opts.narg === 'object') {\n            Object.entries(opts.narg).forEach(([key, value]) => {\n                if (typeof value === 'number') {\n                    flags.nargs[key] = value;\n                    flags.keys.push(key);\n                }\n            });\n        }\n        if (typeof opts.coerce === 'object') {\n            Object.entries(opts.coerce).forEach(([key, value]) => {\n                if (typeof value === 'function') {\n                    flags.coercions[key] = value;\n                    flags.keys.push(key);\n                }\n            });\n        }\n        if (typeof opts.config !== 'undefined') {\n            if (Array.isArray(opts.config) || typeof opts.config === 'string') {\n                ;\n                [].concat(opts.config).filter(Boolean).forEach(function (key) {\n                    flags.configs[key] = true;\n                });\n            }\n            else if (typeof opts.config === 'object') {\n                Object.entries(opts.config).forEach(([key, value]) => {\n                    if (typeof value === 'boolean' || typeof value === 'function') {\n                        flags.configs[key] = value;\n                    }\n                });\n            }\n        }\n        // create a lookup table that takes into account all\n        // combinations of aliases: {f: ['foo'], foo: ['f']}\n        extendAliases(opts.key, aliases, opts.default, flags.arrays);\n        // apply default values to all aliases.\n        Object.keys(defaults).forEach(function (key) {\n            (flags.aliases[key] || []).forEach(function (alias) {\n                defaults[alias] = defaults[key];\n            });\n        });\n        let error = null;\n        checkConfiguration();\n        let notFlags = [];\n        const argv = Object.assign(Object.create(null), { _: [] });\n        // TODO(bcoe): for the first pass at removing object prototype  we didn't\n        // remove all prototypes from objects returned by this API, we might want\n        // to gradually move towards doing so.\n        const argvReturn = {};\n        for (let i = 0; i < args.length; i++) {\n            const arg = args[i];\n            const truncatedArg = arg.replace(/^-{3,}/, '---');\n            let broken;\n            let key;\n            let letters;\n            let m;\n            let next;\n            let value;\n            // any unknown option (except for end-of-options, \"--\")\n            if (arg !== '--' && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {\n                pushPositional(arg);\n                // ---, ---=, ----, etc,\n            }\n            else if (truncatedArg.match(/^---+(=|$)/)) {\n                // options without key name are invalid.\n                pushPositional(arg);\n                continue;\n                // -- separated by =\n            }\n            else if (arg.match(/^--.+=/) || (!configuration['short-option-groups'] && arg.match(/^-.+=/))) {\n                // Using [\\s\\S] instead of . because js doesn't support the\n                // 'dotall' regex modifier. See:\n                // http://stackoverflow.com/a/1068308/13216\n                m = arg.match(/^--?([^=]+)=([\\s\\S]*)$/);\n                // arrays format = '--f=a b c'\n                if (m !== null && Array.isArray(m) && m.length >= 3) {\n                    if (checkAllAliases(m[1], flags.arrays)) {\n                        i = eatArray(i, m[1], args, m[2]);\n                    }\n                    else if (checkAllAliases(m[1], flags.nargs) !== false) {\n                        // nargs format = '--f=monkey washing cat'\n                        i = eatNargs(i, m[1], args, m[2]);\n                    }\n                    else {\n                        setArg(m[1], m[2], true);\n                    }\n                }\n            }\n            else if (arg.match(negatedBoolean) && configuration['boolean-negation']) {\n                m = arg.match(negatedBoolean);\n                if (m !== null && Array.isArray(m) && m.length >= 2) {\n                    key = m[1];\n                    setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false);\n                }\n                // -- separated by space.\n            }\n            else if (arg.match(/^--.+/) || (!configuration['short-option-groups'] && arg.match(/^-[^-]+/))) {\n                m = arg.match(/^--?(.+)/);\n                if (m !== null && Array.isArray(m) && m.length >= 2) {\n                    key = m[1];\n                    if (checkAllAliases(key, flags.arrays)) {\n                        // array format = '--foo a b c'\n                        i = eatArray(i, key, args);\n                    }\n                    else if (checkAllAliases(key, flags.nargs) !== false) {\n                        // nargs format = '--foo a b c'\n                        // should be truthy even if: flags.nargs[key] === 0\n                        i = eatNargs(i, key, args);\n                    }\n                    else {\n                        next = args[i + 1];\n                        if (next !== undefined && (!next.match(/^-/) ||\n                            next.match(negative)) &&\n                            !checkAllAliases(key, flags.bools) &&\n                            !checkAllAliases(key, flags.counts)) {\n                            setArg(key, next);\n                            i++;\n                        }\n                        else if (/^(true|false)$/.test(next)) {\n                            setArg(key, next);\n                            i++;\n                        }\n                        else {\n                            setArg(key, defaultValue(key));\n                        }\n                    }\n                }\n                // dot-notation flag separated by '='.\n            }\n            else if (arg.match(/^-.\\..+=/)) {\n                m = arg.match(/^-([^=]+)=([\\s\\S]*)$/);\n                if (m !== null && Array.isArray(m) && m.length >= 3) {\n                    setArg(m[1], m[2]);\n                }\n                // dot-notation flag separated by space.\n            }\n            else if (arg.match(/^-.\\..+/) && !arg.match(negative)) {\n                next = args[i + 1];\n                m = arg.match(/^-(.\\..+)/);\n                if (m !== null && Array.isArray(m) && m.length >= 2) {\n                    key = m[1];\n                    if (next !== undefined && !next.match(/^-/) &&\n                        !checkAllAliases(key, flags.bools) &&\n                        !checkAllAliases(key, flags.counts)) {\n                        setArg(key, next);\n                        i++;\n                    }\n                    else {\n                        setArg(key, defaultValue(key));\n                    }\n                }\n            }\n            else if (arg.match(/^-[^-]+/) && !arg.match(negative)) {\n                letters = arg.slice(1, -1).split('');\n                broken = false;\n                for (let j = 0; j < letters.length; j++) {\n                    next = arg.slice(j + 2);\n                    if (letters[j + 1] && letters[j + 1] === '=') {\n                        value = arg.slice(j + 3);\n                        key = letters[j];\n                        if (checkAllAliases(key, flags.arrays)) {\n                            // array format = '-f=a b c'\n                            i = eatArray(i, key, args, value);\n                        }\n                        else if (checkAllAliases(key, flags.nargs) !== false) {\n                            // nargs format = '-f=monkey washing cat'\n                            i = eatNargs(i, key, args, value);\n                        }\n                        else {\n                            setArg(key, value);\n                        }\n                        broken = true;\n                        break;\n                    }\n                    if (next === '-') {\n                        setArg(letters[j], next);\n                        continue;\n                    }\n                    // current letter is an alphabetic character and next value is a number\n                    if (/[A-Za-z]/.test(letters[j]) &&\n                        /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next) &&\n                        checkAllAliases(next, flags.bools) === false) {\n                        setArg(letters[j], next);\n                        broken = true;\n                        break;\n                    }\n                    if (letters[j + 1] && letters[j + 1].match(/\\W/)) {\n                        setArg(letters[j], next);\n                        broken = true;\n                        break;\n                    }\n                    else {\n                        setArg(letters[j], defaultValue(letters[j]));\n                    }\n                }\n                key = arg.slice(-1)[0];\n                if (!broken && key !== '-') {\n                    if (checkAllAliases(key, flags.arrays)) {\n                        // array format = '-f a b c'\n                        i = eatArray(i, key, args);\n                    }\n                    else if (checkAllAliases(key, flags.nargs) !== false) {\n                        // nargs format = '-f a b c'\n                        // should be truthy even if: flags.nargs[key] === 0\n                        i = eatNargs(i, key, args);\n                    }\n                    else {\n                        next = args[i + 1];\n                        if (next !== undefined && (!/^(-|--)[^-]/.test(next) ||\n                            next.match(negative)) &&\n                            !checkAllAliases(key, flags.bools) &&\n                            !checkAllAliases(key, flags.counts)) {\n                            setArg(key, next);\n                            i++;\n                        }\n                        else if (/^(true|false)$/.test(next)) {\n                            setArg(key, next);\n                            i++;\n                        }\n                        else {\n                            setArg(key, defaultValue(key));\n                        }\n                    }\n                }\n            }\n            else if (arg.match(/^-[0-9]$/) &&\n                arg.match(negative) &&\n                checkAllAliases(arg.slice(1), flags.bools)) {\n                // single-digit boolean alias, e.g: xargs -0\n                key = arg.slice(1);\n                setArg(key, defaultValue(key));\n            }\n            else if (arg === '--') {\n                notFlags = args.slice(i + 1);\n                break;\n            }\n            else if (configuration['halt-at-non-option']) {\n                notFlags = args.slice(i);\n                break;\n            }\n            else {\n                pushPositional(arg);\n            }\n        }\n        // order of precedence:\n        // 1. command line arg\n        // 2. value from env var\n        // 3. value from config file\n        // 4. value from config objects\n        // 5. configured default value\n        applyEnvVars(argv, true); // special case: check env vars that point to config file\n        applyEnvVars(argv, false);\n        setConfig(argv);\n        setConfigObjects();\n        applyDefaultsAndAliases(argv, flags.aliases, defaults, true);\n        applyCoercions(argv);\n        if (configuration['set-placeholder-key'])\n            setPlaceholderKeys(argv);\n        // for any counts either not in args or without an explicit default, set to 0\n        Object.keys(flags.counts).forEach(function (key) {\n            if (!hasKey(argv, key.split('.')))\n                setArg(key, 0);\n        });\n        // '--' defaults to undefined.\n        if (notFlagsOption && notFlags.length)\n            argv[notFlagsArgv] = [];\n        notFlags.forEach(function (key) {\n            argv[notFlagsArgv].push(key);\n        });\n        if (configuration['camel-case-expansion'] && configuration['strip-dashed']) {\n            Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => {\n                delete argv[key];\n            });\n        }\n        if (configuration['strip-aliased']) {\n            ;\n            [].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => {\n                if (configuration['camel-case-expansion'] && alias.includes('-')) {\n                    delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')];\n                }\n                delete argv[alias];\n            });\n        }\n        // Push argument into positional array, applying numeric coercion:\n        function pushPositional(arg) {\n            const maybeCoercedNumber = maybeCoerceNumber('_', arg);\n            if (typeof maybeCoercedNumber === 'string' || typeof maybeCoercedNumber === 'number') {\n                argv._.push(maybeCoercedNumber);\n            }\n        }\n        // how many arguments should we consume, based\n        // on the nargs option?\n        function eatNargs(i, key, args, argAfterEqualSign) {\n            let ii;\n            let toEat = checkAllAliases(key, flags.nargs);\n            // NaN has a special meaning for the array type, indicating that one or\n            // more values are expected.\n            toEat = typeof toEat !== 'number' || isNaN(toEat) ? 1 : toEat;\n            if (toEat === 0) {\n                if (!isUndefined(argAfterEqualSign)) {\n                    error = Error(__('Argument unexpected for: %s', key));\n                }\n                setArg(key, defaultValue(key));\n                return i;\n            }\n            let available = isUndefined(argAfterEqualSign) ? 0 : 1;\n            if (configuration['nargs-eats-options']) {\n                // classic behavior, yargs eats positional and dash arguments.\n                if (args.length - (i + 1) + available < toEat) {\n                    error = Error(__('Not enough arguments following: %s', key));\n                }\n                available = toEat;\n            }\n            else {\n                // nargs will not consume flag arguments, e.g., -abc, --foo,\n                // and terminates when one is observed.\n                for (ii = i + 1; ii < args.length; ii++) {\n                    if (!args[ii].match(/^-[^0-9]/) || args[ii].match(negative) || isUnknownOptionAsArg(args[ii]))\n                        available++;\n                    else\n                        break;\n                }\n                if (available < toEat)\n                    error = Error(__('Not enough arguments following: %s', key));\n            }\n            let consumed = Math.min(available, toEat);\n            if (!isUndefined(argAfterEqualSign) && consumed > 0) {\n                setArg(key, argAfterEqualSign);\n                consumed--;\n            }\n            for (ii = i + 1; ii < (consumed + i + 1); ii++) {\n                setArg(key, args[ii]);\n            }\n            return (i + consumed);\n        }\n        // if an option is an array, eat all non-hyphenated arguments\n        // following it... YUM!\n        // e.g., --foo apple banana cat becomes [\"apple\", \"banana\", \"cat\"]\n        function eatArray(i, key, args, argAfterEqualSign) {\n            let argsToSet = [];\n            let next = argAfterEqualSign || args[i + 1];\n            // If both array and nargs are configured, enforce the nargs count:\n            const nargsCount = checkAllAliases(key, flags.nargs);\n            if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) {\n                argsToSet.push(true);\n            }\n            else if (isUndefined(next) ||\n                (isUndefined(argAfterEqualSign) && /^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) {\n                // for keys without value ==> argsToSet remains an empty []\n                // set user default value, if available\n                if (defaults[key] !== undefined) {\n                    const defVal = defaults[key];\n                    argsToSet = Array.isArray(defVal) ? defVal : [defVal];\n                }\n            }\n            else {\n                // value in --option=value is eaten as is\n                if (!isUndefined(argAfterEqualSign)) {\n                    argsToSet.push(processValue(key, argAfterEqualSign, true));\n                }\n                for (let ii = i + 1; ii < args.length; ii++) {\n                    if ((!configuration['greedy-arrays'] && argsToSet.length > 0) ||\n                        (nargsCount && typeof nargsCount === 'number' && argsToSet.length >= nargsCount))\n                        break;\n                    next = args[ii];\n                    if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))\n                        break;\n                    i = ii;\n                    argsToSet.push(processValue(key, next, inputIsString));\n                }\n            }\n            // If both array and nargs are configured, create an error if less than\n            // nargs positionals were found. NaN has special meaning, indicating\n            // that at least one value is required (more are okay).\n            if (typeof nargsCount === 'number' && ((nargsCount && argsToSet.length < nargsCount) ||\n                (isNaN(nargsCount) && argsToSet.length === 0))) {\n                error = Error(__('Not enough arguments following: %s', key));\n            }\n            setArg(key, argsToSet);\n            return i;\n        }\n        function setArg(key, val, shouldStripQuotes = inputIsString) {\n            if (/-/.test(key) && configuration['camel-case-expansion']) {\n                const alias = key.split('.').map(function (prop) {\n                    return camelCase(prop);\n                }).join('.');\n                addNewAlias(key, alias);\n            }\n            const value = processValue(key, val, shouldStripQuotes);\n            const splitKey = key.split('.');\n            setKey(argv, splitKey, value);\n            // handle populating aliases of the full key\n            if (flags.aliases[key]) {\n                flags.aliases[key].forEach(function (x) {\n                    const keyProperties = x.split('.');\n                    setKey(argv, keyProperties, value);\n                });\n            }\n            // handle populating aliases of the first element of the dot-notation key\n            if (splitKey.length > 1 && configuration['dot-notation']) {\n                ;\n                (flags.aliases[splitKey[0]] || []).forEach(function (x) {\n                    let keyProperties = x.split('.');\n                    // expand alias with nested objects in key\n                    const a = [].concat(splitKey);\n                    a.shift(); // nuke the old key.\n                    keyProperties = keyProperties.concat(a);\n                    // populate alias only if is not already an alias of the full key\n                    // (already populated above)\n                    if (!(flags.aliases[key] || []).includes(keyProperties.join('.'))) {\n                        setKey(argv, keyProperties, value);\n                    }\n                });\n            }\n            // Set normalize getter and setter when key is in 'normalize' but isn't an array\n            if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) {\n                const keys = [key].concat(flags.aliases[key] || []);\n                keys.forEach(function (key) {\n                    Object.defineProperty(argvReturn, key, {\n                        enumerable: true,\n                        get() {\n                            return val;\n                        },\n                        set(value) {\n                            val = typeof value === 'string' ? mixin.normalize(value) : value;\n                        }\n                    });\n                });\n            }\n        }\n        function addNewAlias(key, alias) {\n            if (!(flags.aliases[key] && flags.aliases[key].length)) {\n                flags.aliases[key] = [alias];\n                newAliases[alias] = true;\n            }\n            if (!(flags.aliases[alias] && flags.aliases[alias].length)) {\n                addNewAlias(alias, key);\n            }\n        }\n        function processValue(key, val, shouldStripQuotes) {\n            // strings may be quoted, clean this up as we assign values.\n            if (shouldStripQuotes) {\n                val = stripQuotes(val);\n            }\n            // handle parsing boolean arguments --foo=true --bar false.\n            if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {\n                if (typeof val === 'string')\n                    val = val === 'true';\n            }\n            let value = Array.isArray(val)\n                ? val.map(function (v) { return maybeCoerceNumber(key, v); })\n                : maybeCoerceNumber(key, val);\n            // increment a count given as arg (either no value or value parsed as boolean)\n            if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) {\n                value = increment();\n            }\n            // Set normalized value when key is in 'normalize' and in 'arrays'\n            if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) {\n                if (Array.isArray(val))\n                    value = val.map((val) => { return mixin.normalize(val); });\n                else\n                    value = mixin.normalize(val);\n            }\n            return value;\n        }\n        function maybeCoerceNumber(key, value) {\n            if (!configuration['parse-positional-numbers'] && key === '_')\n                return value;\n            if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) {\n                const shouldCoerceNumber = looksLikeNumber(value) && configuration['parse-numbers'] && (Number.isSafeInteger(Math.floor(parseFloat(`${value}`))));\n                if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) {\n                    value = Number(value);\n                }\n            }\n            return value;\n        }\n        // set args from config.json file, this should be\n        // applied last so that defaults can be applied.\n        function setConfig(argv) {\n            const configLookup = Object.create(null);\n            // expand defaults/aliases, in-case any happen to reference\n            // the config.json file.\n            applyDefaultsAndAliases(configLookup, flags.aliases, defaults);\n            Object.keys(flags.configs).forEach(function (configKey) {\n                const configPath = argv[configKey] || configLookup[configKey];\n                if (configPath) {\n                    try {\n                        let config = null;\n                        const resolvedConfigPath = mixin.resolve(mixin.cwd(), configPath);\n                        const resolveConfig = flags.configs[configKey];\n                        if (typeof resolveConfig === 'function') {\n                            try {\n                                config = resolveConfig(resolvedConfigPath);\n                            }\n                            catch (e) {\n                                config = e;\n                            }\n                            if (config instanceof Error) {\n                                error = config;\n                                return;\n                            }\n                        }\n                        else {\n                            config = mixin.require(resolvedConfigPath);\n                        }\n                        setConfigObject(config);\n                    }\n                    catch (ex) {\n                        // Deno will receive a PermissionDenied error if an attempt is\n                        // made to load config without the --allow-read flag:\n                        if (ex.name === 'PermissionDenied')\n                            error = ex;\n                        else if (argv[configKey])\n                            error = Error(__('Invalid JSON config file: %s', configPath));\n                    }\n                }\n            });\n        }\n        // set args from config object.\n        // it recursively checks nested objects.\n        function setConfigObject(config, prev) {\n            Object.keys(config).forEach(function (key) {\n                const value = config[key];\n                const fullKey = prev ? prev + '.' + key : key;\n                // if the value is an inner object and we have dot-notation\n                // enabled, treat inner objects in config the same as\n                // heavily nested dot notations (foo.bar.apple).\n                if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) {\n                    // if the value is an object but not an array, check nested object\n                    setConfigObject(value, fullKey);\n                }\n                else {\n                    // setting arguments via CLI takes precedence over\n                    // values within the config file.\n                    if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) {\n                        setArg(fullKey, value);\n                    }\n                }\n            });\n        }\n        // set all config objects passed in opts\n        function setConfigObjects() {\n            if (typeof configObjects !== 'undefined') {\n                configObjects.forEach(function (configObject) {\n                    setConfigObject(configObject);\n                });\n            }\n        }\n        function applyEnvVars(argv, configOnly) {\n            if (typeof envPrefix === 'undefined')\n                return;\n            const prefix = typeof envPrefix === 'string' ? envPrefix : '';\n            const env = mixin.env();\n            Object.keys(env).forEach(function (envVar) {\n                if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {\n                    // get array of nested keys and convert them to camel case\n                    const keys = envVar.split('__').map(function (key, i) {\n                        if (i === 0) {\n                            key = key.substring(prefix.length);\n                        }\n                        return camelCase(key);\n                    });\n                    if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) {\n                        setArg(keys.join('.'), env[envVar]);\n                    }\n                }\n            });\n        }\n        function applyCoercions(argv) {\n            let coerce;\n            const applied = new Set();\n            Object.keys(argv).forEach(function (key) {\n                if (!applied.has(key)) { // If we haven't already coerced this option via one of its aliases\n                    coerce = checkAllAliases(key, flags.coercions);\n                    if (typeof coerce === 'function') {\n                        try {\n                            const value = maybeCoerceNumber(key, coerce(argv[key]));\n                            ([].concat(flags.aliases[key] || [], key)).forEach(ali => {\n                                applied.add(ali);\n                                argv[ali] = value;\n                            });\n                        }\n                        catch (err) {\n                            error = err;\n                        }\n                    }\n                }\n            });\n        }\n        function setPlaceholderKeys(argv) {\n            flags.keys.forEach((key) => {\n                // don't set placeholder keys for dot notation options 'foo.bar'.\n                if (~key.indexOf('.'))\n                    return;\n                if (typeof argv[key] === 'undefined')\n                    argv[key] = undefined;\n            });\n            return argv;\n        }\n        function applyDefaultsAndAliases(obj, aliases, defaults, canLog = false) {\n            Object.keys(defaults).forEach(function (key) {\n                if (!hasKey(obj, key.split('.'))) {\n                    setKey(obj, key.split('.'), defaults[key]);\n                    if (canLog)\n                        defaulted[key] = true;\n                    (aliases[key] || []).forEach(function (x) {\n                        if (hasKey(obj, x.split('.')))\n                            return;\n                        setKey(obj, x.split('.'), defaults[key]);\n                    });\n                }\n            });\n        }\n        function hasKey(obj, keys) {\n            let o = obj;\n            if (!configuration['dot-notation'])\n                keys = [keys.join('.')];\n            keys.slice(0, -1).forEach(function (key) {\n                o = (o[key] || {});\n            });\n            const key = keys[keys.length - 1];\n            if (typeof o !== 'object')\n                return false;\n            else\n                return key in o;\n        }\n        function setKey(obj, keys, value) {\n            let o = obj;\n            if (!configuration['dot-notation'])\n                keys = [keys.join('.')];\n            keys.slice(0, -1).forEach(function (key) {\n                // TODO(bcoe): in the next major version of yargs, switch to\n                // Object.create(null) for dot notation:\n                key = sanitizeKey(key);\n                if (typeof o === 'object' && o[key] === undefined) {\n                    o[key] = {};\n                }\n                if (typeof o[key] !== 'object' || Array.isArray(o[key])) {\n                    // ensure that o[key] is an array, and that the last item is an empty object.\n                    if (Array.isArray(o[key])) {\n                        o[key].push({});\n                    }\n                    else {\n                        o[key] = [o[key], {}];\n                    }\n                    // we want to update the empty object at the end of the o[key] array, so set o to that object\n                    o = o[key][o[key].length - 1];\n                }\n                else {\n                    o = o[key];\n                }\n            });\n            // TODO(bcoe): in the next major version of yargs, switch to\n            // Object.create(null) for dot notation:\n            const key = sanitizeKey(keys[keys.length - 1]);\n            const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays);\n            const isValueArray = Array.isArray(value);\n            let duplicate = configuration['duplicate-arguments-array'];\n            // nargs has higher priority than duplicate\n            if (!duplicate && checkAllAliases(key, flags.nargs)) {\n                duplicate = true;\n                if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) {\n                    o[key] = undefined;\n                }\n            }\n            if (value === increment()) {\n                o[key] = increment(o[key]);\n            }\n            else if (Array.isArray(o[key])) {\n                if (duplicate && isTypeArray && isValueArray) {\n                    o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]);\n                }\n                else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) {\n                    o[key] = value;\n                }\n                else {\n                    o[key] = o[key].concat([value]);\n                }\n            }\n            else if (o[key] === undefined && isTypeArray) {\n                o[key] = isValueArray ? value : [value];\n            }\n            else if (duplicate && !(o[key] === undefined ||\n                checkAllAliases(key, flags.counts) ||\n                checkAllAliases(key, flags.bools))) {\n                o[key] = [o[key], value];\n            }\n            else {\n                o[key] = value;\n            }\n        }\n        // extend the aliases list with inferred aliases.\n        function extendAliases(...args) {\n            args.forEach(function (obj) {\n                Object.keys(obj || {}).forEach(function (key) {\n                    // short-circuit if we've already added a key\n                    // to the aliases array, for example it might\n                    // exist in both 'opts.default' and 'opts.key'.\n                    if (flags.aliases[key])\n                        return;\n                    flags.aliases[key] = [].concat(aliases[key] || []);\n                    // For \"--option-name\", also set argv.optionName\n                    flags.aliases[key].concat(key).forEach(function (x) {\n                        if (/-/.test(x) && configuration['camel-case-expansion']) {\n                            const c = camelCase(x);\n                            if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n                                flags.aliases[key].push(c);\n                                newAliases[c] = true;\n                            }\n                        }\n                    });\n                    // For \"--optionName\", also set argv['option-name']\n                    flags.aliases[key].concat(key).forEach(function (x) {\n                        if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) {\n                            const c = decamelize(x, '-');\n                            if (c !== key && flags.aliases[key].indexOf(c) === -1) {\n                                flags.aliases[key].push(c);\n                                newAliases[c] = true;\n                            }\n                        }\n                    });\n                    flags.aliases[key].forEach(function (x) {\n                        flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) {\n                            return x !== y;\n                        }));\n                    });\n                });\n            });\n        }\n        function checkAllAliases(key, flag) {\n            const toCheck = [].concat(flags.aliases[key] || [], key);\n            const keys = Object.keys(flag);\n            const setAlias = toCheck.find(key => keys.includes(key));\n            return setAlias ? flag[setAlias] : false;\n        }\n        function hasAnyFlag(key) {\n            const flagsKeys = Object.keys(flags);\n            const toCheck = [].concat(flagsKeys.map(k => flags[k]));\n            return toCheck.some(function (flag) {\n                return Array.isArray(flag) ? flag.includes(key) : flag[key];\n            });\n        }\n        function hasFlagsMatching(arg, ...patterns) {\n            const toCheck = [].concat(...patterns);\n            return toCheck.some(function (pattern) {\n                const match = arg.match(pattern);\n                return match && hasAnyFlag(match[1]);\n            });\n        }\n        // based on a simplified version of the short flag group parsing logic\n        function hasAllShortFlags(arg) {\n            // if this is a negative number, or doesn't start with a single hyphen, it's not a short flag group\n            if (arg.match(negative) || !arg.match(/^-[^-]+/)) {\n                return false;\n            }\n            let hasAllFlags = true;\n            let next;\n            const letters = arg.slice(1).split('');\n            for (let j = 0; j < letters.length; j++) {\n                next = arg.slice(j + 2);\n                if (!hasAnyFlag(letters[j])) {\n                    hasAllFlags = false;\n                    break;\n                }\n                if ((letters[j + 1] && letters[j + 1] === '=') ||\n                    next === '-' ||\n                    (/[A-Za-z]/.test(letters[j]) && /^-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) ||\n                    (letters[j + 1] && letters[j + 1].match(/\\W/))) {\n                    break;\n                }\n            }\n            return hasAllFlags;\n        }\n        function isUnknownOptionAsArg(arg) {\n            return configuration['unknown-options-as-args'] && isUnknownOption(arg);\n        }\n        function isUnknownOption(arg) {\n            arg = arg.replace(/^-{3,}/, '--');\n            // ignore negative numbers\n            if (arg.match(negative)) {\n                return false;\n            }\n            // if this is a short option group and all of them are configured, it isn't unknown\n            if (hasAllShortFlags(arg)) {\n                return false;\n            }\n            // e.g. '--count=2'\n            const flagWithEquals = /^-+([^=]+?)=[\\s\\S]*$/;\n            // e.g. '-a' or '--arg'\n            const normalFlag = /^-+([^=]+?)$/;\n            // e.g. '-a-'\n            const flagEndingInHyphen = /^-+([^=]+?)-$/;\n            // e.g. '-abc123'\n            const flagEndingInDigits = /^-+([^=]+?\\d+)$/;\n            // e.g. '-a/usr/local'\n            const flagEndingInNonWordCharacters = /^-+([^=]+?)\\W+.*$/;\n            // check the different types of flag styles, including negatedBoolean, a pattern defined near the start of the parse method\n            return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters);\n        }\n        // make a best effort to pick a default value\n        // for an option based on name and type.\n        function defaultValue(key) {\n            if (!checkAllAliases(key, flags.bools) &&\n                !checkAllAliases(key, flags.counts) &&\n                `${key}` in defaults) {\n                return defaults[key];\n            }\n            else {\n                return defaultForType(guessType(key));\n            }\n        }\n        // return a default value, given the type of a flag.,\n        function defaultForType(type) {\n            const def = {\n                [DefaultValuesForTypeKey.BOOLEAN]: true,\n                [DefaultValuesForTypeKey.STRING]: '',\n                [DefaultValuesForTypeKey.NUMBER]: undefined,\n                [DefaultValuesForTypeKey.ARRAY]: []\n            };\n            return def[type];\n        }\n        // given a flag, enforce a default type.\n        function guessType(key) {\n            let type = DefaultValuesForTypeKey.BOOLEAN;\n            if (checkAllAliases(key, flags.strings))\n                type = DefaultValuesForTypeKey.STRING;\n            else if (checkAllAliases(key, flags.numbers))\n                type = DefaultValuesForTypeKey.NUMBER;\n            else if (checkAllAliases(key, flags.bools))\n                type = DefaultValuesForTypeKey.BOOLEAN;\n            else if (checkAllAliases(key, flags.arrays))\n                type = DefaultValuesForTypeKey.ARRAY;\n            return type;\n        }\n        function isUndefined(num) {\n            return num === undefined;\n        }\n        // check user configuration settings for inconsistencies\n        function checkConfiguration() {\n            // count keys should not be set as array/narg\n            Object.keys(flags.counts).find(key => {\n                if (checkAllAliases(key, flags.arrays)) {\n                    error = Error(__('Invalid configuration: %s, opts.count excludes opts.array.', key));\n                    return true;\n                }\n                else if (checkAllAliases(key, flags.nargs)) {\n                    error = Error(__('Invalid configuration: %s, opts.count excludes opts.narg.', key));\n                    return true;\n                }\n                return false;\n            });\n        }\n        return {\n            aliases: Object.assign({}, flags.aliases),\n            argv: Object.assign(argvReturn, argv),\n            configuration: configuration,\n            defaulted: Object.assign({}, defaulted),\n            error: error,\n            newAliases: Object.assign({}, newAliases)\n        };\n    }\n}\n// if any aliases reference each other, we should\n// merge them together.\nfunction combineAliases(aliases) {\n    const aliasArrays = [];\n    const combined = Object.create(null);\n    let change = true;\n    // turn alias lookup hash {key: ['alias1', 'alias2']} into\n    // a simple array ['key', 'alias1', 'alias2']\n    Object.keys(aliases).forEach(function (key) {\n        aliasArrays.push([].concat(aliases[key], key));\n    });\n    // combine arrays until zero changes are\n    // made in an iteration.\n    while (change) {\n        change = false;\n        for (let i = 0; i < aliasArrays.length; i++) {\n            for (let ii = i + 1; ii < aliasArrays.length; ii++) {\n                const intersect = aliasArrays[i].filter(function (v) {\n                    return aliasArrays[ii].indexOf(v) !== -1;\n                });\n                if (intersect.length) {\n                    aliasArrays[i] = aliasArrays[i].concat(aliasArrays[ii]);\n                    aliasArrays.splice(ii, 1);\n                    change = true;\n                    break;\n                }\n            }\n        }\n    }\n    // map arrays back to the hash-lookup (de-dupe while\n    // we're at it).\n    aliasArrays.forEach(function (aliasArray) {\n        aliasArray = aliasArray.filter(function (v, i, self) {\n            return self.indexOf(v) === i;\n        });\n        const lastAlias = aliasArray.pop();\n        if (lastAlias !== undefined && typeof lastAlias === 'string') {\n            combined[lastAlias] = aliasArray;\n        }\n    });\n    return combined;\n}\n// this function should only be called when a count is given as an arg\n// it is NOT called to set a default value\n// thus we can start the count at 1 instead of 0\nfunction increment(orig) {\n    return orig !== undefined ? orig + 1 : 1;\n}\n// TODO(bcoe): in the next major version of yargs, switch to\n// Object.create(null) for dot notation:\nfunction sanitizeKey(key) {\n    if (key === '__proto__')\n        return '___proto___';\n    return key;\n}\nfunction stripQuotes(val) {\n    return (typeof val === 'string' &&\n        (val[0] === \"'\" || val[0] === '\"') &&\n        val[val.length - 1] === val[0])\n        ? val.substring(1, val.length - 1)\n        : val;\n}\n", "function getProcessArgvBinIndex() {\n    if (isBundledElectronApp())\n        return 0;\n    return 1;\n}\nfunction isBundledElectronApp() {\n    return isElectronApp() && !process.defaultApp;\n}\nfunction isElectronApp() {\n    return !!process.versions.electron;\n}\nexport function hideBin(argv) {\n    return argv.slice(getProcessArgvBinIndex() + 1);\n}\nexport function getProcessArgvBin() {\n    return process.argv[getProcessArgvBinIndex()];\n}\n", "import { readFileSync, statSync, writeFile } from 'fs';\nimport { format } from 'util';\nimport { resolve } from 'path';\nexport default {\n    fs: {\n        readFileSync,\n        writeFile\n    },\n    format,\n    resolve,\n    exists: (file) => {\n        try {\n            return statSync(file).isFile();\n        }\n        catch (err) {\n            return false;\n        }\n    }\n};\n", "let shim;\nclass Y18N {\n    constructor(opts) {\n        // configurable options.\n        opts = opts || {};\n        this.directory = opts.directory || './locales';\n        this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true;\n        this.locale = opts.locale || 'en';\n        this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true;\n        // internal stuff.\n        this.cache = Object.create(null);\n        this.writeQueue = [];\n    }\n    __(...args) {\n        if (typeof arguments[0] !== 'string') {\n            return this._taggedLiteral(arguments[0], ...arguments);\n        }\n        const str = args.shift();\n        let cb = function () { }; // start with noop.\n        if (typeof args[args.length - 1] === 'function')\n            cb = args.pop();\n        cb = cb || function () { }; // noop.\n        if (!this.cache[this.locale])\n            this._readLocaleFile();\n        // we've observed a new string, update the language file.\n        if (!this.cache[this.locale][str] && this.updateFiles) {\n            this.cache[this.locale][str] = str;\n            // include the current directory and locale,\n            // since these values could change before the\n            // write is performed.\n            this._enqueueWrite({\n                directory: this.directory,\n                locale: this.locale,\n                cb\n            });\n        }\n        else {\n            cb();\n        }\n        return shim.format.apply(shim.format, [this.cache[this.locale][str] || str].concat(args));\n    }\n    __n() {\n        const args = Array.prototype.slice.call(arguments);\n        const singular = args.shift();\n        const plural = args.shift();\n        const quantity = args.shift();\n        let cb = function () { }; // start with noop.\n        if (typeof args[args.length - 1] === 'function')\n            cb = args.pop();\n        if (!this.cache[this.locale])\n            this._readLocaleFile();\n        let str = quantity === 1 ? singular : plural;\n        if (this.cache[this.locale][singular]) {\n            const entry = this.cache[this.locale][singular];\n            str = entry[quantity === 1 ? 'one' : 'other'];\n        }\n        // we've observed a new string, update the language file.\n        if (!this.cache[this.locale][singular] && this.updateFiles) {\n            this.cache[this.locale][singular] = {\n                one: singular,\n                other: plural\n            };\n            // include the current directory and locale,\n            // since these values could change before the\n            // write is performed.\n            this._enqueueWrite({\n                directory: this.directory,\n                locale: this.locale,\n                cb\n            });\n        }\n        else {\n            cb();\n        }\n        // if a %d placeholder is provided, add quantity\n        // to the arguments expanded by util.format.\n        const values = [str];\n        if (~str.indexOf('%d'))\n            values.push(quantity);\n        return shim.format.apply(shim.format, values.concat(args));\n    }\n    setLocale(locale) {\n        this.locale = locale;\n    }\n    getLocale() {\n        return this.locale;\n    }\n    updateLocale(obj) {\n        if (!this.cache[this.locale])\n            this._readLocaleFile();\n        for (const key in obj) {\n            if (Object.prototype.hasOwnProperty.call(obj, key)) {\n                this.cache[this.locale][key] = obj[key];\n            }\n        }\n    }\n    _taggedLiteral(parts, ...args) {\n        let str = '';\n        parts.forEach(function (part, i) {\n            const arg = args[i + 1];\n            str += part;\n            if (typeof arg !== 'undefined') {\n                str += '%s';\n            }\n        });\n        return this.__.apply(this, [str].concat([].slice.call(args, 1)));\n    }\n    _enqueueWrite(work) {\n        this.writeQueue.push(work);\n        if (this.writeQueue.length === 1)\n            this._processWriteQueue();\n    }\n    _processWriteQueue() {\n        const _this = this;\n        const work = this.writeQueue[0];\n        // destructure the enqueued work.\n        const directory = work.directory;\n        const locale = work.locale;\n        const cb = work.cb;\n        const languageFile = this._resolveLocaleFile(directory, locale);\n        const serializedLocale = JSON.stringify(this.cache[locale], null, 2);\n        shim.fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) {\n            _this.writeQueue.shift();\n            if (_this.writeQueue.length > 0)\n                _this._processWriteQueue();\n            cb(err);\n        });\n    }\n    _readLocaleFile() {\n        let localeLookup = {};\n        const languageFile = this._resolveLocaleFile(this.directory, this.locale);\n        try {\n            // When using a bundler such as webpack, readFileSync may not be defined:\n            if (shim.fs.readFileSync) {\n                localeLookup = JSON.parse(shim.fs.readFileSync(languageFile, 'utf-8'));\n            }\n        }\n        catch (err) {\n            if (err instanceof SyntaxError) {\n                err.message = 'syntax error in ' + languageFile;\n            }\n            if (err.code === 'ENOENT')\n                localeLookup = {};\n            else\n                throw err;\n        }\n        this.cache[this.locale] = localeLookup;\n    }\n    _resolveLocaleFile(directory, locale) {\n        let file = shim.resolve(directory, './', locale + '.json');\n        if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) {\n            // attempt fallback to language only\n            const languageFile = shim.resolve(directory, './', locale.split('_')[0] + '.json');\n            if (this._fileExistsSync(languageFile))\n                file = languageFile;\n        }\n        return file;\n    }\n    _fileExistsSync(file) {\n        return shim.exists(file);\n    }\n}\nexport function y18n(opts, _shim) {\n    shim = _shim;\n    const y18n = new Y18N(opts);\n    return {\n        __: y18n.__.bind(y18n),\n        __n: y18n.__n.bind(y18n),\n        setLocale: y18n.setLocale.bind(y18n),\n        getLocale: y18n.getLocale.bind(y18n),\n        updateLocale: y18n.updateLocale.bind(y18n),\n        locale: y18n.locale\n    };\n}\n", "import shim from './build/lib/platform-shims/node.js'\nimport { y18n as _y18n } from './build/lib/index.js'\n\nconst y18n = (opts) => {\n  return _y18n(opts, shim)\n}\n\nexport default y18n\n", "export function assertNotStrictEqual(actual, expected, shim, message) {\n    shim.assert.notStrictEqual(actual, expected, message);\n}\nexport function assertSingleKey(actual, shim) {\n    shim.assert.strictEqual(typeof actual, 'string');\n}\nexport function objectKeys(object) {\n    return Object.keys(object);\n}\n", "export function isPromise(maybePromise) {\n    return (!!maybePromise &&\n        !!maybePromise.then &&\n        typeof maybePromise.then === 'function');\n}\n", "export class YError extends Error {\n    constructor(msg) {\n        super(msg || 'yargs error');\n        this.name = 'YError';\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, YError);\n        }\n    }\n}\n", "export function parseCommand(cmd) {\n    const extraSpacesStrippedCommand = cmd.replace(/\\s{2,}/g, ' ');\n    const splitCommand = extraSpacesStrippedCommand.split(/\\s+(?![^[]*]|[^<]*>)/);\n    const bregex = /\\.*[\\][<>]/g;\n    const firstCommand = splitCommand.shift();\n    if (!firstCommand)\n        throw new Error(`No command found in: ${cmd}`);\n    const parsedCommand = {\n        cmd: firstCommand.replace(bregex, ''),\n        demanded: [],\n        optional: [],\n    };\n    splitCommand.forEach((cmd, i) => {\n        let variadic = false;\n        cmd = cmd.replace(/\\s/g, '');\n        if (/\\.+[\\]>]/.test(cmd) && i === splitCommand.length - 1)\n            variadic = true;\n        if (/^\\[/.test(cmd)) {\n            parsedCommand.optional.push({\n                cmd: cmd.replace(bregex, '').split('|'),\n                variadic,\n            });\n        }\n        else {\n            parsedCommand.demanded.push({\n                cmd: cmd.replace(bregex, '').split('|'),\n                variadic,\n            });\n        }\n    });\n    return parsedCommand;\n}\n", "import { YError } from './yerror.js';\nimport { parseCommand } from './parse-command.js';\nconst positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth'];\nexport function argsert(arg1, arg2, arg3) {\n    function parseArgs() {\n        return typeof arg1 === 'object'\n            ? [{ demanded: [], optional: [] }, arg1, arg2]\n            : [\n                parseCommand(`cmd ${arg1}`),\n                arg2,\n                arg3,\n            ];\n    }\n    try {\n        let position = 0;\n        const [parsed, callerArguments, _length] = parseArgs();\n        const args = [].slice.call(callerArguments);\n        while (args.length && args[args.length - 1] === undefined)\n            args.pop();\n        const length = _length || args.length;\n        if (length < parsed.demanded.length) {\n            throw new YError(`Not enough arguments provided. Expected ${parsed.demanded.length} but received ${args.length}.`);\n        }\n        const totalCommands = parsed.demanded.length + parsed.optional.length;\n        if (length > totalCommands) {\n            throw new YError(`Too many arguments provided. Expected max ${totalCommands} but received ${length}.`);\n        }\n        parsed.demanded.forEach(demanded => {\n            const arg = args.shift();\n            const observedType = guessType(arg);\n            const matchingTypes = demanded.cmd.filter(type => type === observedType || type === '*');\n            if (matchingTypes.length === 0)\n                argumentTypeError(observedType, demanded.cmd, position);\n            position += 1;\n        });\n        parsed.optional.forEach(optional => {\n            if (args.length === 0)\n                return;\n            const arg = args.shift();\n            const observedType = guessType(arg);\n            const matchingTypes = optional.cmd.filter(type => type === observedType || type === '*');\n            if (matchingTypes.length === 0)\n                argumentTypeError(observedType, optional.cmd, position);\n            position += 1;\n        });\n    }\n    catch (err) {\n        console.warn(err.stack);\n    }\n}\nfunction guessType(arg) {\n    if (Array.isArray(arg)) {\n        return 'array';\n    }\n    else if (arg === null) {\n        return 'null';\n    }\n    return typeof arg;\n}\nfunction argumentTypeError(observedType, allowedTypes, position) {\n    throw new YError(`Invalid ${positionName[position] || 'manyith'} argument. Expected ${allowedTypes.join(' or ')} but received ${observedType}.`);\n}\n", "import { argsert } from './argsert.js';\nimport { isPromise } from './utils/is-promise.js';\nexport class GlobalMiddleware {\n    constructor(yargs) {\n        this.globalMiddleware = [];\n        this.frozens = [];\n        this.yargs = yargs;\n    }\n    addMiddleware(callback, applyBeforeValidation, global = true, mutates = false) {\n        argsert('<array|function> [boolean] [boolean] [boolean]', [callback, applyBeforeValidation, global], arguments.length);\n        if (Array.isArray(callback)) {\n            for (let i = 0; i < callback.length; i++) {\n                if (typeof callback[i] !== 'function') {\n                    throw Error('middleware must be a function');\n                }\n                const m = callback[i];\n                m.applyBeforeValidation = applyBeforeValidation;\n                m.global = global;\n            }\n            Array.prototype.push.apply(this.globalMiddleware, callback);\n        }\n        else if (typeof callback === 'function') {\n            const m = callback;\n            m.applyBeforeValidation = applyBeforeValidation;\n            m.global = global;\n            m.mutates = mutates;\n            this.globalMiddleware.push(callback);\n        }\n        return this.yargs;\n    }\n    addCoerceMiddleware(callback, option) {\n        const aliases = this.yargs.getAliases();\n        this.globalMiddleware = this.globalMiddleware.filter(m => {\n            const toCheck = [...(aliases[option] || []), option];\n            if (!m.option)\n                return true;\n            else\n                return !toCheck.includes(m.option);\n        });\n        callback.option = option;\n        return this.addMiddleware(callback, true, true, true);\n    }\n    getMiddleware() {\n        return this.globalMiddleware;\n    }\n    freeze() {\n        this.frozens.push([...this.globalMiddleware]);\n    }\n    unfreeze() {\n        const frozen = this.frozens.pop();\n        if (frozen !== undefined)\n            this.globalMiddleware = frozen;\n    }\n    reset() {\n        this.globalMiddleware = this.globalMiddleware.filter(m => m.global);\n    }\n}\nexport function commandMiddlewareFactory(commandMiddleware) {\n    if (!commandMiddleware)\n        return [];\n    return commandMiddleware.map(middleware => {\n        middleware.applyBeforeValidation = false;\n        return middleware;\n    });\n}\nexport function applyMiddleware(argv, yargs, middlewares, beforeValidation) {\n    return middlewares.reduce((acc, middleware) => {\n        if (middleware.applyBeforeValidation !== beforeValidation) {\n            return acc;\n        }\n        if (middleware.mutates) {\n            if (middleware.applied)\n                return acc;\n            middleware.applied = true;\n        }\n        if (isPromise(acc)) {\n            return acc\n                .then(initialObj => Promise.all([initialObj, middleware(initialObj, yargs)]))\n                .then(([initialObj, middlewareObj]) => Object.assign(initialObj, middlewareObj));\n        }\n        else {\n            const result = middleware(acc, yargs);\n            return isPromise(result)\n                ? result.then(middlewareObj => Object.assign(acc, middlewareObj))\n                : Object.assign(acc, result);\n        }\n    }, argv);\n}\n", "import { isPromise } from './is-promise.js';\nexport function maybeAsyncResult(getResult, resultHandler, errorHandler = (err) => {\n    throw err;\n}) {\n    try {\n        const result = isFunction(getResult) ? getResult() : getResult;\n        return isPromise(result)\n            ? result.then((result) => resultHandler(result))\n            : resultHandler(result);\n    }\n    catch (err) {\n        return errorHandler(err);\n    }\n}\nfunction isFunction(arg) {\n    return typeof arg === 'function';\n}\n", "import { assertNotStrictEqual, } from './typings/common-types.js';\nimport { isPromise } from './utils/is-promise.js';\nimport { applyMiddleware, commandMiddlewareFactory, } from './middleware.js';\nimport { parseCommand } from './parse-command.js';\nimport { isYargsInstance, } from './yargs-factory.js';\nimport { maybeAsyncResult } from './utils/maybe-async-result.js';\nconst DEFAULT_MARKER = /(^\\*)|(^\\$0)/;\nexport class CommandInstance {\n    constructor(usage, validation, globalMiddleware, shim) {\n        this.requireCache = new Set();\n        this.handlers = {};\n        this.aliasMap = {};\n        this.frozens = [];\n        this.shim = shim;\n        this.usage = usage;\n        this.globalMiddleware = globalMiddleware;\n        this.validation = validation;\n    }\n    addDirectory(dir, req, callerFile, opts) {\n        opts = opts || {};\n        this.requireCache.add(callerFile);\n        const fullDirPath = this.shim.path.resolve(this.shim.path.dirname(callerFile), dir);\n        const files = this.shim.readdirSync(fullDirPath, {\n            recursive: opts.recurse ? true : false,\n        });\n        if (!Array.isArray(opts.extensions))\n            opts.extensions = ['js'];\n        const visit = typeof opts.visit === 'function' ? opts.visit : (o) => o;\n        for (const fileb of files) {\n            const file = fileb.toString();\n            if (opts.exclude) {\n                let exclude = false;\n                if (typeof opts.exclude === 'function') {\n                    exclude = opts.exclude(file);\n                }\n                else {\n                    exclude = opts.exclude.test(file);\n                }\n                if (exclude)\n                    continue;\n            }\n            if (opts.include) {\n                let include = false;\n                if (typeof opts.include === 'function') {\n                    include = opts.include(file);\n                }\n                else {\n                    include = opts.include.test(file);\n                }\n                if (!include)\n                    continue;\n            }\n            let supportedExtension = false;\n            for (const ext of opts.extensions) {\n                if (file.endsWith(ext))\n                    supportedExtension = true;\n            }\n            if (supportedExtension) {\n                const joined = this.shim.path.join(fullDirPath, file);\n                const module = req(joined);\n                const extendableModule = Object.create(null, Object.getOwnPropertyDescriptors({ ...module }));\n                const visited = visit(extendableModule, joined, file);\n                if (visited) {\n                    if (this.requireCache.has(joined))\n                        continue;\n                    else\n                        this.requireCache.add(joined);\n                    if (!extendableModule.command) {\n                        extendableModule.command = this.shim.path.basename(joined, this.shim.path.extname(joined));\n                    }\n                    this.addHandler(extendableModule);\n                }\n            }\n        }\n    }\n    addHandler(cmd, description, builder, handler, commandMiddleware, deprecated) {\n        let aliases = [];\n        const middlewares = commandMiddlewareFactory(commandMiddleware);\n        handler = handler || (() => { });\n        if (Array.isArray(cmd)) {\n            if (isCommandAndAliases(cmd)) {\n                [cmd, ...aliases] = cmd;\n            }\n            else {\n                for (const command of cmd) {\n                    this.addHandler(command);\n                }\n            }\n        }\n        else if (isCommandHandlerDefinition(cmd)) {\n            let command = Array.isArray(cmd.command) || typeof cmd.command === 'string'\n                ? cmd.command\n                : null;\n            if (command === null) {\n                throw new Error(`No command name given for module: ${this.shim.inspect(cmd)}`);\n            }\n            if (cmd.aliases)\n                command = [].concat(command).concat(cmd.aliases);\n            this.addHandler(command, this.extractDesc(cmd), cmd.builder, cmd.handler, cmd.middlewares, cmd.deprecated);\n            return;\n        }\n        else if (isCommandBuilderDefinition(builder)) {\n            this.addHandler([cmd].concat(aliases), description, builder.builder, builder.handler, builder.middlewares, builder.deprecated);\n            return;\n        }\n        if (typeof cmd === 'string') {\n            const parsedCommand = parseCommand(cmd);\n            aliases = aliases.map(alias => parseCommand(alias).cmd);\n            let isDefault = false;\n            const parsedAliases = [parsedCommand.cmd].concat(aliases).filter(c => {\n                if (DEFAULT_MARKER.test(c)) {\n                    isDefault = true;\n                    return false;\n                }\n                return true;\n            });\n            if (parsedAliases.length === 0 && isDefault)\n                parsedAliases.push('$0');\n            if (isDefault) {\n                parsedCommand.cmd = parsedAliases[0];\n                aliases = parsedAliases.slice(1);\n                cmd = cmd.replace(DEFAULT_MARKER, parsedCommand.cmd);\n            }\n            aliases.forEach(alias => {\n                this.aliasMap[alias] = parsedCommand.cmd;\n            });\n            if (description !== false) {\n                this.usage.command(cmd, description, isDefault, aliases, deprecated);\n            }\n            this.handlers[parsedCommand.cmd] = {\n                original: cmd,\n                description,\n                handler,\n                builder: builder || {},\n                middlewares,\n                deprecated,\n                demanded: parsedCommand.demanded,\n                optional: parsedCommand.optional,\n            };\n            if (isDefault)\n                this.defaultCommand = this.handlers[parsedCommand.cmd];\n        }\n    }\n    getCommandHandlers() {\n        return this.handlers;\n    }\n    getCommands() {\n        return Object.keys(this.handlers).concat(Object.keys(this.aliasMap));\n    }\n    hasDefaultCommand() {\n        return !!this.defaultCommand;\n    }\n    runCommand(command, yargs, parsed, commandIndex, helpOnly, helpOrVersionSet) {\n        const commandHandler = this.handlers[command] ||\n            this.handlers[this.aliasMap[command]] ||\n            this.defaultCommand;\n        const currentContext = yargs.getInternalMethods().getContext();\n        const parentCommands = currentContext.commands.slice();\n        const isDefaultCommand = !command;\n        if (command) {\n            currentContext.commands.push(command);\n            currentContext.fullCommands.push(commandHandler.original);\n        }\n        const builderResult = this.applyBuilderUpdateUsageAndParse(isDefaultCommand, commandHandler, yargs, parsed.aliases, parentCommands, commandIndex, helpOnly, helpOrVersionSet);\n        return isPromise(builderResult)\n            ? builderResult.then(result => this.applyMiddlewareAndGetResult(isDefaultCommand, commandHandler, result.innerArgv, currentContext, helpOnly, result.aliases, yargs))\n            : this.applyMiddlewareAndGetResult(isDefaultCommand, commandHandler, builderResult.innerArgv, currentContext, helpOnly, builderResult.aliases, yargs);\n    }\n    applyBuilderUpdateUsageAndParse(isDefaultCommand, commandHandler, yargs, aliases, parentCommands, commandIndex, helpOnly, helpOrVersionSet) {\n        const builder = commandHandler.builder;\n        let innerYargs = yargs;\n        if (isCommandBuilderCallback(builder)) {\n            yargs.getInternalMethods().getUsageInstance().freeze();\n            const builderOutput = builder(yargs.getInternalMethods().reset(aliases), helpOrVersionSet);\n            if (isPromise(builderOutput)) {\n                return builderOutput.then(output => {\n                    innerYargs = isYargsInstance(output) ? output : yargs;\n                    return this.parseAndUpdateUsage(isDefaultCommand, commandHandler, innerYargs, parentCommands, commandIndex, helpOnly);\n                });\n            }\n        }\n        else if (isCommandBuilderOptionDefinitions(builder)) {\n            yargs.getInternalMethods().getUsageInstance().freeze();\n            innerYargs = yargs.getInternalMethods().reset(aliases);\n            Object.keys(commandHandler.builder).forEach(key => {\n                innerYargs.option(key, builder[key]);\n            });\n        }\n        return this.parseAndUpdateUsage(isDefaultCommand, commandHandler, innerYargs, parentCommands, commandIndex, helpOnly);\n    }\n    parseAndUpdateUsage(isDefaultCommand, commandHandler, innerYargs, parentCommands, commandIndex, helpOnly) {\n        if (isDefaultCommand)\n            innerYargs.getInternalMethods().getUsageInstance().unfreeze(true);\n        if (this.shouldUpdateUsage(innerYargs)) {\n            innerYargs\n                .getInternalMethods()\n                .getUsageInstance()\n                .usage(this.usageFromParentCommandsCommandHandler(parentCommands, commandHandler), commandHandler.description);\n        }\n        const innerArgv = innerYargs\n            .getInternalMethods()\n            .runYargsParserAndExecuteCommands(null, undefined, true, commandIndex, helpOnly);\n        return isPromise(innerArgv)\n            ? innerArgv.then(argv => ({\n                aliases: innerYargs.parsed.aliases,\n                innerArgv: argv,\n            }))\n            : {\n                aliases: innerYargs.parsed.aliases,\n                innerArgv: innerArgv,\n            };\n    }\n    shouldUpdateUsage(yargs) {\n        return (!yargs.getInternalMethods().getUsageInstance().getUsageDisabled() &&\n            yargs.getInternalMethods().getUsageInstance().getUsage().length === 0);\n    }\n    usageFromParentCommandsCommandHandler(parentCommands, commandHandler) {\n        const c = DEFAULT_MARKER.test(commandHandler.original)\n            ? commandHandler.original.replace(DEFAULT_MARKER, '').trim()\n            : commandHandler.original;\n        const pc = parentCommands.filter(c => {\n            return !DEFAULT_MARKER.test(c);\n        });\n        pc.push(c);\n        return `$0 ${pc.join(' ')}`;\n    }\n    handleValidationAndGetResult(isDefaultCommand, commandHandler, innerArgv, currentContext, aliases, yargs, middlewares, positionalMap) {\n        if (!yargs.getInternalMethods().getHasOutput()) {\n            const validation = yargs\n                .getInternalMethods()\n                .runValidation(aliases, positionalMap, yargs.parsed.error, isDefaultCommand);\n            innerArgv = maybeAsyncResult(innerArgv, result => {\n                validation(result);\n                return result;\n            });\n        }\n        if (commandHandler.handler && !yargs.getInternalMethods().getHasOutput()) {\n            yargs.getInternalMethods().setHasOutput();\n            const populateDoubleDash = !!yargs.getOptions().configuration['populate--'];\n            yargs\n                .getInternalMethods()\n                .postProcess(innerArgv, populateDoubleDash, false, false);\n            innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false);\n            innerArgv = maybeAsyncResult(innerArgv, result => {\n                const handlerResult = commandHandler.handler(result);\n                return isPromise(handlerResult)\n                    ? handlerResult.then(() => result)\n                    : result;\n            });\n            if (!isDefaultCommand) {\n                yargs.getInternalMethods().getUsageInstance().cacheHelpMessage();\n            }\n            if (isPromise(innerArgv) &&\n                !yargs.getInternalMethods().hasParseCallback()) {\n                innerArgv.catch(error => {\n                    try {\n                        yargs.getInternalMethods().getUsageInstance().fail(null, error);\n                    }\n                    catch (_err) {\n                    }\n                });\n            }\n        }\n        if (!isDefaultCommand) {\n            currentContext.commands.pop();\n            currentContext.fullCommands.pop();\n        }\n        return innerArgv;\n    }\n    applyMiddlewareAndGetResult(isDefaultCommand, commandHandler, innerArgv, currentContext, helpOnly, aliases, yargs) {\n        let positionalMap = {};\n        if (helpOnly)\n            return innerArgv;\n        if (!yargs.getInternalMethods().getHasOutput()) {\n            positionalMap = this.populatePositionals(commandHandler, innerArgv, currentContext, yargs);\n        }\n        const middlewares = this.globalMiddleware\n            .getMiddleware()\n            .slice(0)\n            .concat(commandHandler.middlewares);\n        const maybePromiseArgv = applyMiddleware(innerArgv, yargs, middlewares, true);\n        return isPromise(maybePromiseArgv)\n            ? maybePromiseArgv.then(resolvedInnerArgv => this.handleValidationAndGetResult(isDefaultCommand, commandHandler, resolvedInnerArgv, currentContext, aliases, yargs, middlewares, positionalMap))\n            : this.handleValidationAndGetResult(isDefaultCommand, commandHandler, maybePromiseArgv, currentContext, aliases, yargs, middlewares, positionalMap);\n    }\n    populatePositionals(commandHandler, argv, context, yargs) {\n        argv._ = argv._.slice(context.commands.length);\n        const demanded = commandHandler.demanded.slice(0);\n        const optional = commandHandler.optional.slice(0);\n        const positionalMap = {};\n        this.validation.positionalCount(demanded.length, argv._.length);\n        while (demanded.length) {\n            const demand = demanded.shift();\n            this.populatePositional(demand, argv, positionalMap);\n        }\n        while (optional.length) {\n            const maybe = optional.shift();\n            this.populatePositional(maybe, argv, positionalMap);\n        }\n        argv._ = context.commands.concat(argv._.map(a => '' + a));\n        this.postProcessPositionals(argv, positionalMap, this.cmdToParseOptions(commandHandler.original), yargs);\n        return positionalMap;\n    }\n    populatePositional(positional, argv, positionalMap) {\n        const cmd = positional.cmd[0];\n        if (positional.variadic) {\n            positionalMap[cmd] = argv._.splice(0).map(String);\n        }\n        else {\n            if (argv._.length)\n                positionalMap[cmd] = [String(argv._.shift())];\n        }\n    }\n    cmdToParseOptions(cmdString) {\n        const parseOptions = {\n            array: [],\n            default: {},\n            alias: {},\n            demand: {},\n        };\n        const parsed = parseCommand(cmdString);\n        parsed.demanded.forEach(d => {\n            const [cmd, ...aliases] = d.cmd;\n            if (d.variadic) {\n                parseOptions.array.push(cmd);\n                parseOptions.default[cmd] = [];\n            }\n            parseOptions.alias[cmd] = aliases;\n            parseOptions.demand[cmd] = true;\n        });\n        parsed.optional.forEach(o => {\n            const [cmd, ...aliases] = o.cmd;\n            if (o.variadic) {\n                parseOptions.array.push(cmd);\n                parseOptions.default[cmd] = [];\n            }\n            parseOptions.alias[cmd] = aliases;\n        });\n        return parseOptions;\n    }\n    postProcessPositionals(argv, positionalMap, parseOptions, yargs) {\n        const options = Object.assign({}, yargs.getOptions());\n        options.default = Object.assign(parseOptions.default, options.default);\n        for (const key of Object.keys(parseOptions.alias)) {\n            options.alias[key] = (options.alias[key] || []).concat(parseOptions.alias[key]);\n        }\n        options.array = options.array.concat(parseOptions.array);\n        options.config = {};\n        const unparsed = [];\n        Object.keys(positionalMap).forEach(key => {\n            positionalMap[key].map(value => {\n                if (options.configuration['unknown-options-as-args'])\n                    options.key[key] = true;\n                unparsed.push(`--${key}`);\n                unparsed.push(value);\n            });\n        });\n        if (!unparsed.length)\n            return;\n        const config = Object.assign({}, options.configuration, {\n            'populate--': false,\n        });\n        const parsed = this.shim.Parser.detailed(unparsed, Object.assign({}, options, {\n            configuration: config,\n        }));\n        if (parsed.error) {\n            yargs\n                .getInternalMethods()\n                .getUsageInstance()\n                .fail(parsed.error.message, parsed.error);\n        }\n        else {\n            const positionalKeys = Object.keys(positionalMap);\n            Object.keys(positionalMap).forEach(key => {\n                positionalKeys.push(...parsed.aliases[key]);\n            });\n            Object.keys(parsed.argv).forEach(key => {\n                if (positionalKeys.includes(key)) {\n                    if (!positionalMap[key])\n                        positionalMap[key] = parsed.argv[key];\n                    if (!this.isInConfigs(yargs, key) &&\n                        !this.isDefaulted(yargs, key) &&\n                        Object.prototype.hasOwnProperty.call(argv, key) &&\n                        Object.prototype.hasOwnProperty.call(parsed.argv, key) &&\n                        (Array.isArray(argv[key]) || Array.isArray(parsed.argv[key]))) {\n                        argv[key] = [].concat(argv[key], parsed.argv[key]);\n                    }\n                    else {\n                        argv[key] = parsed.argv[key];\n                    }\n                }\n            });\n        }\n    }\n    isDefaulted(yargs, key) {\n        const { default: defaults } = yargs.getOptions();\n        return (Object.prototype.hasOwnProperty.call(defaults, key) ||\n            Object.prototype.hasOwnProperty.call(defaults, this.shim.Parser.camelCase(key)));\n    }\n    isInConfigs(yargs, key) {\n        const { configObjects } = yargs.getOptions();\n        return (configObjects.some(c => Object.prototype.hasOwnProperty.call(c, key)) ||\n            configObjects.some(c => Object.prototype.hasOwnProperty.call(c, this.shim.Parser.camelCase(key))));\n    }\n    runDefaultBuilderOn(yargs) {\n        if (!this.defaultCommand)\n            return;\n        if (this.shouldUpdateUsage(yargs)) {\n            const commandString = DEFAULT_MARKER.test(this.defaultCommand.original)\n                ? this.defaultCommand.original\n                : this.defaultCommand.original.replace(/^[^[\\]<>]*/, '$0 ');\n            yargs\n                .getInternalMethods()\n                .getUsageInstance()\n                .usage(commandString, this.defaultCommand.description);\n        }\n        const builder = this.defaultCommand.builder;\n        if (isCommandBuilderCallback(builder)) {\n            return builder(yargs, true);\n        }\n        else if (!isCommandBuilderDefinition(builder)) {\n            Object.keys(builder).forEach(key => {\n                yargs.option(key, builder[key]);\n            });\n        }\n        return undefined;\n    }\n    extractDesc({ describe, description, desc }) {\n        for (const test of [describe, description, desc]) {\n            if (typeof test === 'string' || test === false)\n                return test;\n            assertNotStrictEqual(test, true, this.shim);\n        }\n        return false;\n    }\n    freeze() {\n        this.frozens.push({\n            handlers: this.handlers,\n            aliasMap: this.aliasMap,\n            defaultCommand: this.defaultCommand,\n        });\n    }\n    unfreeze() {\n        const frozen = this.frozens.pop();\n        assertNotStrictEqual(frozen, undefined, this.shim);\n        ({\n            handlers: this.handlers,\n            aliasMap: this.aliasMap,\n            defaultCommand: this.defaultCommand,\n        } = frozen);\n    }\n    reset() {\n        this.handlers = {};\n        this.aliasMap = {};\n        this.defaultCommand = undefined;\n        this.requireCache = new Set();\n        return this;\n    }\n}\nexport function command(usage, validation, globalMiddleware, shim) {\n    return new CommandInstance(usage, validation, globalMiddleware, shim);\n}\nexport function isCommandBuilderDefinition(builder) {\n    return (typeof builder === 'object' &&\n        !!builder.builder &&\n        typeof builder.handler === 'function');\n}\nfunction isCommandAndAliases(cmd) {\n    return cmd.every(c => typeof c === 'string');\n}\nexport function isCommandBuilderCallback(builder) {\n    return typeof builder === 'function';\n}\nfunction isCommandBuilderOptionDefinitions(builder) {\n    return typeof builder === 'object';\n}\nexport function isCommandHandlerDefinition(cmd) {\n    return typeof cmd === 'object' && !Array.isArray(cmd);\n}\n", "import { objectKeys } from '../typings/common-types.js';\nexport function objFilter(original = {}, filter = () => true) {\n    const obj = {};\n    objectKeys(original).forEach(key => {\n        if (filter(key, original[key])) {\n            obj[key] = original[key];\n        }\n    });\n    return obj;\n}\n", "export default function setBlocking(blocking) {\n    if (typeof process === 'undefined')\n        return;\n    [process.stdout, process.stderr].forEach(_stream => {\n        const stream = _stream;\n        if (stream._handle &&\n            stream.isTTY &&\n            typeof stream._handle.setBlocking === 'function') {\n            stream._handle.setBlocking(blocking);\n        }\n    });\n}\n", "import { objFilter } from './utils/obj-filter.js';\nimport { YError } from './yerror.js';\nimport setBlocking from './utils/set-blocking.js';\nfunction isBoolean(fail) {\n    return typeof fail === 'boolean';\n}\nexport function usage(yargs, shim) {\n    const __ = shim.y18n.__;\n    const self = {};\n    const fails = [];\n    self.failFn = function failFn(f) {\n        fails.push(f);\n    };\n    let failMessage = null;\n    let globalFailMessage = null;\n    let showHelpOnFail = true;\n    self.showHelpOnFail = function showHelpOnFailFn(arg1 = true, arg2) {\n        const [enabled, message] = typeof arg1 === 'string' ? [true, arg1] : [arg1, arg2];\n        if (yargs.getInternalMethods().isGlobalContext()) {\n            globalFailMessage = message;\n        }\n        failMessage = message;\n        showHelpOnFail = enabled;\n        return self;\n    };\n    let failureOutput = false;\n    self.fail = function fail(msg, err) {\n        const logger = yargs.getInternalMethods().getLoggerInstance();\n        if (fails.length) {\n            for (let i = fails.length - 1; i >= 0; --i) {\n                const fail = fails[i];\n                if (isBoolean(fail)) {\n                    if (err)\n                        throw err;\n                    else if (msg)\n                        throw Error(msg);\n                }\n                else {\n                    fail(msg, err, self);\n                }\n            }\n        }\n        else {\n            if (yargs.getExitProcess())\n                setBlocking(true);\n            if (!failureOutput) {\n                failureOutput = true;\n                if (showHelpOnFail) {\n                    yargs.showHelp('error');\n                    logger.error();\n                }\n                if (msg || err)\n                    logger.error(msg || err);\n                const globalOrCommandFailMessage = failMessage || globalFailMessage;\n                if (globalOrCommandFailMessage) {\n                    if (msg || err)\n                        logger.error('');\n                    logger.error(globalOrCommandFailMessage);\n                }\n            }\n            err = err || new YError(msg);\n            if (yargs.getExitProcess()) {\n                return yargs.exit(1);\n            }\n            else if (yargs.getInternalMethods().hasParseCallback()) {\n                return yargs.exit(1, err);\n            }\n            else {\n                throw err;\n            }\n        }\n    };\n    let usages = [];\n    let usageDisabled = false;\n    self.usage = (msg, description) => {\n        if (msg === null) {\n            usageDisabled = true;\n            usages = [];\n            return self;\n        }\n        usageDisabled = false;\n        usages.push([msg, description || '']);\n        return self;\n    };\n    self.getUsage = () => {\n        return usages;\n    };\n    self.getUsageDisabled = () => {\n        return usageDisabled;\n    };\n    self.getPositionalGroupName = () => {\n        return __('Positionals:');\n    };\n    let examples = [];\n    self.example = (cmd, description) => {\n        examples.push([cmd, description || '']);\n    };\n    let commands = [];\n    self.command = function command(cmd, description, isDefault, aliases, deprecated = false) {\n        if (isDefault) {\n            commands = commands.map(cmdArray => {\n                cmdArray[2] = false;\n                return cmdArray;\n            });\n        }\n        commands.push([cmd, description || '', isDefault, aliases, deprecated]);\n    };\n    self.getCommands = () => commands;\n    let descriptions = {};\n    self.describe = function describe(keyOrKeys, desc) {\n        if (Array.isArray(keyOrKeys)) {\n            keyOrKeys.forEach(k => {\n                self.describe(k, desc);\n            });\n        }\n        else if (typeof keyOrKeys === 'object') {\n            Object.keys(keyOrKeys).forEach(k => {\n                self.describe(k, keyOrKeys[k]);\n            });\n        }\n        else {\n            descriptions[keyOrKeys] = desc;\n        }\n    };\n    self.getDescriptions = () => descriptions;\n    let epilogs = [];\n    self.epilog = msg => {\n        epilogs.push(msg);\n    };\n    let wrapSet = false;\n    let wrap;\n    self.wrap = cols => {\n        wrapSet = true;\n        wrap = cols;\n    };\n    self.getWrap = () => {\n        if (shim.getEnv('YARGS_DISABLE_WRAP')) {\n            return null;\n        }\n        if (!wrapSet) {\n            wrap = windowWidth();\n            wrapSet = true;\n        }\n        return wrap;\n    };\n    const deferY18nLookupPrefix = '__yargsString__:';\n    self.deferY18nLookup = str => deferY18nLookupPrefix + str;\n    self.help = function help() {\n        if (cachedHelpMessage)\n            return cachedHelpMessage;\n        normalizeAliases();\n        const base$0 = yargs.customScriptName\n            ? yargs.$0\n            : shim.path.basename(yargs.$0);\n        const demandedOptions = yargs.getDemandedOptions();\n        const demandedCommands = yargs.getDemandedCommands();\n        const deprecatedOptions = yargs.getDeprecatedOptions();\n        const groups = yargs.getGroups();\n        const options = yargs.getOptions();\n        let keys = [];\n        keys = keys.concat(Object.keys(descriptions));\n        keys = keys.concat(Object.keys(demandedOptions));\n        keys = keys.concat(Object.keys(demandedCommands));\n        keys = keys.concat(Object.keys(options.default));\n        keys = keys.filter(filterHiddenOptions);\n        keys = Object.keys(keys.reduce((acc, key) => {\n            if (key !== '_')\n                acc[key] = true;\n            return acc;\n        }, {}));\n        const theWrap = self.getWrap();\n        const ui = shim.cliui({\n            width: theWrap,\n            wrap: !!theWrap,\n        });\n        if (!usageDisabled) {\n            if (usages.length) {\n                usages.forEach(usage => {\n                    ui.div({ text: `${usage[0].replace(/\\$0/g, base$0)}` });\n                    if (usage[1]) {\n                        ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] });\n                    }\n                });\n                ui.div();\n            }\n            else if (commands.length) {\n                let u = null;\n                if (demandedCommands._) {\n                    u = `${base$0} <${__('command')}>\\n`;\n                }\n                else {\n                    u = `${base$0} [${__('command')}]\\n`;\n                }\n                ui.div(`${u}`);\n            }\n        }\n        if (commands.length > 1 || (commands.length === 1 && !commands[0][2])) {\n            ui.div(__('Commands:'));\n            const context = yargs.getInternalMethods().getContext();\n            const parentCommands = context.commands.length\n                ? `${context.commands.join(' ')} `\n                : '';\n            if (yargs.getInternalMethods().getParserConfiguration()['sort-commands'] ===\n                true) {\n                commands = commands.sort((a, b) => a[0].localeCompare(b[0]));\n            }\n            const prefix = base$0 ? `${base$0} ` : '';\n            commands.forEach(command => {\n                const commandString = `${prefix}${parentCommands}${command[0].replace(/^\\$0 ?/, '')}`;\n                ui.span({\n                    text: commandString,\n                    padding: [0, 2, 0, 2],\n                    width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4,\n                }, { text: command[1] });\n                const hints = [];\n                if (command[2])\n                    hints.push(`[${__('default')}]`);\n                if (command[3] && command[3].length) {\n                    hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`);\n                }\n                if (command[4]) {\n                    if (typeof command[4] === 'string') {\n                        hints.push(`[${__('deprecated: %s', command[4])}]`);\n                    }\n                    else {\n                        hints.push(`[${__('deprecated')}]`);\n                    }\n                }\n                if (hints.length) {\n                    ui.div({\n                        text: hints.join(' '),\n                        padding: [0, 0, 0, 2],\n                        align: 'right',\n                    });\n                }\n                else {\n                    ui.div();\n                }\n            });\n            ui.div();\n        }\n        const aliasKeys = (Object.keys(options.alias) || []).concat(Object.keys(yargs.parsed.newAliases) || []);\n        keys = keys.filter(key => !yargs.parsed.newAliases[key] &&\n            aliasKeys.every(alias => (options.alias[alias] || []).indexOf(key) === -1));\n        const defaultGroup = __('Options:');\n        if (!groups[defaultGroup])\n            groups[defaultGroup] = [];\n        addUngroupedKeys(keys, options.alias, groups, defaultGroup);\n        const isLongSwitch = (sw) => /^--/.test(getText(sw));\n        const displayedGroups = Object.keys(groups)\n            .filter(groupName => groups[groupName].length > 0)\n            .map(groupName => {\n            const normalizedKeys = groups[groupName]\n                .filter(filterHiddenOptions)\n                .map(key => {\n                if (aliasKeys.includes(key))\n                    return key;\n                for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {\n                    if ((options.alias[aliasKey] || []).includes(key))\n                        return aliasKey;\n                }\n                return key;\n            });\n            return { groupName, normalizedKeys };\n        })\n            .filter(({ normalizedKeys }) => normalizedKeys.length > 0)\n            .map(({ groupName, normalizedKeys }) => {\n            const switches = normalizedKeys.reduce((acc, key) => {\n                acc[key] = [key]\n                    .concat(options.alias[key] || [])\n                    .map(sw => {\n                    if (groupName === self.getPositionalGroupName())\n                        return sw;\n                    else {\n                        return ((/^[0-9]$/.test(sw)\n                            ? options.boolean.includes(key)\n                                ? '-'\n                                : '--'\n                            : sw.length > 1\n                                ? '--'\n                                : '-') + sw);\n                    }\n                })\n                    .sort((sw1, sw2) => isLongSwitch(sw1) === isLongSwitch(sw2)\n                    ? 0\n                    : isLongSwitch(sw1)\n                        ? 1\n                        : -1)\n                    .join(', ');\n                return acc;\n            }, {});\n            return { groupName, normalizedKeys, switches };\n        });\n        const shortSwitchesUsed = displayedGroups\n            .filter(({ groupName }) => groupName !== self.getPositionalGroupName())\n            .some(({ normalizedKeys, switches }) => !normalizedKeys.every(key => isLongSwitch(switches[key])));\n        if (shortSwitchesUsed) {\n            displayedGroups\n                .filter(({ groupName }) => groupName !== self.getPositionalGroupName())\n                .forEach(({ normalizedKeys, switches }) => {\n                normalizedKeys.forEach(key => {\n                    if (isLongSwitch(switches[key])) {\n                        switches[key] = addIndentation(switches[key], '-x, '.length);\n                    }\n                });\n            });\n        }\n        displayedGroups.forEach(({ groupName, normalizedKeys, switches }) => {\n            ui.div(groupName);\n            normalizedKeys.forEach(key => {\n                const kswitch = switches[key];\n                let desc = descriptions[key] || '';\n                let type = null;\n                if (desc.includes(deferY18nLookupPrefix))\n                    desc = __(desc.substring(deferY18nLookupPrefix.length));\n                if (options.boolean.includes(key))\n                    type = `[${__('boolean')}]`;\n                if (options.count.includes(key))\n                    type = `[${__('count')}]`;\n                if (options.string.includes(key))\n                    type = `[${__('string')}]`;\n                if (options.normalize.includes(key))\n                    type = `[${__('string')}]`;\n                if (options.array.includes(key))\n                    type = `[${__('array')}]`;\n                if (options.number.includes(key))\n                    type = `[${__('number')}]`;\n                const deprecatedExtra = (deprecated) => typeof deprecated === 'string'\n                    ? `[${__('deprecated: %s', deprecated)}]`\n                    : `[${__('deprecated')}]`;\n                const extra = [\n                    key in deprecatedOptions\n                        ? deprecatedExtra(deprecatedOptions[key])\n                        : null,\n                    type,\n                    key in demandedOptions ? `[${__('required')}]` : null,\n                    options.choices && options.choices[key]\n                        ? `[${__('choices:')} ${self.stringifiedValues(options.choices[key])}]`\n                        : null,\n                    defaultString(options.default[key], options.defaultDescription[key]),\n                ]\n                    .filter(Boolean)\n                    .join(' ');\n                ui.span({\n                    text: getText(kswitch),\n                    padding: [0, 2, 0, 2 + getIndentation(kswitch)],\n                    width: maxWidth(switches, theWrap) + 4,\n                }, desc);\n                const shouldHideOptionExtras = yargs.getInternalMethods().getUsageConfiguration()['hide-types'] ===\n                    true;\n                if (extra && !shouldHideOptionExtras)\n                    ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' });\n                else\n                    ui.div();\n            });\n            ui.div();\n        });\n        if (examples.length) {\n            ui.div(__('Examples:'));\n            examples.forEach(example => {\n                example[0] = example[0].replace(/\\$0/g, base$0);\n            });\n            examples.forEach(example => {\n                if (example[1] === '') {\n                    ui.div({\n                        text: example[0],\n                        padding: [0, 2, 0, 2],\n                    });\n                }\n                else {\n                    ui.div({\n                        text: example[0],\n                        padding: [0, 2, 0, 2],\n                        width: maxWidth(examples, theWrap) + 4,\n                    }, {\n                        text: example[1],\n                    });\n                }\n            });\n            ui.div();\n        }\n        if (epilogs.length > 0) {\n            const e = epilogs\n                .map(epilog => epilog.replace(/\\$0/g, base$0))\n                .join('\\n');\n            ui.div(`${e}\\n`);\n        }\n        return ui.toString().replace(/\\s*$/, '');\n    };\n    function maxWidth(table, theWrap, modifier) {\n        let width = 0;\n        if (!Array.isArray(table)) {\n            table = Object.values(table).map(v => [v]);\n        }\n        table.forEach(v => {\n            width = Math.max(shim.stringWidth(modifier ? `${modifier} ${getText(v[0])}` : getText(v[0])) + getIndentation(v[0]), width);\n        });\n        if (theWrap)\n            width = Math.min(width, parseInt((theWrap * 0.5).toString(), 10));\n        return width;\n    }\n    function normalizeAliases() {\n        const demandedOptions = yargs.getDemandedOptions();\n        const options = yargs.getOptions();\n        (Object.keys(options.alias) || []).forEach(key => {\n            options.alias[key].forEach(alias => {\n                if (descriptions[alias])\n                    self.describe(key, descriptions[alias]);\n                if (alias in demandedOptions)\n                    yargs.demandOption(key, demandedOptions[alias]);\n                if (options.boolean.includes(alias))\n                    yargs.boolean(key);\n                if (options.count.includes(alias))\n                    yargs.count(key);\n                if (options.string.includes(alias))\n                    yargs.string(key);\n                if (options.normalize.includes(alias))\n                    yargs.normalize(key);\n                if (options.array.includes(alias))\n                    yargs.array(key);\n                if (options.number.includes(alias))\n                    yargs.number(key);\n            });\n        });\n    }\n    let cachedHelpMessage;\n    self.cacheHelpMessage = function () {\n        cachedHelpMessage = this.help();\n    };\n    self.clearCachedHelpMessage = function () {\n        cachedHelpMessage = undefined;\n    };\n    self.hasCachedHelpMessage = function () {\n        return !!cachedHelpMessage;\n    };\n    function addUngroupedKeys(keys, aliases, groups, defaultGroup) {\n        let groupedKeys = [];\n        let toCheck = null;\n        Object.keys(groups).forEach(group => {\n            groupedKeys = groupedKeys.concat(groups[group]);\n        });\n        keys.forEach(key => {\n            toCheck = [key].concat(aliases[key]);\n            if (!toCheck.some(k => groupedKeys.indexOf(k) !== -1)) {\n                groups[defaultGroup].push(key);\n            }\n        });\n        return groupedKeys;\n    }\n    function filterHiddenOptions(key) {\n        return (yargs.getOptions().hiddenOptions.indexOf(key) < 0 ||\n            yargs.parsed.argv[yargs.getOptions().showHiddenOpt]);\n    }\n    self.showHelp = (level) => {\n        const logger = yargs.getInternalMethods().getLoggerInstance();\n        if (!level)\n            level = 'error';\n        const emit = typeof level === 'function' ? level : logger[level];\n        emit(self.help());\n    };\n    self.functionDescription = fn => {\n        const description = fn.name\n            ? shim.Parser.decamelize(fn.name, '-')\n            : __('generated-value');\n        return ['(', description, ')'].join('');\n    };\n    self.stringifiedValues = function stringifiedValues(values, separator) {\n        let string = '';\n        const sep = separator || ', ';\n        const array = [].concat(values);\n        if (!values || !array.length)\n            return string;\n        array.forEach(value => {\n            if (string.length)\n                string += sep;\n            string += JSON.stringify(value);\n        });\n        return string;\n    };\n    function defaultString(value, defaultDescription) {\n        let string = `[${__('default:')} `;\n        if (value === undefined && !defaultDescription)\n            return null;\n        if (defaultDescription) {\n            string += defaultDescription;\n        }\n        else {\n            switch (typeof value) {\n                case 'string':\n                    string += `\"${value}\"`;\n                    break;\n                case 'object':\n                    string += JSON.stringify(value);\n                    break;\n                default:\n                    string += value;\n            }\n        }\n        return `${string}]`;\n    }\n    function windowWidth() {\n        const maxWidth = 80;\n        if (shim.process.stdColumns) {\n            return Math.min(maxWidth, shim.process.stdColumns);\n        }\n        else {\n            return maxWidth;\n        }\n    }\n    let version = null;\n    self.version = ver => {\n        version = ver;\n    };\n    self.showVersion = level => {\n        const logger = yargs.getInternalMethods().getLoggerInstance();\n        if (!level)\n            level = 'error';\n        const emit = typeof level === 'function' ? level : logger[level];\n        emit(version);\n    };\n    self.reset = function reset(localLookup) {\n        failMessage = null;\n        failureOutput = false;\n        usages = [];\n        usageDisabled = false;\n        epilogs = [];\n        examples = [];\n        commands = [];\n        descriptions = objFilter(descriptions, k => !localLookup[k]);\n        return self;\n    };\n    const frozens = [];\n    self.freeze = function freeze() {\n        frozens.push({\n            failMessage,\n            failureOutput,\n            usages,\n            usageDisabled,\n            epilogs,\n            examples,\n            commands,\n            descriptions,\n        });\n    };\n    self.unfreeze = function unfreeze(defaultCommand = false) {\n        const frozen = frozens.pop();\n        if (!frozen)\n            return;\n        if (defaultCommand) {\n            descriptions = { ...frozen.descriptions, ...descriptions };\n            commands = [...frozen.commands, ...commands];\n            usages = [...frozen.usages, ...usages];\n            examples = [...frozen.examples, ...examples];\n            epilogs = [...frozen.epilogs, ...epilogs];\n        }\n        else {\n            ({\n                failMessage,\n                failureOutput,\n                usages,\n                usageDisabled,\n                epilogs,\n                examples,\n                commands,\n                descriptions,\n            } = frozen);\n        }\n    };\n    return self;\n}\nfunction isIndentedText(text) {\n    return typeof text === 'object';\n}\nfunction addIndentation(text, indent) {\n    return isIndentedText(text)\n        ? { text: text.text, indentation: text.indentation + indent }\n        : { text, indentation: indent };\n}\nfunction getIndentation(text) {\n    return isIndentedText(text) ? text.indentation : 0;\n}\nfunction getText(text) {\n    return isIndentedText(text) ? text.text : text;\n}\n", "export const completionShTemplate = `###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n#    or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n    local cur_word args type_list\n\n    cur_word=\"\\${COMP_WORDS[COMP_CWORD]}\"\n    args=(\"\\${COMP_WORDS[@]}\")\n\n    # ask yargs to generate completions.\n    # see https://stackoverflow.com/a/40944195/7080036 for the spaces-handling awk\n    mapfile -t type_list < <({{app_path}} --get-yargs-completions \"\\${args[@]}\")\n    mapfile -t COMPREPLY < <(compgen -W \"$( printf '%q ' \"\\${type_list[@]}\" )\" -- \"\\${cur_word}\" |\n        awk '/ / { print \"\\\\\"\"$0\"\\\\\"\" } /^[^ ]+$/ { print $0 }')\n\n    # if no match was found, fall back to filename completion\n    if [ \\${#COMPREPLY[@]} -eq 0 ]; then\n      COMPREPLY=()\n    fi\n\n    return 0\n}\ncomplete -o bashdefault -o default -F _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n`;\nexport const completionZshTemplate = `#compdef {{app_name}}\n###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n#    or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n  local reply\n  local si=$IFS\n  IFS=$'\\n' reply=($(COMP_CWORD=\"$((CURRENT-1))\" COMP_LINE=\"$BUFFER\" COMP_POINT=\"$CURSOR\" {{app_path}} --get-yargs-completions \"\\${words[@]}\"))\n  IFS=$si\n  if [[ \\${#reply} -gt 0 ]]; then\n    _describe 'values' reply\n  else\n    _default\n  fi\n}\nif [[ \"'\\${zsh_eval_context[-1]}\" == \"loadautofunc\" ]]; then\n  _{{app_name}}_yargs_completions \"$@\"\nelse\n  compdef _{{app_name}}_yargs_completions {{app_name}}\nfi\n###-end-{{app_name}}-completions-###\n`;\n", "import { isCommandBuilderCallback } from './command.js';\nimport { assertNotStrictEqual } from './typings/common-types.js';\nimport * as templates from './completion-templates.js';\nimport { isPromise } from './utils/is-promise.js';\nimport { parseCommand } from './parse-command.js';\nexport class Completion {\n    constructor(yargs, usage, command, shim) {\n        var _a, _b, _c;\n        this.yargs = yargs;\n        this.usage = usage;\n        this.command = command;\n        this.shim = shim;\n        this.completionKey = 'get-yargs-completions';\n        this.aliases = null;\n        this.customCompletionFunction = null;\n        this.indexAfterLastReset = 0;\n        this.zshShell =\n            (_c = (((_a = this.shim.getEnv('SHELL')) === null || _a === void 0 ? void 0 : _a.includes('zsh')) ||\n                ((_b = this.shim.getEnv('ZSH_NAME')) === null || _b === void 0 ? void 0 : _b.includes('zsh')))) !== null && _c !== void 0 ? _c : false;\n    }\n    defaultCompletion(args, argv, current, done) {\n        const handlers = this.command.getCommandHandlers();\n        for (let i = 0, ii = args.length; i < ii; ++i) {\n            if (handlers[args[i]] && handlers[args[i]].builder) {\n                const builder = handlers[args[i]].builder;\n                if (isCommandBuilderCallback(builder)) {\n                    this.indexAfterLastReset = i + 1;\n                    const y = this.yargs.getInternalMethods().reset();\n                    builder(y, true);\n                    return y.argv;\n                }\n            }\n        }\n        const completions = [];\n        this.commandCompletions(completions, args, current);\n        this.optionCompletions(completions, args, argv, current);\n        this.choicesFromOptionsCompletions(completions, args, argv, current);\n        this.choicesFromPositionalsCompletions(completions, args, argv, current);\n        done(null, completions);\n    }\n    commandCompletions(completions, args, current) {\n        const parentCommands = this.yargs\n            .getInternalMethods()\n            .getContext().commands;\n        if (!current.match(/^-/) &&\n            parentCommands[parentCommands.length - 1] !== current &&\n            !this.previousArgHasChoices(args)) {\n            this.usage.getCommands().forEach(usageCommand => {\n                const commandName = parseCommand(usageCommand[0]).cmd;\n                if (args.indexOf(commandName) === -1) {\n                    if (!this.zshShell) {\n                        completions.push(commandName);\n                    }\n                    else {\n                        const desc = usageCommand[1] || '';\n                        completions.push(commandName.replace(/:/g, '\\\\:') + ':' + desc);\n                    }\n                }\n            });\n        }\n    }\n    optionCompletions(completions, args, argv, current) {\n        if ((current.match(/^-/) || (current === '' && completions.length === 0)) &&\n            !this.previousArgHasChoices(args)) {\n            const options = this.yargs.getOptions();\n            const positionalKeys = this.yargs.getGroups()[this.usage.getPositionalGroupName()] || [];\n            Object.keys(options.key).forEach(key => {\n                const negable = !!options.configuration['boolean-negation'] &&\n                    options.boolean.includes(key);\n                const isPositionalKey = positionalKeys.includes(key);\n                if (!isPositionalKey &&\n                    !options.hiddenOptions.includes(key) &&\n                    !this.argsContainKey(args, key, negable)) {\n                    this.completeOptionKey(key, completions, current, negable && !!options.default[key]);\n                }\n            });\n        }\n    }\n    choicesFromOptionsCompletions(completions, args, argv, current) {\n        if (this.previousArgHasChoices(args)) {\n            const choices = this.getPreviousArgChoices(args);\n            if (choices && choices.length > 0) {\n                completions.push(...choices.map(c => c.replace(/:/g, '\\\\:')));\n            }\n        }\n    }\n    choicesFromPositionalsCompletions(completions, args, argv, current) {\n        if (current === '' &&\n            completions.length > 0 &&\n            this.previousArgHasChoices(args)) {\n            return;\n        }\n        const positionalKeys = this.yargs.getGroups()[this.usage.getPositionalGroupName()] || [];\n        const offset = Math.max(this.indexAfterLastReset, this.yargs.getInternalMethods().getContext().commands.length +\n            1);\n        const positionalKey = positionalKeys[argv._.length - offset - 1];\n        if (!positionalKey) {\n            return;\n        }\n        const choices = this.yargs.getOptions().choices[positionalKey] || [];\n        for (const choice of choices) {\n            if (choice.startsWith(current)) {\n                completions.push(choice.replace(/:/g, '\\\\:'));\n            }\n        }\n    }\n    getPreviousArgChoices(args) {\n        if (args.length < 1)\n            return;\n        let previousArg = args[args.length - 1];\n        let filter = '';\n        if (!previousArg.startsWith('-') && args.length > 1) {\n            filter = previousArg;\n            previousArg = args[args.length - 2];\n        }\n        if (!previousArg.startsWith('-'))\n            return;\n        const previousArgKey = previousArg.replace(/^-+/, '');\n        const options = this.yargs.getOptions();\n        const possibleAliases = [\n            previousArgKey,\n            ...(this.yargs.getAliases()[previousArgKey] || []),\n        ];\n        let choices;\n        for (const possibleAlias of possibleAliases) {\n            if (Object.prototype.hasOwnProperty.call(options.key, possibleAlias) &&\n                Array.isArray(options.choices[possibleAlias])) {\n                choices = options.choices[possibleAlias];\n                break;\n            }\n        }\n        if (choices) {\n            return choices.filter(choice => !filter || choice.startsWith(filter));\n        }\n    }\n    previousArgHasChoices(args) {\n        const choices = this.getPreviousArgChoices(args);\n        return choices !== undefined && choices.length > 0;\n    }\n    argsContainKey(args, key, negable) {\n        const argsContains = (s) => args.indexOf((/^[^0-9]$/.test(s) ? '-' : '--') + s) !== -1;\n        if (argsContains(key))\n            return true;\n        if (negable && argsContains(`no-${key}`))\n            return true;\n        if (this.aliases) {\n            for (const alias of this.aliases[key]) {\n                if (argsContains(alias))\n                    return true;\n            }\n        }\n        return false;\n    }\n    completeOptionKey(key, completions, current, negable) {\n        var _a, _b, _c, _d;\n        let keyWithDesc = key;\n        if (this.zshShell) {\n            const descs = this.usage.getDescriptions();\n            const aliasKey = (_b = (_a = this === null || this === void 0 ? void 0 : this.aliases) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.find(alias => {\n                const desc = descs[alias];\n                return typeof desc === 'string' && desc.length > 0;\n            });\n            const descFromAlias = aliasKey ? descs[aliasKey] : undefined;\n            const desc = (_d = (_c = descs[key]) !== null && _c !== void 0 ? _c : descFromAlias) !== null && _d !== void 0 ? _d : '';\n            keyWithDesc = `${key.replace(/:/g, '\\\\:')}:${desc\n                .replace('__yargsString__:', '')\n                .replace(/(\\r\\n|\\n|\\r)/gm, ' ')}`;\n        }\n        const startsByTwoDashes = (s) => /^--/.test(s);\n        const isShortOption = (s) => /^[^0-9]$/.test(s);\n        const dashes = !startsByTwoDashes(current) && isShortOption(key) ? '-' : '--';\n        completions.push(dashes + keyWithDesc);\n        if (negable) {\n            completions.push(dashes + 'no-' + keyWithDesc);\n        }\n    }\n    customCompletion(args, argv, current, done) {\n        assertNotStrictEqual(this.customCompletionFunction, null, this.shim);\n        if (isSyncCompletionFunction(this.customCompletionFunction)) {\n            const result = this.customCompletionFunction(current, argv);\n            if (isPromise(result)) {\n                return result\n                    .then(list => {\n                    this.shim.process.nextTick(() => {\n                        done(null, list);\n                    });\n                })\n                    .catch(err => {\n                    this.shim.process.nextTick(() => {\n                        done(err, undefined);\n                    });\n                });\n            }\n            return done(null, result);\n        }\n        else if (isFallbackCompletionFunction(this.customCompletionFunction)) {\n            return this.customCompletionFunction(current, argv, (onCompleted = done) => this.defaultCompletion(args, argv, current, onCompleted), completions => {\n                done(null, completions);\n            });\n        }\n        else {\n            return this.customCompletionFunction(current, argv, completions => {\n                done(null, completions);\n            });\n        }\n    }\n    getCompletion(args, done) {\n        const current = args.length ? args[args.length - 1] : '';\n        const argv = this.yargs.parse(args, true);\n        const completionFunction = this.customCompletionFunction\n            ? (argv) => this.customCompletion(args, argv, current, done)\n            : (argv) => this.defaultCompletion(args, argv, current, done);\n        return isPromise(argv)\n            ? argv.then(completionFunction)\n            : completionFunction(argv);\n    }\n    generateCompletionScript($0, cmd) {\n        let script = this.zshShell\n            ? templates.completionZshTemplate\n            : templates.completionShTemplate;\n        const name = this.shim.path.basename($0);\n        if ($0.match(/\\.js$/))\n            $0 = `./${$0}`;\n        script = script.replace(/{{app_name}}/g, name);\n        script = script.replace(/{{completion_command}}/g, cmd);\n        return script.replace(/{{app_path}}/g, $0);\n    }\n    registerFunction(fn) {\n        this.customCompletionFunction = fn;\n    }\n    setParsed(parsed) {\n        this.aliases = parsed.aliases;\n    }\n}\nexport function completion(yargs, usage, command, shim) {\n    return new Completion(yargs, usage, command, shim);\n}\nfunction isSyncCompletionFunction(completionFunction) {\n    return completionFunction.length < 3;\n}\nfunction isFallbackCompletionFunction(completionFunction) {\n    return completionFunction.length > 3;\n}\n", "export function levenshtein(a, b) {\n    if (a.length === 0)\n        return b.length;\n    if (b.length === 0)\n        return a.length;\n    const matrix = [];\n    let i;\n    for (i = 0; i <= b.length; i++) {\n        matrix[i] = [i];\n    }\n    let j;\n    for (j = 0; j <= a.length; j++) {\n        matrix[0][j] = j;\n    }\n    for (i = 1; i <= b.length; i++) {\n        for (j = 1; j <= a.length; j++) {\n            if (b.charAt(i - 1) === a.charAt(j - 1)) {\n                matrix[i][j] = matrix[i - 1][j - 1];\n            }\n            else {\n                if (i > 1 &&\n                    j > 1 &&\n                    b.charAt(i - 2) === a.charAt(j - 1) &&\n                    b.charAt(i - 1) === a.charAt(j - 2)) {\n                    matrix[i][j] = matrix[i - 2][j - 2] + 1;\n                }\n                else {\n                    matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, Math.min(matrix[i][j - 1] + 1, matrix[i - 1][j] + 1));\n                }\n            }\n        }\n    }\n    return matrix[b.length][a.length];\n}\n", "import { argsert } from './argsert.js';\nimport { assertNotStrictEqual, } from './typings/common-types.js';\nimport { levenshtein as distance } from './utils/levenshtein.js';\nimport { objFilter } from './utils/obj-filter.js';\nconst specialKeys = ['$0', '--', '_'];\nexport function validation(yargs, usage, shim) {\n    const __ = shim.y18n.__;\n    const __n = shim.y18n.__n;\n    const self = {};\n    self.nonOptionCount = function nonOptionCount(argv) {\n        const demandedCommands = yargs.getDemandedCommands();\n        const positionalCount = argv._.length + (argv['--'] ? argv['--'].length : 0);\n        const _s = positionalCount - yargs.getInternalMethods().getContext().commands.length;\n        if (demandedCommands._ &&\n            (_s < demandedCommands._.min || _s > demandedCommands._.max)) {\n            if (_s < demandedCommands._.min) {\n                if (demandedCommands._.minMsg !== undefined) {\n                    usage.fail(demandedCommands._.minMsg\n                        ? demandedCommands._.minMsg\n                            .replace(/\\$0/g, _s.toString())\n                            .replace(/\\$1/, demandedCommands._.min.toString())\n                        : null);\n                }\n                else {\n                    usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', _s, _s.toString(), demandedCommands._.min.toString()));\n                }\n            }\n            else if (_s > demandedCommands._.max) {\n                if (demandedCommands._.maxMsg !== undefined) {\n                    usage.fail(demandedCommands._.maxMsg\n                        ? demandedCommands._.maxMsg\n                            .replace(/\\$0/g, _s.toString())\n                            .replace(/\\$1/, demandedCommands._.max.toString())\n                        : null);\n                }\n                else {\n                    usage.fail(__n('Too many non-option arguments: got %s, maximum of %s', 'Too many non-option arguments: got %s, maximum of %s', _s, _s.toString(), demandedCommands._.max.toString()));\n                }\n            }\n        }\n    };\n    self.positionalCount = function positionalCount(required, observed) {\n        if (observed < required) {\n            usage.fail(__n('Not enough non-option arguments: got %s, need at least %s', 'Not enough non-option arguments: got %s, need at least %s', observed, observed + '', required + ''));\n        }\n    };\n    self.requiredArguments = function requiredArguments(argv, demandedOptions) {\n        let missing = null;\n        for (const key of Object.keys(demandedOptions)) {\n            if (!Object.prototype.hasOwnProperty.call(argv, key) ||\n                typeof argv[key] === 'undefined') {\n                missing = missing || {};\n                missing[key] = demandedOptions[key];\n            }\n        }\n        if (missing) {\n            const customMsgs = [];\n            for (const key of Object.keys(missing)) {\n                const msg = missing[key];\n                if (msg && customMsgs.indexOf(msg) < 0) {\n                    customMsgs.push(msg);\n                }\n            }\n            const customMsg = customMsgs.length ? `\\n${customMsgs.join('\\n')}` : '';\n            usage.fail(__n('Missing required argument: %s', 'Missing required arguments: %s', Object.keys(missing).length, Object.keys(missing).join(', ') + customMsg));\n        }\n    };\n    self.unknownArguments = function unknownArguments(argv, aliases, positionalMap, isDefaultCommand, checkPositionals = true) {\n        var _a;\n        const commandKeys = yargs\n            .getInternalMethods()\n            .getCommandInstance()\n            .getCommands();\n        const unknown = [];\n        const currentContext = yargs.getInternalMethods().getContext();\n        Object.keys(argv).forEach(key => {\n            if (!specialKeys.includes(key) &&\n                !Object.prototype.hasOwnProperty.call(positionalMap, key) &&\n                !Object.prototype.hasOwnProperty.call(yargs.getInternalMethods().getParseContext(), key) &&\n                !self.isValidAndSomeAliasIsNotNew(key, aliases)) {\n                unknown.push(key);\n            }\n        });\n        if (checkPositionals &&\n            (currentContext.commands.length > 0 ||\n                commandKeys.length > 0 ||\n                isDefaultCommand)) {\n            argv._.slice(currentContext.commands.length).forEach(key => {\n                if (!commandKeys.includes('' + key)) {\n                    unknown.push('' + key);\n                }\n            });\n        }\n        if (checkPositionals) {\n            const demandedCommands = yargs.getDemandedCommands();\n            const maxNonOptDemanded = ((_a = demandedCommands._) === null || _a === void 0 ? void 0 : _a.max) || 0;\n            const expected = currentContext.commands.length + maxNonOptDemanded;\n            if (expected < argv._.length) {\n                argv._.slice(expected).forEach(key => {\n                    key = String(key);\n                    if (!currentContext.commands.includes(key) &&\n                        !unknown.includes(key)) {\n                        unknown.push(key);\n                    }\n                });\n            }\n        }\n        if (unknown.length) {\n            usage.fail(__n('Unknown argument: %s', 'Unknown arguments: %s', unknown.length, unknown.map(s => (s.trim() ? s : `\"${s}\"`)).join(', ')));\n        }\n    };\n    self.unknownCommands = function unknownCommands(argv) {\n        const commandKeys = yargs\n            .getInternalMethods()\n            .getCommandInstance()\n            .getCommands();\n        const unknown = [];\n        const currentContext = yargs.getInternalMethods().getContext();\n        if (currentContext.commands.length > 0 || commandKeys.length > 0) {\n            argv._.slice(currentContext.commands.length).forEach(key => {\n                if (!commandKeys.includes('' + key)) {\n                    unknown.push('' + key);\n                }\n            });\n        }\n        if (unknown.length > 0) {\n            usage.fail(__n('Unknown command: %s', 'Unknown commands: %s', unknown.length, unknown.join(', ')));\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew(key, aliases) {\n        if (!Object.prototype.hasOwnProperty.call(aliases, key)) {\n            return false;\n        }\n        const newAliases = yargs.parsed.newAliases;\n        return [key, ...aliases[key]].some(a => !Object.prototype.hasOwnProperty.call(newAliases, a) || !newAliases[key]);\n    };\n    self.limitedChoices = function limitedChoices(argv) {\n        const options = yargs.getOptions();\n        const invalid = {};\n        if (!Object.keys(options.choices).length)\n            return;\n        Object.keys(argv).forEach(key => {\n            if (specialKeys.indexOf(key) === -1 &&\n                Object.prototype.hasOwnProperty.call(options.choices, key)) {\n                [].concat(argv[key]).forEach(value => {\n                    if (options.choices[key].indexOf(value) === -1 &&\n                        value !== undefined) {\n                        invalid[key] = (invalid[key] || []).concat(value);\n                    }\n                });\n            }\n        });\n        const invalidKeys = Object.keys(invalid);\n        if (!invalidKeys.length)\n            return;\n        let msg = __('Invalid values:');\n        invalidKeys.forEach(key => {\n            msg += `\\n  ${__('Argument: %s, Given: %s, Choices: %s', key, usage.stringifiedValues(invalid[key]), usage.stringifiedValues(options.choices[key]))}`;\n        });\n        usage.fail(msg);\n    };\n    let implied = {};\n    self.implies = function implies(key, value) {\n        argsert('<string|object> [array|number|string]', [key, value], arguments.length);\n        if (typeof key === 'object') {\n            Object.keys(key).forEach(k => {\n                self.implies(k, key[k]);\n            });\n        }\n        else {\n            yargs.global(key);\n            if (!implied[key]) {\n                implied[key] = [];\n            }\n            if (Array.isArray(value)) {\n                value.forEach(i => self.implies(key, i));\n            }\n            else {\n                assertNotStrictEqual(value, undefined, shim);\n                implied[key].push(value);\n            }\n        }\n    };\n    self.getImplied = function getImplied() {\n        return implied;\n    };\n    function keyExists(argv, val) {\n        const num = Number(val);\n        val = isNaN(num) ? val : num;\n        if (typeof val === 'number') {\n            val = argv._.length >= val;\n        }\n        else if (val.match(/^--no-.+/)) {\n            val = val.match(/^--no-(.+)/)[1];\n            val = !Object.prototype.hasOwnProperty.call(argv, val);\n        }\n        else {\n            val = Object.prototype.hasOwnProperty.call(argv, val);\n        }\n        return val;\n    }\n    self.implications = function implications(argv) {\n        const implyFail = [];\n        Object.keys(implied).forEach(key => {\n            const origKey = key;\n            (implied[key] || []).forEach(value => {\n                let key = origKey;\n                const origValue = value;\n                key = keyExists(argv, key);\n                value = keyExists(argv, value);\n                if (key && !value) {\n                    implyFail.push(` ${origKey} -> ${origValue}`);\n                }\n            });\n        });\n        if (implyFail.length) {\n            let msg = `${__('Implications failed:')}\\n`;\n            implyFail.forEach(value => {\n                msg += value;\n            });\n            usage.fail(msg);\n        }\n    };\n    let conflicting = {};\n    self.conflicts = function conflicts(key, value) {\n        argsert('<string|object> [array|string]', [key, value], arguments.length);\n        if (typeof key === 'object') {\n            Object.keys(key).forEach(k => {\n                self.conflicts(k, key[k]);\n            });\n        }\n        else {\n            yargs.global(key);\n            if (!conflicting[key]) {\n                conflicting[key] = [];\n            }\n            if (Array.isArray(value)) {\n                value.forEach(i => self.conflicts(key, i));\n            }\n            else {\n                conflicting[key].push(value);\n            }\n        }\n    };\n    self.getConflicting = () => conflicting;\n    self.conflicting = function conflictingFn(argv) {\n        Object.keys(argv).forEach(key => {\n            if (conflicting[key]) {\n                conflicting[key].forEach(value => {\n                    if (value && argv[key] !== undefined && argv[value] !== undefined) {\n                        usage.fail(__('Arguments %s and %s are mutually exclusive', key, value));\n                    }\n                });\n            }\n        });\n        if (yargs.getInternalMethods().getParserConfiguration()['strip-dashed']) {\n            Object.keys(conflicting).forEach(key => {\n                conflicting[key].forEach(value => {\n                    if (value &&\n                        argv[shim.Parser.camelCase(key)] !== undefined &&\n                        argv[shim.Parser.camelCase(value)] !== undefined) {\n                        usage.fail(__('Arguments %s and %s are mutually exclusive', key, value));\n                    }\n                });\n            });\n        }\n    };\n    self.recommendCommands = function recommendCommands(cmd, potentialCommands) {\n        const threshold = 3;\n        potentialCommands = potentialCommands.sort((a, b) => b.length - a.length);\n        let recommended = null;\n        let bestDistance = Infinity;\n        for (let i = 0, candidate; (candidate = potentialCommands[i]) !== undefined; i++) {\n            const d = distance(cmd, candidate);\n            if (d <= threshold && d < bestDistance) {\n                bestDistance = d;\n                recommended = candidate;\n            }\n        }\n        if (recommended)\n            usage.fail(__('Did you mean %s?', recommended));\n    };\n    self.reset = function reset(localLookup) {\n        implied = objFilter(implied, k => !localLookup[k]);\n        conflicting = objFilter(conflicting, k => !localLookup[k]);\n        return self;\n    };\n    const frozens = [];\n    self.freeze = function freeze() {\n        frozens.push({\n            implied,\n            conflicting,\n        });\n    };\n    self.unfreeze = function unfreeze() {\n        const frozen = frozens.pop();\n        assertNotStrictEqual(frozen, undefined, shim);\n        ({ implied, conflicting } = frozen);\n    };\n    return self;\n}\n", "import { YError } from '../yerror.js';\nlet previouslyVisitedConfigs = [];\nlet shim;\nexport function applyExtends(config, cwd, mergeExtends, _shim) {\n    shim = _shim;\n    let defaultConfig = {};\n    if (Object.prototype.hasOwnProperty.call(config, 'extends')) {\n        if (typeof config.extends !== 'string')\n            return defaultConfig;\n        const isPath = /\\.json|\\..*rc$/.test(config.extends);\n        let pathToDefault = null;\n        if (!isPath) {\n            try {\n                pathToDefault = import.meta.resolve(config.extends);\n            }\n            catch (_err) {\n                return config;\n            }\n        }\n        else {\n            pathToDefault = getPathToDefaultConfig(cwd, config.extends);\n        }\n        checkForCircularExtends(pathToDefault);\n        previouslyVisitedConfigs.push(pathToDefault);\n        defaultConfig = isPath\n            ? JSON.parse(shim.readFileSync(pathToDefault, 'utf8'))\n            : _shim.require(config.extends);\n        delete config.extends;\n        defaultConfig = applyExtends(defaultConfig, shim.path.dirname(pathToDefault), mergeExtends, shim);\n    }\n    previouslyVisitedConfigs = [];\n    return mergeExtends\n        ? mergeDeep(defaultConfig, config)\n        : Object.assign({}, defaultConfig, config);\n}\nfunction checkForCircularExtends(cfgPath) {\n    if (previouslyVisitedConfigs.indexOf(cfgPath) > -1) {\n        throw new YError(`Circular extended configurations: '${cfgPath}'.`);\n    }\n}\nfunction getPathToDefaultConfig(cwd, pathToExtend) {\n    return shim.path.resolve(cwd, pathToExtend);\n}\nfunction mergeDeep(config1, config2) {\n    const target = {};\n    function isObject(obj) {\n        return obj && typeof obj === 'object' && !Array.isArray(obj);\n    }\n    Object.assign(target, config1);\n    for (const key of Object.keys(config2)) {\n        if (isObject(config2[key]) && isObject(target[key])) {\n            target[key] = mergeDeep(config1[key], config2[key]);\n        }\n        else {\n            target[key] = config2[key];\n        }\n    }\n    return target;\n}\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _YargsInstance_command, _YargsInstance_cwd, _YargsInstance_context, _YargsInstance_completion, _YargsInstance_completionCommand, _YargsInstance_defaultShowHiddenOpt, _YargsInstance_exitError, _YargsInstance_detectLocale, _YargsInstance_emittedWarnings, _YargsInstance_exitProcess, _YargsInstance_frozens, _YargsInstance_globalMiddleware, _YargsInstance_groups, _YargsInstance_hasOutput, _YargsInstance_helpOpt, _YargsInstance_isGlobalContext, _YargsInstance_logger, _YargsInstance_output, _YargsInstance_options, _YargsInstance_parentRequire, _YargsInstance_parserConfig, _YargsInstance_parseFn, _YargsInstance_parseContext, _YargsInstance_pkgs, _YargsInstance_preservedGroups, _YargsInstance_processArgs, _YargsInstance_recommendCommands, _YargsInstance_shim, _YargsInstance_strict, _YargsInstance_strictCommands, _YargsInstance_strictOptions, _YargsInstance_usage, _YargsInstance_usageConfig, _YargsInstance_versionOpt, _YargsInstance_validation;\nimport { command as Command, } from './command.js';\nimport { assertNotStrictEqual, assertSingleKey, objectKeys, } from './typings/common-types.js';\nimport { YError } from './yerror.js';\nimport { usage as Usage } from './usage.js';\nimport { argsert } from './argsert.js';\nimport { completion as Completion, } from './completion.js';\nimport { validation as Validation, } from './validation.js';\nimport { objFilter } from './utils/obj-filter.js';\nimport { applyExtends } from './utils/apply-extends.js';\nimport { applyMiddleware, GlobalMiddleware, } from './middleware.js';\nimport { isPromise } from './utils/is-promise.js';\nimport { maybeAsyncResult } from './utils/maybe-async-result.js';\nimport setBlocking from './utils/set-blocking.js';\nexport function YargsFactory(_shim) {\n    return (processArgs = [], cwd = _shim.process.cwd(), parentRequire) => {\n        const yargs = new YargsInstance(processArgs, cwd, parentRequire, _shim);\n        Object.defineProperty(yargs, 'argv', {\n            get: () => {\n                return yargs.parse();\n            },\n            enumerable: true,\n        });\n        yargs.help();\n        yargs.version();\n        return yargs;\n    };\n}\nconst kCopyDoubleDash = Symbol('copyDoubleDash');\nconst kCreateLogger = Symbol('copyDoubleDash');\nconst kDeleteFromParserHintObject = Symbol('deleteFromParserHintObject');\nconst kEmitWarning = Symbol('emitWarning');\nconst kFreeze = Symbol('freeze');\nconst kGetDollarZero = Symbol('getDollarZero');\nconst kGetParserConfiguration = Symbol('getParserConfiguration');\nconst kGetUsageConfiguration = Symbol('getUsageConfiguration');\nconst kGuessLocale = Symbol('guessLocale');\nconst kGuessVersion = Symbol('guessVersion');\nconst kParsePositionalNumbers = Symbol('parsePositionalNumbers');\nconst kPkgUp = Symbol('pkgUp');\nconst kPopulateParserHintArray = Symbol('populateParserHintArray');\nconst kPopulateParserHintSingleValueDictionary = Symbol('populateParserHintSingleValueDictionary');\nconst kPopulateParserHintArrayDictionary = Symbol('populateParserHintArrayDictionary');\nconst kPopulateParserHintDictionary = Symbol('populateParserHintDictionary');\nconst kSanitizeKey = Symbol('sanitizeKey');\nconst kSetKey = Symbol('setKey');\nconst kUnfreeze = Symbol('unfreeze');\nconst kValidateAsync = Symbol('validateAsync');\nconst kGetCommandInstance = Symbol('getCommandInstance');\nconst kGetContext = Symbol('getContext');\nconst kGetHasOutput = Symbol('getHasOutput');\nconst kGetLoggerInstance = Symbol('getLoggerInstance');\nconst kGetParseContext = Symbol('getParseContext');\nconst kGetUsageInstance = Symbol('getUsageInstance');\nconst kGetValidationInstance = Symbol('getValidationInstance');\nconst kHasParseCallback = Symbol('hasParseCallback');\nconst kIsGlobalContext = Symbol('isGlobalContext');\nconst kPostProcess = Symbol('postProcess');\nconst kRebase = Symbol('rebase');\nconst kReset = Symbol('reset');\nconst kRunYargsParserAndExecuteCommands = Symbol('runYargsParserAndExecuteCommands');\nconst kRunValidation = Symbol('runValidation');\nconst kSetHasOutput = Symbol('setHasOutput');\nconst kTrackManuallySetKeys = Symbol('kTrackManuallySetKeys');\nconst DEFAULT_LOCALE = 'en_US';\nexport class YargsInstance {\n    constructor(processArgs = [], cwd, parentRequire, shim) {\n        this.customScriptName = false;\n        this.parsed = false;\n        _YargsInstance_command.set(this, void 0);\n        _YargsInstance_cwd.set(this, void 0);\n        _YargsInstance_context.set(this, { commands: [], fullCommands: [] });\n        _YargsInstance_completion.set(this, null);\n        _YargsInstance_completionCommand.set(this, null);\n        _YargsInstance_defaultShowHiddenOpt.set(this, 'show-hidden');\n        _YargsInstance_exitError.set(this, null);\n        _YargsInstance_detectLocale.set(this, true);\n        _YargsInstance_emittedWarnings.set(this, {});\n        _YargsInstance_exitProcess.set(this, true);\n        _YargsInstance_frozens.set(this, []);\n        _YargsInstance_globalMiddleware.set(this, void 0);\n        _YargsInstance_groups.set(this, {});\n        _YargsInstance_hasOutput.set(this, false);\n        _YargsInstance_helpOpt.set(this, null);\n        _YargsInstance_isGlobalContext.set(this, true);\n        _YargsInstance_logger.set(this, void 0);\n        _YargsInstance_output.set(this, '');\n        _YargsInstance_options.set(this, void 0);\n        _YargsInstance_parentRequire.set(this, void 0);\n        _YargsInstance_parserConfig.set(this, {});\n        _YargsInstance_parseFn.set(this, null);\n        _YargsInstance_parseContext.set(this, null);\n        _YargsInstance_pkgs.set(this, {});\n        _YargsInstance_preservedGroups.set(this, {});\n        _YargsInstance_processArgs.set(this, void 0);\n        _YargsInstance_recommendCommands.set(this, false);\n        _YargsInstance_shim.set(this, void 0);\n        _YargsInstance_strict.set(this, false);\n        _YargsInstance_strictCommands.set(this, false);\n        _YargsInstance_strictOptions.set(this, false);\n        _YargsInstance_usage.set(this, void 0);\n        _YargsInstance_usageConfig.set(this, {});\n        _YargsInstance_versionOpt.set(this, null);\n        _YargsInstance_validation.set(this, void 0);\n        __classPrivateFieldSet(this, _YargsInstance_shim, shim, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_processArgs, processArgs, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_cwd, cwd, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_parentRequire, parentRequire, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_globalMiddleware, new GlobalMiddleware(this), \"f\");\n        this.$0 = this[kGetDollarZero]();\n        this[kReset]();\n        __classPrivateFieldSet(this, _YargsInstance_command, __classPrivateFieldGet(this, _YargsInstance_command, \"f\"), \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_usage, __classPrivateFieldGet(this, _YargsInstance_usage, \"f\"), \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_validation, __classPrivateFieldGet(this, _YargsInstance_validation, \"f\"), \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_options, __classPrivateFieldGet(this, _YargsInstance_options, \"f\"), \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").showHiddenOpt = __classPrivateFieldGet(this, _YargsInstance_defaultShowHiddenOpt, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_logger, this[kCreateLogger](), \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.setLocale(DEFAULT_LOCALE);\n    }\n    addHelpOpt(opt, msg) {\n        const defaultHelpOpt = 'help';\n        argsert('[string|boolean] [string]', [opt, msg], arguments.length);\n        if (__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\")) {\n            this[kDeleteFromParserHintObject](__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\"));\n            __classPrivateFieldSet(this, _YargsInstance_helpOpt, null, \"f\");\n        }\n        if (opt === false && msg === undefined)\n            return this;\n        __classPrivateFieldSet(this, _YargsInstance_helpOpt, typeof opt === 'string' ? opt : defaultHelpOpt, \"f\");\n        this.boolean(__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\"));\n        this.describe(__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\"), msg || __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").deferY18nLookup('Show help'));\n        return this;\n    }\n    help(opt, msg) {\n        return this.addHelpOpt(opt, msg);\n    }\n    addShowHiddenOpt(opt, msg) {\n        argsert('[string|boolean] [string]', [opt, msg], arguments.length);\n        if (opt === false && msg === undefined)\n            return this;\n        const showHiddenOpt = typeof opt === 'string' ? opt : __classPrivateFieldGet(this, _YargsInstance_defaultShowHiddenOpt, \"f\");\n        this.boolean(showHiddenOpt);\n        this.describe(showHiddenOpt, msg || __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").deferY18nLookup('Show hidden options'));\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").showHiddenOpt = showHiddenOpt;\n        return this;\n    }\n    showHidden(opt, msg) {\n        return this.addShowHiddenOpt(opt, msg);\n    }\n    alias(key, value) {\n        argsert('<object|string|array> [string|array]', [key, value], arguments.length);\n        this[kPopulateParserHintArrayDictionary](this.alias.bind(this), 'alias', key, value);\n        return this;\n    }\n    array(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('array', keys);\n        this[kTrackManuallySetKeys](keys);\n        return this;\n    }\n    boolean(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('boolean', keys);\n        this[kTrackManuallySetKeys](keys);\n        return this;\n    }\n    check(f, global) {\n        argsert('<function> [boolean]', [f, global], arguments.length);\n        this.middleware((argv, _yargs) => {\n            return maybeAsyncResult(() => {\n                return f(argv, _yargs.getOptions());\n            }, (result) => {\n                if (!result) {\n                    __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").fail(__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.__('Argument check failed: %s', f.toString()));\n                }\n                else if (typeof result === 'string' || result instanceof Error) {\n                    __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").fail(result.toString(), result);\n                }\n                return argv;\n            }, (err) => {\n                __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").fail(err.message ? err.message : err.toString(), err);\n                return argv;\n            });\n        }, false, global);\n        return this;\n    }\n    choices(key, value) {\n        argsert('<object|string|array> [string|array]', [key, value], arguments.length);\n        this[kPopulateParserHintArrayDictionary](this.choices.bind(this), 'choices', key, value);\n        return this;\n    }\n    coerce(keys, value) {\n        argsert('<object|string|array> [function]', [keys, value], arguments.length);\n        if (Array.isArray(keys)) {\n            if (!value) {\n                throw new YError('coerce callback must be provided');\n            }\n            for (const key of keys) {\n                this.coerce(key, value);\n            }\n            return this;\n        }\n        else if (typeof keys === 'object') {\n            for (const key of Object.keys(keys)) {\n                this.coerce(key, keys[key]);\n            }\n            return this;\n        }\n        if (!value) {\n            throw new YError('coerce callback must be provided');\n        }\n        const coerceKey = keys;\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").key[coerceKey] = true;\n        __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").addCoerceMiddleware((argv, yargs) => {\n            var _a;\n            const coerceKeyAliases = (_a = yargs.getAliases()[coerceKey]) !== null && _a !== void 0 ? _a : [];\n            const argvKeys = [coerceKey, ...coerceKeyAliases].filter(key => Object.prototype.hasOwnProperty.call(argv, key));\n            if (argvKeys.length === 0) {\n                return argv;\n            }\n            return maybeAsyncResult(() => {\n                return value(argv[argvKeys[0]]);\n            }, (result) => {\n                argvKeys.forEach(key => {\n                    argv[key] = result;\n                });\n                return argv;\n            }, (err) => {\n                throw new YError(err.message);\n            });\n        }, coerceKey);\n        return this;\n    }\n    conflicts(key1, key2) {\n        argsert('<string|object> [string|array]', [key1, key2], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").conflicts(key1, key2);\n        return this;\n    }\n    config(key = 'config', msg, parseFn) {\n        argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length);\n        if (typeof key === 'object' && !Array.isArray(key)) {\n            key = applyExtends(key, __classPrivateFieldGet(this, _YargsInstance_cwd, \"f\"), this[kGetParserConfiguration]()['deep-merge-config'] || false, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects = (__classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects || []).concat(key);\n            return this;\n        }\n        if (typeof msg === 'function') {\n            parseFn = msg;\n            msg = undefined;\n        }\n        this.describe(key, msg || __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").deferY18nLookup('Path to JSON config file'));\n        (Array.isArray(key) ? key : [key]).forEach(k => {\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").config[k] = parseFn || true;\n        });\n        return this;\n    }\n    completion(cmd, desc, fn) {\n        argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length);\n        if (typeof desc === 'function') {\n            fn = desc;\n            desc = undefined;\n        }\n        __classPrivateFieldSet(this, _YargsInstance_completionCommand, cmd || __classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\") || 'completion', \"f\");\n        if (!desc && desc !== false) {\n            desc = 'generate completion script';\n        }\n        this.command(__classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\"), desc);\n        if (fn)\n            __classPrivateFieldGet(this, _YargsInstance_completion, \"f\").registerFunction(fn);\n        return this;\n    }\n    command(cmd, description, builder, handler, middlewares, deprecated) {\n        argsert('<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]', [cmd, description, builder, handler, middlewares, deprecated], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_command, \"f\").addHandler(cmd, description, builder, handler, middlewares, deprecated);\n        return this;\n    }\n    commands(cmd, description, builder, handler, middlewares, deprecated) {\n        return this.command(cmd, description, builder, handler, middlewares, deprecated);\n    }\n    commandDir(dir, opts) {\n        argsert('<string> [object]', [dir, opts], arguments.length);\n        const req = __classPrivateFieldGet(this, _YargsInstance_parentRequire, \"f\") || __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").require;\n        __classPrivateFieldGet(this, _YargsInstance_command, \"f\").addDirectory(dir, req, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getCallerFile(), opts);\n        return this;\n    }\n    count(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('count', keys);\n        this[kTrackManuallySetKeys](keys);\n        return this;\n    }\n    default(key, value, defaultDescription) {\n        argsert('<object|string|array> [*] [string]', [key, value, defaultDescription], arguments.length);\n        if (defaultDescription) {\n            assertSingleKey(key, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").defaultDescription[key] = defaultDescription;\n        }\n        if (typeof value === 'function') {\n            assertSingleKey(key, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            if (!__classPrivateFieldGet(this, _YargsInstance_options, \"f\").defaultDescription[key])\n                __classPrivateFieldGet(this, _YargsInstance_options, \"f\").defaultDescription[key] =\n                    __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").functionDescription(value);\n            value = value.call();\n        }\n        this[kPopulateParserHintSingleValueDictionary](this.default.bind(this), 'default', key, value);\n        return this;\n    }\n    defaults(key, value, defaultDescription) {\n        return this.default(key, value, defaultDescription);\n    }\n    demandCommand(min = 1, max, minMsg, maxMsg) {\n        argsert('[number] [number|string] [string|null|undefined] [string|null|undefined]', [min, max, minMsg, maxMsg], arguments.length);\n        if (typeof max !== 'number') {\n            minMsg = max;\n            max = Infinity;\n        }\n        this.global('_', false);\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").demandedCommands._ = {\n            min,\n            max,\n            minMsg,\n            maxMsg,\n        };\n        return this;\n    }\n    demand(keys, max, msg) {\n        if (Array.isArray(max)) {\n            max.forEach(key => {\n                assertNotStrictEqual(msg, true, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n                this.demandOption(key, msg);\n            });\n            max = Infinity;\n        }\n        else if (typeof max !== 'number') {\n            msg = max;\n            max = Infinity;\n        }\n        if (typeof keys === 'number') {\n            assertNotStrictEqual(msg, true, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            this.demandCommand(keys, max, msg, msg);\n        }\n        else if (Array.isArray(keys)) {\n            keys.forEach(key => {\n                assertNotStrictEqual(msg, true, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n                this.demandOption(key, msg);\n            });\n        }\n        else {\n            if (typeof msg === 'string') {\n                this.demandOption(keys, msg);\n            }\n            else if (msg === true || typeof msg === 'undefined') {\n                this.demandOption(keys);\n            }\n        }\n        return this;\n    }\n    demandOption(keys, msg) {\n        argsert('<object|string|array> [string]', [keys, msg], arguments.length);\n        this[kPopulateParserHintSingleValueDictionary](this.demandOption.bind(this), 'demandedOptions', keys, msg);\n        return this;\n    }\n    deprecateOption(option, message) {\n        argsert('<string> [string|boolean]', [option, message], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").deprecatedOptions[option] = message;\n        return this;\n    }\n    describe(keys, description) {\n        argsert('<object|string|array> [string]', [keys, description], arguments.length);\n        this[kSetKey](keys, true);\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").describe(keys, description);\n        return this;\n    }\n    detectLocale(detect) {\n        argsert('<boolean>', [detect], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_detectLocale, detect, \"f\");\n        return this;\n    }\n    env(prefix) {\n        argsert('[string|boolean]', [prefix], arguments.length);\n        if (prefix === false)\n            delete __classPrivateFieldGet(this, _YargsInstance_options, \"f\").envPrefix;\n        else\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").envPrefix = prefix || '';\n        return this;\n    }\n    epilogue(msg) {\n        argsert('<string>', [msg], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").epilog(msg);\n        return this;\n    }\n    epilog(msg) {\n        return this.epilogue(msg);\n    }\n    example(cmd, description) {\n        argsert('<string|array> [string]', [cmd, description], arguments.length);\n        if (Array.isArray(cmd)) {\n            cmd.forEach(exampleParams => this.example(...exampleParams));\n        }\n        else {\n            __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").example(cmd, description);\n        }\n        return this;\n    }\n    exit(code, err) {\n        __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_exitError, err, \"f\");\n        if (__classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"))\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.exit(code);\n    }\n    exitProcess(enabled = true) {\n        argsert('[boolean]', [enabled], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_exitProcess, enabled, \"f\");\n        return this;\n    }\n    fail(f) {\n        argsert('<function|boolean>', [f], arguments.length);\n        if (typeof f === 'boolean' && f !== false) {\n            throw new YError(\"Invalid first argument. Expected function or boolean 'false'\");\n        }\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").failFn(f);\n        return this;\n    }\n    getAliases() {\n        return this.parsed ? this.parsed.aliases : {};\n    }\n    async getCompletion(args, done) {\n        argsert('<array> [function]', [args, done], arguments.length);\n        if (!done) {\n            return new Promise((resolve, reject) => {\n                __classPrivateFieldGet(this, _YargsInstance_completion, \"f\").getCompletion(args, (err, completions) => {\n                    if (err)\n                        reject(err);\n                    else\n                        resolve(completions);\n                });\n            });\n        }\n        else {\n            return __classPrivateFieldGet(this, _YargsInstance_completion, \"f\").getCompletion(args, done);\n        }\n    }\n    getDemandedOptions() {\n        argsert([], 0);\n        return __classPrivateFieldGet(this, _YargsInstance_options, \"f\").demandedOptions;\n    }\n    getDemandedCommands() {\n        argsert([], 0);\n        return __classPrivateFieldGet(this, _YargsInstance_options, \"f\").demandedCommands;\n    }\n    getDeprecatedOptions() {\n        argsert([], 0);\n        return __classPrivateFieldGet(this, _YargsInstance_options, \"f\").deprecatedOptions;\n    }\n    getDetectLocale() {\n        return __classPrivateFieldGet(this, _YargsInstance_detectLocale, \"f\");\n    }\n    getExitProcess() {\n        return __classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\");\n    }\n    getGroups() {\n        return Object.assign({}, __classPrivateFieldGet(this, _YargsInstance_groups, \"f\"), __classPrivateFieldGet(this, _YargsInstance_preservedGroups, \"f\"));\n    }\n    getHelp() {\n        __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n        if (!__classPrivateFieldGet(this, _YargsInstance_usage, \"f\").hasCachedHelpMessage()) {\n            if (!this.parsed) {\n                const parse = this[kRunYargsParserAndExecuteCommands](__classPrivateFieldGet(this, _YargsInstance_processArgs, \"f\"), undefined, undefined, 0, true);\n                if (isPromise(parse)) {\n                    return parse.then(() => {\n                        return __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").help();\n                    });\n                }\n            }\n            const builderResponse = __classPrivateFieldGet(this, _YargsInstance_command, \"f\").runDefaultBuilderOn(this);\n            if (isPromise(builderResponse)) {\n                return builderResponse.then(() => {\n                    return __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").help();\n                });\n            }\n        }\n        return Promise.resolve(__classPrivateFieldGet(this, _YargsInstance_usage, \"f\").help());\n    }\n    getOptions() {\n        return __classPrivateFieldGet(this, _YargsInstance_options, \"f\");\n    }\n    getStrict() {\n        return __classPrivateFieldGet(this, _YargsInstance_strict, \"f\");\n    }\n    getStrictCommands() {\n        return __classPrivateFieldGet(this, _YargsInstance_strictCommands, \"f\");\n    }\n    getStrictOptions() {\n        return __classPrivateFieldGet(this, _YargsInstance_strictOptions, \"f\");\n    }\n    global(globals, global) {\n        argsert('<string|array> [boolean]', [globals, global], arguments.length);\n        globals = [].concat(globals);\n        if (global !== false) {\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").local = __classPrivateFieldGet(this, _YargsInstance_options, \"f\").local.filter(l => globals.indexOf(l) === -1);\n        }\n        else {\n            globals.forEach(g => {\n                if (!__classPrivateFieldGet(this, _YargsInstance_options, \"f\").local.includes(g))\n                    __classPrivateFieldGet(this, _YargsInstance_options, \"f\").local.push(g);\n            });\n        }\n        return this;\n    }\n    group(opts, groupName) {\n        argsert('<string|array> <string>', [opts, groupName], arguments.length);\n        const existing = __classPrivateFieldGet(this, _YargsInstance_preservedGroups, \"f\")[groupName] || __classPrivateFieldGet(this, _YargsInstance_groups, \"f\")[groupName];\n        if (__classPrivateFieldGet(this, _YargsInstance_preservedGroups, \"f\")[groupName]) {\n            delete __classPrivateFieldGet(this, _YargsInstance_preservedGroups, \"f\")[groupName];\n        }\n        const seen = {};\n        __classPrivateFieldGet(this, _YargsInstance_groups, \"f\")[groupName] = (existing || []).concat(opts).filter(key => {\n            if (seen[key])\n                return false;\n            return (seen[key] = true);\n        });\n        return this;\n    }\n    hide(key) {\n        argsert('<string>', [key], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").hiddenOptions.push(key);\n        return this;\n    }\n    implies(key, value) {\n        argsert('<string|object> [number|string|array]', [key, value], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").implies(key, value);\n        return this;\n    }\n    locale(locale) {\n        argsert('[string]', [locale], arguments.length);\n        if (locale === undefined) {\n            this[kGuessLocale]();\n            return __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.getLocale();\n        }\n        __classPrivateFieldSet(this, _YargsInstance_detectLocale, false, \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.setLocale(locale);\n        return this;\n    }\n    middleware(callback, applyBeforeValidation, global) {\n        return __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").addMiddleware(callback, !!applyBeforeValidation, global);\n    }\n    nargs(key, value) {\n        argsert('<string|object|array> [number]', [key, value], arguments.length);\n        this[kPopulateParserHintSingleValueDictionary](this.nargs.bind(this), 'narg', key, value);\n        return this;\n    }\n    normalize(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('normalize', keys);\n        return this;\n    }\n    number(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('number', keys);\n        this[kTrackManuallySetKeys](keys);\n        return this;\n    }\n    option(key, opt) {\n        argsert('<string|object> [object]', [key, opt], arguments.length);\n        if (typeof key === 'object') {\n            Object.keys(key).forEach(k => {\n                this.options(k, key[k]);\n            });\n        }\n        else {\n            if (typeof opt !== 'object') {\n                opt = {};\n            }\n            this[kTrackManuallySetKeys](key);\n            if (__classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\") && (key === 'version' || (opt === null || opt === void 0 ? void 0 : opt.alias) === 'version')) {\n                this[kEmitWarning]([\n                    '\"version\" is a reserved word.',\n                    'Please do one of the following:',\n                    '- Disable version with `yargs.version(false)` if using \"version\" as an option',\n                    '- Use the built-in `yargs.version` method instead (if applicable)',\n                    '- Use a different option key',\n                    'https://yargs.js.org/docs/#api-reference-version',\n                ].join('\\n'), undefined, 'versionWarning');\n            }\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").key[key] = true;\n            if (opt.alias)\n                this.alias(key, opt.alias);\n            const deprecate = opt.deprecate || opt.deprecated;\n            if (deprecate) {\n                this.deprecateOption(key, deprecate);\n            }\n            const demand = opt.demand || opt.required || opt.require;\n            if (demand) {\n                this.demand(key, demand);\n            }\n            if (opt.demandOption) {\n                this.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined);\n            }\n            if (opt.conflicts) {\n                this.conflicts(key, opt.conflicts);\n            }\n            if ('default' in opt) {\n                this.default(key, opt.default);\n            }\n            if (opt.implies !== undefined) {\n                this.implies(key, opt.implies);\n            }\n            if (opt.nargs !== undefined) {\n                this.nargs(key, opt.nargs);\n            }\n            if (opt.config) {\n                this.config(key, opt.configParser);\n            }\n            if (opt.normalize) {\n                this.normalize(key);\n            }\n            if (opt.choices) {\n                this.choices(key, opt.choices);\n            }\n            if (opt.coerce) {\n                this.coerce(key, opt.coerce);\n            }\n            if (opt.group) {\n                this.group(key, opt.group);\n            }\n            if (opt.boolean || opt.type === 'boolean') {\n                this.boolean(key);\n                if (opt.alias)\n                    this.boolean(opt.alias);\n            }\n            if (opt.array || opt.type === 'array') {\n                this.array(key);\n                if (opt.alias)\n                    this.array(opt.alias);\n            }\n            if (opt.number || opt.type === 'number') {\n                this.number(key);\n                if (opt.alias)\n                    this.number(opt.alias);\n            }\n            if (opt.string || opt.type === 'string') {\n                this.string(key);\n                if (opt.alias)\n                    this.string(opt.alias);\n            }\n            if (opt.count || opt.type === 'count') {\n                this.count(key);\n            }\n            if (typeof opt.global === 'boolean') {\n                this.global(key, opt.global);\n            }\n            if (opt.defaultDescription) {\n                __classPrivateFieldGet(this, _YargsInstance_options, \"f\").defaultDescription[key] = opt.defaultDescription;\n            }\n            if (opt.skipValidation) {\n                this.skipValidation(key);\n            }\n            const desc = opt.describe || opt.description || opt.desc;\n            const descriptions = __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").getDescriptions();\n            if (!Object.prototype.hasOwnProperty.call(descriptions, key) ||\n                typeof desc === 'string') {\n                this.describe(key, desc);\n            }\n            if (opt.hidden) {\n                this.hide(key);\n            }\n            if (opt.requiresArg) {\n                this.requiresArg(key);\n            }\n        }\n        return this;\n    }\n    options(key, opt) {\n        return this.option(key, opt);\n    }\n    parse(args, shortCircuit, _parseFn) {\n        argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length);\n        this[kFreeze]();\n        if (typeof args === 'undefined') {\n            args = __classPrivateFieldGet(this, _YargsInstance_processArgs, \"f\");\n        }\n        if (typeof shortCircuit === 'object') {\n            __classPrivateFieldSet(this, _YargsInstance_parseContext, shortCircuit, \"f\");\n            shortCircuit = _parseFn;\n        }\n        if (typeof shortCircuit === 'function') {\n            __classPrivateFieldSet(this, _YargsInstance_parseFn, shortCircuit, \"f\");\n            shortCircuit = false;\n        }\n        if (!shortCircuit)\n            __classPrivateFieldSet(this, _YargsInstance_processArgs, args, \"f\");\n        if (__classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\"))\n            __classPrivateFieldSet(this, _YargsInstance_exitProcess, false, \"f\");\n        const parsed = this[kRunYargsParserAndExecuteCommands](args, !!shortCircuit);\n        const tmpParsed = this.parsed;\n        __classPrivateFieldGet(this, _YargsInstance_completion, \"f\").setParsed(this.parsed);\n        if (isPromise(parsed)) {\n            return parsed\n                .then(argv => {\n                if (__classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\"))\n                    __classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\").call(this, __classPrivateFieldGet(this, _YargsInstance_exitError, \"f\"), argv, __classPrivateFieldGet(this, _YargsInstance_output, \"f\"));\n                return argv;\n            })\n                .catch(err => {\n                if (__classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\")) {\n                    __classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\")(err, this.parsed.argv, __classPrivateFieldGet(this, _YargsInstance_output, \"f\"));\n                }\n                throw err;\n            })\n                .finally(() => {\n                this[kUnfreeze]();\n                this.parsed = tmpParsed;\n            });\n        }\n        else {\n            if (__classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\"))\n                __classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\").call(this, __classPrivateFieldGet(this, _YargsInstance_exitError, \"f\"), parsed, __classPrivateFieldGet(this, _YargsInstance_output, \"f\"));\n            this[kUnfreeze]();\n            this.parsed = tmpParsed;\n        }\n        return parsed;\n    }\n    parseAsync(args, shortCircuit, _parseFn) {\n        const maybePromise = this.parse(args, shortCircuit, _parseFn);\n        return !isPromise(maybePromise)\n            ? Promise.resolve(maybePromise)\n            : maybePromise;\n    }\n    parseSync(args, shortCircuit, _parseFn) {\n        const maybePromise = this.parse(args, shortCircuit, _parseFn);\n        if (isPromise(maybePromise)) {\n            throw new YError('.parseSync() must not be used with asynchronous builders, handlers, or middleware');\n        }\n        return maybePromise;\n    }\n    parserConfiguration(config) {\n        argsert('<object>', [config], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_parserConfig, config, \"f\");\n        return this;\n    }\n    pkgConf(key, rootPath) {\n        argsert('<string> [string]', [key, rootPath], arguments.length);\n        let conf = null;\n        const obj = this[kPkgUp](rootPath || __classPrivateFieldGet(this, _YargsInstance_cwd, \"f\"));\n        if (obj[key] && typeof obj[key] === 'object') {\n            conf = applyExtends(obj[key], rootPath || __classPrivateFieldGet(this, _YargsInstance_cwd, \"f\"), this[kGetParserConfiguration]()['deep-merge-config'] || false, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects = (__classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects || []).concat(conf);\n        }\n        return this;\n    }\n    positional(key, opts) {\n        argsert('<string> <object>', [key, opts], arguments.length);\n        const supportedOpts = [\n            'default',\n            'defaultDescription',\n            'implies',\n            'normalize',\n            'choices',\n            'conflicts',\n            'coerce',\n            'type',\n            'describe',\n            'desc',\n            'description',\n            'alias',\n        ];\n        opts = objFilter(opts, (k, v) => {\n            if (k === 'type' && !['string', 'number', 'boolean'].includes(v))\n                return false;\n            return supportedOpts.includes(k);\n        });\n        const fullCommand = __classPrivateFieldGet(this, _YargsInstance_context, \"f\").fullCommands[__classPrivateFieldGet(this, _YargsInstance_context, \"f\").fullCommands.length - 1];\n        const parseOptions = fullCommand\n            ? __classPrivateFieldGet(this, _YargsInstance_command, \"f\").cmdToParseOptions(fullCommand)\n            : {\n                array: [],\n                alias: {},\n                default: {},\n                demand: {},\n            };\n        objectKeys(parseOptions).forEach(pk => {\n            const parseOption = parseOptions[pk];\n            if (Array.isArray(parseOption)) {\n                if (parseOption.indexOf(key) !== -1)\n                    opts[pk] = true;\n            }\n            else {\n                if (parseOption[key] && !(pk in opts))\n                    opts[pk] = parseOption[key];\n            }\n        });\n        this.group(key, __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").getPositionalGroupName());\n        return this.option(key, opts);\n    }\n    recommendCommands(recommend = true) {\n        argsert('[boolean]', [recommend], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_recommendCommands, recommend, \"f\");\n        return this;\n    }\n    required(keys, max, msg) {\n        return this.demand(keys, max, msg);\n    }\n    require(keys, max, msg) {\n        return this.demand(keys, max, msg);\n    }\n    requiresArg(keys) {\n        argsert('<array|string|object> [number]', [keys], arguments.length);\n        if (typeof keys === 'string' && __classPrivateFieldGet(this, _YargsInstance_options, \"f\").narg[keys]) {\n            return this;\n        }\n        else {\n            this[kPopulateParserHintSingleValueDictionary](this.requiresArg.bind(this), 'narg', keys, NaN);\n        }\n        return this;\n    }\n    showCompletionScript($0, cmd) {\n        argsert('[string] [string]', [$0, cmd], arguments.length);\n        $0 = $0 || this.$0;\n        __classPrivateFieldGet(this, _YargsInstance_logger, \"f\").log(__classPrivateFieldGet(this, _YargsInstance_completion, \"f\").generateCompletionScript($0, cmd || __classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\") || 'completion'));\n        return this;\n    }\n    showHelp(level) {\n        argsert('[string|function]', [level], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n        if (!__classPrivateFieldGet(this, _YargsInstance_usage, \"f\").hasCachedHelpMessage()) {\n            if (!this.parsed) {\n                const parse = this[kRunYargsParserAndExecuteCommands](__classPrivateFieldGet(this, _YargsInstance_processArgs, \"f\"), undefined, undefined, 0, true);\n                if (isPromise(parse)) {\n                    parse.then(() => {\n                        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showHelp(level);\n                    });\n                    return this;\n                }\n            }\n            const builderResponse = __classPrivateFieldGet(this, _YargsInstance_command, \"f\").runDefaultBuilderOn(this);\n            if (isPromise(builderResponse)) {\n                builderResponse.then(() => {\n                    __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showHelp(level);\n                });\n                return this;\n            }\n        }\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showHelp(level);\n        return this;\n    }\n    scriptName(scriptName) {\n        this.customScriptName = true;\n        this.$0 = scriptName;\n        return this;\n    }\n    showHelpOnFail(enabled, message) {\n        argsert('[boolean|string] [string]', [enabled, message], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showHelpOnFail(enabled, message);\n        return this;\n    }\n    showVersion(level) {\n        argsert('[string|function]', [level], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showVersion(level);\n        return this;\n    }\n    skipValidation(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('skipValidation', keys);\n        return this;\n    }\n    strict(enabled) {\n        argsert('[boolean]', [enabled], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_strict, enabled !== false, \"f\");\n        return this;\n    }\n    strictCommands(enabled) {\n        argsert('[boolean]', [enabled], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_strictCommands, enabled !== false, \"f\");\n        return this;\n    }\n    strictOptions(enabled) {\n        argsert('[boolean]', [enabled], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_strictOptions, enabled !== false, \"f\");\n        return this;\n    }\n    string(keys) {\n        argsert('<array|string>', [keys], arguments.length);\n        this[kPopulateParserHintArray]('string', keys);\n        this[kTrackManuallySetKeys](keys);\n        return this;\n    }\n    terminalWidth() {\n        argsert([], 0);\n        return __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.stdColumns;\n    }\n    updateLocale(obj) {\n        return this.updateStrings(obj);\n    }\n    updateStrings(obj) {\n        argsert('<object>', [obj], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_detectLocale, false, \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.updateLocale(obj);\n        return this;\n    }\n    usage(msg, description, builder, handler) {\n        argsert('<string|null|undefined> [string|boolean] [function|object] [function]', [msg, description, builder, handler], arguments.length);\n        if (description !== undefined) {\n            assertNotStrictEqual(msg, null, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            if ((msg || '').match(/^\\$0( |$)/)) {\n                return this.command(msg, description, builder, handler);\n            }\n            else {\n                throw new YError('.usage() description must start with $0 if being used as alias for .command()');\n            }\n        }\n        else {\n            __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").usage(msg);\n            return this;\n        }\n    }\n    usageConfiguration(config) {\n        argsert('<object>', [config], arguments.length);\n        __classPrivateFieldSet(this, _YargsInstance_usageConfig, config, \"f\");\n        return this;\n    }\n    version(opt, msg, ver) {\n        const defaultVersionOpt = 'version';\n        argsert('[boolean|string] [string] [string]', [opt, msg, ver], arguments.length);\n        if (__classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\")) {\n            this[kDeleteFromParserHintObject](__classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\"));\n            __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").version(undefined);\n            __classPrivateFieldSet(this, _YargsInstance_versionOpt, null, \"f\");\n        }\n        if (arguments.length === 0) {\n            ver = this[kGuessVersion]();\n            opt = defaultVersionOpt;\n        }\n        else if (arguments.length === 1) {\n            if (opt === false) {\n                return this;\n            }\n            ver = opt;\n            opt = defaultVersionOpt;\n        }\n        else if (arguments.length === 2) {\n            ver = msg;\n            msg = undefined;\n        }\n        __classPrivateFieldSet(this, _YargsInstance_versionOpt, typeof opt === 'string' ? opt : defaultVersionOpt, \"f\");\n        msg = msg || __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").deferY18nLookup('Show version number');\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").version(ver || undefined);\n        this.boolean(__classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\"));\n        this.describe(__classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\"), msg);\n        return this;\n    }\n    wrap(cols) {\n        argsert('<number|null|undefined>', [cols], arguments.length);\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").wrap(cols);\n        return this;\n    }\n    [(_YargsInstance_command = new WeakMap(), _YargsInstance_cwd = new WeakMap(), _YargsInstance_context = new WeakMap(), _YargsInstance_completion = new WeakMap(), _YargsInstance_completionCommand = new WeakMap(), _YargsInstance_defaultShowHiddenOpt = new WeakMap(), _YargsInstance_exitError = new WeakMap(), _YargsInstance_detectLocale = new WeakMap(), _YargsInstance_emittedWarnings = new WeakMap(), _YargsInstance_exitProcess = new WeakMap(), _YargsInstance_frozens = new WeakMap(), _YargsInstance_globalMiddleware = new WeakMap(), _YargsInstance_groups = new WeakMap(), _YargsInstance_hasOutput = new WeakMap(), _YargsInstance_helpOpt = new WeakMap(), _YargsInstance_isGlobalContext = new WeakMap(), _YargsInstance_logger = new WeakMap(), _YargsInstance_output = new WeakMap(), _YargsInstance_options = new WeakMap(), _YargsInstance_parentRequire = new WeakMap(), _YargsInstance_parserConfig = new WeakMap(), _YargsInstance_parseFn = new WeakMap(), _YargsInstance_parseContext = new WeakMap(), _YargsInstance_pkgs = new WeakMap(), _YargsInstance_preservedGroups = new WeakMap(), _YargsInstance_processArgs = new WeakMap(), _YargsInstance_recommendCommands = new WeakMap(), _YargsInstance_shim = new WeakMap(), _YargsInstance_strict = new WeakMap(), _YargsInstance_strictCommands = new WeakMap(), _YargsInstance_strictOptions = new WeakMap(), _YargsInstance_usage = new WeakMap(), _YargsInstance_usageConfig = new WeakMap(), _YargsInstance_versionOpt = new WeakMap(), _YargsInstance_validation = new WeakMap(), kCopyDoubleDash)](argv) {\n        if (!argv._ || !argv['--'])\n            return argv;\n        argv._.push.apply(argv._, argv['--']);\n        try {\n            delete argv['--'];\n        }\n        catch (_err) { }\n        return argv;\n    }\n    [kCreateLogger]() {\n        return {\n            log: (...args) => {\n                if (!this[kHasParseCallback]())\n                    console.log(...args);\n                __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n                if (__classPrivateFieldGet(this, _YargsInstance_output, \"f\").length)\n                    __classPrivateFieldSet(this, _YargsInstance_output, __classPrivateFieldGet(this, _YargsInstance_output, \"f\") + '\\n', \"f\");\n                __classPrivateFieldSet(this, _YargsInstance_output, __classPrivateFieldGet(this, _YargsInstance_output, \"f\") + args.join(' '), \"f\");\n            },\n            error: (...args) => {\n                if (!this[kHasParseCallback]())\n                    console.error(...args);\n                __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n                if (__classPrivateFieldGet(this, _YargsInstance_output, \"f\").length)\n                    __classPrivateFieldSet(this, _YargsInstance_output, __classPrivateFieldGet(this, _YargsInstance_output, \"f\") + '\\n', \"f\");\n                __classPrivateFieldSet(this, _YargsInstance_output, __classPrivateFieldGet(this, _YargsInstance_output, \"f\") + args.join(' '), \"f\");\n            },\n        };\n    }\n    [kDeleteFromParserHintObject](optionKey) {\n        objectKeys(__classPrivateFieldGet(this, _YargsInstance_options, \"f\")).forEach((hintKey) => {\n            if (((key) => key === 'configObjects')(hintKey))\n                return;\n            const hint = __classPrivateFieldGet(this, _YargsInstance_options, \"f\")[hintKey];\n            if (Array.isArray(hint)) {\n                if (hint.includes(optionKey))\n                    hint.splice(hint.indexOf(optionKey), 1);\n            }\n            else if (typeof hint === 'object') {\n                delete hint[optionKey];\n            }\n        });\n        delete __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").getDescriptions()[optionKey];\n    }\n    [kEmitWarning](warning, type, deduplicationId) {\n        if (!__classPrivateFieldGet(this, _YargsInstance_emittedWarnings, \"f\")[deduplicationId]) {\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.emitWarning(warning, type);\n            __classPrivateFieldGet(this, _YargsInstance_emittedWarnings, \"f\")[deduplicationId] = true;\n        }\n    }\n    [kFreeze]() {\n        __classPrivateFieldGet(this, _YargsInstance_frozens, \"f\").push({\n            options: __classPrivateFieldGet(this, _YargsInstance_options, \"f\"),\n            configObjects: __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects.slice(0),\n            exitProcess: __classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"),\n            groups: __classPrivateFieldGet(this, _YargsInstance_groups, \"f\"),\n            strict: __classPrivateFieldGet(this, _YargsInstance_strict, \"f\"),\n            strictCommands: __classPrivateFieldGet(this, _YargsInstance_strictCommands, \"f\"),\n            strictOptions: __classPrivateFieldGet(this, _YargsInstance_strictOptions, \"f\"),\n            completionCommand: __classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\"),\n            output: __classPrivateFieldGet(this, _YargsInstance_output, \"f\"),\n            exitError: __classPrivateFieldGet(this, _YargsInstance_exitError, \"f\"),\n            hasOutput: __classPrivateFieldGet(this, _YargsInstance_hasOutput, \"f\"),\n            parsed: this.parsed,\n            parseFn: __classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\"),\n            parseContext: __classPrivateFieldGet(this, _YargsInstance_parseContext, \"f\"),\n        });\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").freeze();\n        __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").freeze();\n        __classPrivateFieldGet(this, _YargsInstance_command, \"f\").freeze();\n        __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").freeze();\n    }\n    [kGetDollarZero]() {\n        let $0 = '';\n        let default$0;\n        if (/\\b(node|iojs|electron)(\\.exe)?$/.test(__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.argv()[0])) {\n            default$0 = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.argv().slice(1, 2);\n        }\n        else {\n            default$0 = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.argv().slice(0, 1);\n        }\n        $0 = default$0\n            .map(x => {\n            const b = this[kRebase](__classPrivateFieldGet(this, _YargsInstance_cwd, \"f\"), x);\n            return x.match(/^(\\/|([a-zA-Z]:)?\\\\)/) && b.length < x.length ? b : x;\n        })\n            .join(' ')\n            .trim();\n        if (__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('_') &&\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getProcessArgvBin() === __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('_')) {\n            $0 = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\")\n                .getEnv('_')\n                .replace(`${__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").path.dirname(__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").process.execPath())}/`, '');\n        }\n        return $0;\n    }\n    [kGetParserConfiguration]() {\n        return __classPrivateFieldGet(this, _YargsInstance_parserConfig, \"f\");\n    }\n    [kGetUsageConfiguration]() {\n        return __classPrivateFieldGet(this, _YargsInstance_usageConfig, \"f\");\n    }\n    [kGuessLocale]() {\n        if (!__classPrivateFieldGet(this, _YargsInstance_detectLocale, \"f\"))\n            return;\n        const locale = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('LC_ALL') ||\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('LC_MESSAGES') ||\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('LANG') ||\n            __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").getEnv('LANGUAGE') ||\n            'en_US';\n        this.locale(locale.replace(/[.:].*/, ''));\n    }\n    [kGuessVersion]() {\n        const obj = this[kPkgUp]();\n        return obj.version || 'unknown';\n    }\n    [kParsePositionalNumbers](argv) {\n        const args = argv['--'] ? argv['--'] : argv._;\n        for (let i = 0, arg; (arg = args[i]) !== undefined; i++) {\n            if (__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").Parser.looksLikeNumber(arg) &&\n                Number.isSafeInteger(Math.floor(parseFloat(`${arg}`)))) {\n                args[i] = Number(arg);\n            }\n        }\n        return argv;\n    }\n    [kPkgUp](rootPath) {\n        const npath = rootPath || '*';\n        if (__classPrivateFieldGet(this, _YargsInstance_pkgs, \"f\")[npath])\n            return __classPrivateFieldGet(this, _YargsInstance_pkgs, \"f\")[npath];\n        let obj = {};\n        try {\n            let startDir = rootPath || __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").mainFilename;\n            if (__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").path.extname(startDir)) {\n                startDir = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").path.dirname(startDir);\n            }\n            const pkgJsonPath = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").findUp(startDir, (dir, names) => {\n                if (names.includes('package.json')) {\n                    return 'package.json';\n                }\n                else {\n                    return undefined;\n                }\n            });\n            assertNotStrictEqual(pkgJsonPath, undefined, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n            obj = JSON.parse(__classPrivateFieldGet(this, _YargsInstance_shim, \"f\").readFileSync(pkgJsonPath, 'utf8'));\n        }\n        catch (_noop) { }\n        __classPrivateFieldGet(this, _YargsInstance_pkgs, \"f\")[npath] = obj || {};\n        return __classPrivateFieldGet(this, _YargsInstance_pkgs, \"f\")[npath];\n    }\n    [kPopulateParserHintArray](type, keys) {\n        keys = [].concat(keys);\n        keys.forEach(key => {\n            key = this[kSanitizeKey](key);\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\")[type].push(key);\n        });\n    }\n    [kPopulateParserHintSingleValueDictionary](builder, type, key, value) {\n        this[kPopulateParserHintDictionary](builder, type, key, value, (type, key, value) => {\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\")[type][key] = value;\n        });\n    }\n    [kPopulateParserHintArrayDictionary](builder, type, key, value) {\n        this[kPopulateParserHintDictionary](builder, type, key, value, (type, key, value) => {\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\")[type][key] = (__classPrivateFieldGet(this, _YargsInstance_options, \"f\")[type][key] || []).concat(value);\n        });\n    }\n    [kPopulateParserHintDictionary](builder, type, key, value, singleKeyHandler) {\n        if (Array.isArray(key)) {\n            key.forEach(k => {\n                builder(k, value);\n            });\n        }\n        else if (((key) => typeof key === 'object')(key)) {\n            for (const k of objectKeys(key)) {\n                builder(k, key[k]);\n            }\n        }\n        else {\n            singleKeyHandler(type, this[kSanitizeKey](key), value);\n        }\n    }\n    [kSanitizeKey](key) {\n        if (key === '__proto__')\n            return '___proto___';\n        return key;\n    }\n    [kSetKey](key, set) {\n        this[kPopulateParserHintSingleValueDictionary](this[kSetKey].bind(this), 'key', key, set);\n        return this;\n    }\n    [kUnfreeze]() {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n        const frozen = __classPrivateFieldGet(this, _YargsInstance_frozens, \"f\").pop();\n        assertNotStrictEqual(frozen, undefined, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\"));\n        let configObjects;\n        (_a = this, _b = this, _c = this, _d = this, _e = this, _f = this, _g = this, _h = this, _j = this, _k = this, _l = this, _m = this, {\n            options: ({ set value(_o) { __classPrivateFieldSet(_a, _YargsInstance_options, _o, \"f\"); } }).value,\n            configObjects,\n            exitProcess: ({ set value(_o) { __classPrivateFieldSet(_b, _YargsInstance_exitProcess, _o, \"f\"); } }).value,\n            groups: ({ set value(_o) { __classPrivateFieldSet(_c, _YargsInstance_groups, _o, \"f\"); } }).value,\n            output: ({ set value(_o) { __classPrivateFieldSet(_d, _YargsInstance_output, _o, \"f\"); } }).value,\n            exitError: ({ set value(_o) { __classPrivateFieldSet(_e, _YargsInstance_exitError, _o, \"f\"); } }).value,\n            hasOutput: ({ set value(_o) { __classPrivateFieldSet(_f, _YargsInstance_hasOutput, _o, \"f\"); } }).value,\n            parsed: this.parsed,\n            strict: ({ set value(_o) { __classPrivateFieldSet(_g, _YargsInstance_strict, _o, \"f\"); } }).value,\n            strictCommands: ({ set value(_o) { __classPrivateFieldSet(_h, _YargsInstance_strictCommands, _o, \"f\"); } }).value,\n            strictOptions: ({ set value(_o) { __classPrivateFieldSet(_j, _YargsInstance_strictOptions, _o, \"f\"); } }).value,\n            completionCommand: ({ set value(_o) { __classPrivateFieldSet(_k, _YargsInstance_completionCommand, _o, \"f\"); } }).value,\n            parseFn: ({ set value(_o) { __classPrivateFieldSet(_l, _YargsInstance_parseFn, _o, \"f\"); } }).value,\n            parseContext: ({ set value(_o) { __classPrivateFieldSet(_m, _YargsInstance_parseContext, _o, \"f\"); } }).value,\n        } = frozen);\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects = configObjects;\n        __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").unfreeze();\n        __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").unfreeze();\n        __classPrivateFieldGet(this, _YargsInstance_command, \"f\").unfreeze();\n        __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").unfreeze();\n    }\n    [kValidateAsync](validation, argv) {\n        return maybeAsyncResult(argv, result => {\n            validation(result);\n            return result;\n        });\n    }\n    getInternalMethods() {\n        return {\n            getCommandInstance: this[kGetCommandInstance].bind(this),\n            getContext: this[kGetContext].bind(this),\n            getHasOutput: this[kGetHasOutput].bind(this),\n            getLoggerInstance: this[kGetLoggerInstance].bind(this),\n            getParseContext: this[kGetParseContext].bind(this),\n            getParserConfiguration: this[kGetParserConfiguration].bind(this),\n            getUsageConfiguration: this[kGetUsageConfiguration].bind(this),\n            getUsageInstance: this[kGetUsageInstance].bind(this),\n            getValidationInstance: this[kGetValidationInstance].bind(this),\n            hasParseCallback: this[kHasParseCallback].bind(this),\n            isGlobalContext: this[kIsGlobalContext].bind(this),\n            postProcess: this[kPostProcess].bind(this),\n            reset: this[kReset].bind(this),\n            runValidation: this[kRunValidation].bind(this),\n            runYargsParserAndExecuteCommands: this[kRunYargsParserAndExecuteCommands].bind(this),\n            setHasOutput: this[kSetHasOutput].bind(this),\n        };\n    }\n    [kGetCommandInstance]() {\n        return __classPrivateFieldGet(this, _YargsInstance_command, \"f\");\n    }\n    [kGetContext]() {\n        return __classPrivateFieldGet(this, _YargsInstance_context, \"f\");\n    }\n    [kGetHasOutput]() {\n        return __classPrivateFieldGet(this, _YargsInstance_hasOutput, \"f\");\n    }\n    [kGetLoggerInstance]() {\n        return __classPrivateFieldGet(this, _YargsInstance_logger, \"f\");\n    }\n    [kGetParseContext]() {\n        return __classPrivateFieldGet(this, _YargsInstance_parseContext, \"f\") || {};\n    }\n    [kGetUsageInstance]() {\n        return __classPrivateFieldGet(this, _YargsInstance_usage, \"f\");\n    }\n    [kGetValidationInstance]() {\n        return __classPrivateFieldGet(this, _YargsInstance_validation, \"f\");\n    }\n    [kHasParseCallback]() {\n        return !!__classPrivateFieldGet(this, _YargsInstance_parseFn, \"f\");\n    }\n    [kIsGlobalContext]() {\n        return __classPrivateFieldGet(this, _YargsInstance_isGlobalContext, \"f\");\n    }\n    [kPostProcess](argv, populateDoubleDash, calledFromCommand, runGlobalMiddleware) {\n        if (calledFromCommand)\n            return argv;\n        if (isPromise(argv))\n            return argv;\n        if (!populateDoubleDash) {\n            argv = this[kCopyDoubleDash](argv);\n        }\n        const parsePositionalNumbers = this[kGetParserConfiguration]()['parse-positional-numbers'] ||\n            this[kGetParserConfiguration]()['parse-positional-numbers'] === undefined;\n        if (parsePositionalNumbers) {\n            argv = this[kParsePositionalNumbers](argv);\n        }\n        if (runGlobalMiddleware) {\n            argv = applyMiddleware(argv, this, __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").getMiddleware(), false);\n        }\n        return argv;\n    }\n    [kReset](aliases = {}) {\n        __classPrivateFieldSet(this, _YargsInstance_options, __classPrivateFieldGet(this, _YargsInstance_options, \"f\") || {}, \"f\");\n        const tmpOptions = {};\n        tmpOptions.local = __classPrivateFieldGet(this, _YargsInstance_options, \"f\").local || [];\n        tmpOptions.configObjects = __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configObjects || [];\n        const localLookup = {};\n        tmpOptions.local.forEach(l => {\n            localLookup[l] = true;\n            (aliases[l] || []).forEach(a => {\n                localLookup[a] = true;\n            });\n        });\n        Object.assign(__classPrivateFieldGet(this, _YargsInstance_preservedGroups, \"f\"), Object.keys(__classPrivateFieldGet(this, _YargsInstance_groups, \"f\")).reduce((acc, groupName) => {\n            const keys = __classPrivateFieldGet(this, _YargsInstance_groups, \"f\")[groupName].filter(key => !(key in localLookup));\n            if (keys.length > 0) {\n                acc[groupName] = keys;\n            }\n            return acc;\n        }, {}));\n        __classPrivateFieldSet(this, _YargsInstance_groups, {}, \"f\");\n        const arrayOptions = [\n            'array',\n            'boolean',\n            'string',\n            'skipValidation',\n            'count',\n            'normalize',\n            'number',\n            'hiddenOptions',\n        ];\n        const objectOptions = [\n            'narg',\n            'key',\n            'alias',\n            'default',\n            'defaultDescription',\n            'config',\n            'choices',\n            'demandedOptions',\n            'demandedCommands',\n            'deprecatedOptions',\n        ];\n        arrayOptions.forEach(k => {\n            tmpOptions[k] = (__classPrivateFieldGet(this, _YargsInstance_options, \"f\")[k] || []).filter((k) => !localLookup[k]);\n        });\n        objectOptions.forEach((k) => {\n            tmpOptions[k] = objFilter(__classPrivateFieldGet(this, _YargsInstance_options, \"f\")[k], k => !localLookup[k]);\n        });\n        tmpOptions.envPrefix = __classPrivateFieldGet(this, _YargsInstance_options, \"f\").envPrefix;\n        __classPrivateFieldSet(this, _YargsInstance_options, tmpOptions, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_usage, __classPrivateFieldGet(this, _YargsInstance_usage, \"f\")\n            ? __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").reset(localLookup)\n            : Usage(this, __classPrivateFieldGet(this, _YargsInstance_shim, \"f\")), \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_validation, __classPrivateFieldGet(this, _YargsInstance_validation, \"f\")\n            ? __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").reset(localLookup)\n            : Validation(this, __classPrivateFieldGet(this, _YargsInstance_usage, \"f\"), __classPrivateFieldGet(this, _YargsInstance_shim, \"f\")), \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_command, __classPrivateFieldGet(this, _YargsInstance_command, \"f\")\n            ? __classPrivateFieldGet(this, _YargsInstance_command, \"f\").reset()\n            : Command(__classPrivateFieldGet(this, _YargsInstance_usage, \"f\"), __classPrivateFieldGet(this, _YargsInstance_validation, \"f\"), __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\"), __classPrivateFieldGet(this, _YargsInstance_shim, \"f\")), \"f\");\n        if (!__classPrivateFieldGet(this, _YargsInstance_completion, \"f\"))\n            __classPrivateFieldSet(this, _YargsInstance_completion, Completion(this, __classPrivateFieldGet(this, _YargsInstance_usage, \"f\"), __classPrivateFieldGet(this, _YargsInstance_command, \"f\"), __classPrivateFieldGet(this, _YargsInstance_shim, \"f\")), \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").reset();\n        __classPrivateFieldSet(this, _YargsInstance_completionCommand, null, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_output, '', \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_exitError, null, \"f\");\n        __classPrivateFieldSet(this, _YargsInstance_hasOutput, false, \"f\");\n        this.parsed = false;\n        return this;\n    }\n    [kRebase](base, dir) {\n        return __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").path.relative(base, dir);\n    }\n    [kRunYargsParserAndExecuteCommands](args, shortCircuit, calledFromCommand, commandIndex = 0, helpOnly = false) {\n        var _a, _b, _c, _d;\n        let skipValidation = !!calledFromCommand || helpOnly;\n        args = args || __classPrivateFieldGet(this, _YargsInstance_processArgs, \"f\");\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").__ = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").y18n.__;\n        __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configuration = this[kGetParserConfiguration]();\n        const populateDoubleDash = !!__classPrivateFieldGet(this, _YargsInstance_options, \"f\").configuration['populate--'];\n        const config = Object.assign({}, __classPrivateFieldGet(this, _YargsInstance_options, \"f\").configuration, {\n            'populate--': true,\n        });\n        const parsed = __classPrivateFieldGet(this, _YargsInstance_shim, \"f\").Parser.detailed(args, Object.assign({}, __classPrivateFieldGet(this, _YargsInstance_options, \"f\"), {\n            configuration: { 'parse-positional-numbers': false, ...config },\n        }));\n        const argv = Object.assign(parsed.argv, __classPrivateFieldGet(this, _YargsInstance_parseContext, \"f\"));\n        let argvPromise = undefined;\n        const aliases = parsed.aliases;\n        let helpOptSet = false;\n        let versionOptSet = false;\n        Object.keys(argv).forEach(key => {\n            if (key === __classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\") && argv[key]) {\n                helpOptSet = true;\n            }\n            else if (key === __classPrivateFieldGet(this, _YargsInstance_versionOpt, \"f\") && argv[key]) {\n                versionOptSet = true;\n            }\n        });\n        argv.$0 = this.$0;\n        this.parsed = parsed;\n        if (commandIndex === 0) {\n            __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").clearCachedHelpMessage();\n        }\n        try {\n            this[kGuessLocale]();\n            if (shortCircuit) {\n                return this[kPostProcess](argv, populateDoubleDash, !!calledFromCommand, false);\n            }\n            if (__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\")) {\n                const helpCmds = [__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\")]\n                    .concat(aliases[__classPrivateFieldGet(this, _YargsInstance_helpOpt, \"f\")] || [])\n                    .filter(k => k.length > 1);\n                if (helpCmds.includes('' + argv._[argv._.length - 1])) {\n                    argv._.pop();\n                    helpOptSet = true;\n                }\n            }\n            __classPrivateFieldSet(this, _YargsInstance_isGlobalContext, false, \"f\");\n            const handlerKeys = __classPrivateFieldGet(this, _YargsInstance_command, \"f\").getCommands();\n            const requestCompletions = ((_a = __classPrivateFieldGet(this, _YargsInstance_completion, \"f\")) === null || _a === void 0 ? void 0 : _a.completionKey)\n                ? [\n                    (_b = __classPrivateFieldGet(this, _YargsInstance_completion, \"f\")) === null || _b === void 0 ? void 0 : _b.completionKey,\n                    ...((_d = this.getAliases()[(_c = __classPrivateFieldGet(this, _YargsInstance_completion, \"f\")) === null || _c === void 0 ? void 0 : _c.completionKey]) !== null && _d !== void 0 ? _d : []),\n                ].some((key) => Object.prototype.hasOwnProperty.call(argv, key))\n                : false;\n            const skipRecommendation = helpOptSet || requestCompletions || helpOnly;\n            if (argv._.length) {\n                if (handlerKeys.length) {\n                    let firstUnknownCommand;\n                    for (let i = commandIndex || 0, cmd; argv._[i] !== undefined; i++) {\n                        cmd = String(argv._[i]);\n                        if (handlerKeys.includes(cmd) && cmd !== __classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\")) {\n                            const innerArgv = __classPrivateFieldGet(this, _YargsInstance_command, \"f\").runCommand(cmd, this, parsed, i + 1, helpOnly, helpOptSet || versionOptSet || helpOnly);\n                            return this[kPostProcess](innerArgv, populateDoubleDash, !!calledFromCommand, false);\n                        }\n                        else if (!firstUnknownCommand &&\n                            cmd !== __classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\")) {\n                            firstUnknownCommand = cmd;\n                            break;\n                        }\n                    }\n                    if (!__classPrivateFieldGet(this, _YargsInstance_command, \"f\").hasDefaultCommand() &&\n                        __classPrivateFieldGet(this, _YargsInstance_recommendCommands, \"f\") &&\n                        firstUnknownCommand &&\n                        !skipRecommendation) {\n                        __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").recommendCommands(firstUnknownCommand, handlerKeys);\n                    }\n                }\n                if (__classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\") &&\n                    argv._.includes(__classPrivateFieldGet(this, _YargsInstance_completionCommand, \"f\")) &&\n                    !requestCompletions) {\n                    if (__classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"))\n                        setBlocking(true);\n                    this.showCompletionScript();\n                    this.exit(0);\n                }\n            }\n            if (__classPrivateFieldGet(this, _YargsInstance_command, \"f\").hasDefaultCommand() && !skipRecommendation) {\n                const innerArgv = __classPrivateFieldGet(this, _YargsInstance_command, \"f\").runCommand(null, this, parsed, 0, helpOnly, helpOptSet || versionOptSet || helpOnly);\n                return this[kPostProcess](innerArgv, populateDoubleDash, !!calledFromCommand, false);\n            }\n            if (requestCompletions) {\n                if (__classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"))\n                    setBlocking(true);\n                args = [].concat(args);\n                const completionArgs = args.slice(args.indexOf(`--${__classPrivateFieldGet(this, _YargsInstance_completion, \"f\").completionKey}`) + 1);\n                __classPrivateFieldGet(this, _YargsInstance_completion, \"f\").getCompletion(completionArgs, (err, completions) => {\n                    if (err)\n                        throw new YError(err.message);\n                    (completions || []).forEach(completion => {\n                        __classPrivateFieldGet(this, _YargsInstance_logger, \"f\").log(completion);\n                    });\n                    this.exit(0);\n                });\n                return this[kPostProcess](argv, !populateDoubleDash, !!calledFromCommand, false);\n            }\n            if (!__classPrivateFieldGet(this, _YargsInstance_hasOutput, \"f\")) {\n                if (helpOptSet) {\n                    if (__classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"))\n                        setBlocking(true);\n                    skipValidation = true;\n                    this.showHelp(message => {\n                        __classPrivateFieldGet(this, _YargsInstance_logger, \"f\").log(message);\n                        this.exit(0);\n                    });\n                }\n                else if (versionOptSet) {\n                    if (__classPrivateFieldGet(this, _YargsInstance_exitProcess, \"f\"))\n                        setBlocking(true);\n                    skipValidation = true;\n                    __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").showVersion('log');\n                    this.exit(0);\n                }\n            }\n            if (!skipValidation && __classPrivateFieldGet(this, _YargsInstance_options, \"f\").skipValidation.length > 0) {\n                skipValidation = Object.keys(argv).some(key => __classPrivateFieldGet(this, _YargsInstance_options, \"f\").skipValidation.indexOf(key) >= 0 && argv[key] === true);\n            }\n            if (!skipValidation) {\n                if (parsed.error)\n                    throw new YError(parsed.error.message);\n                if (!requestCompletions) {\n                    const validation = this[kRunValidation](aliases, {}, parsed.error);\n                    if (!calledFromCommand) {\n                        argvPromise = applyMiddleware(argv, this, __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").getMiddleware(), true);\n                    }\n                    argvPromise = this[kValidateAsync](validation, argvPromise !== null && argvPromise !== void 0 ? argvPromise : argv);\n                    if (isPromise(argvPromise) && !calledFromCommand) {\n                        argvPromise = argvPromise.then(() => {\n                            return applyMiddleware(argv, this, __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, \"f\").getMiddleware(), false);\n                        });\n                    }\n                }\n            }\n        }\n        catch (err) {\n            if (err instanceof YError)\n                __classPrivateFieldGet(this, _YargsInstance_usage, \"f\").fail(err.message, err);\n            else\n                throw err;\n        }\n        return this[kPostProcess](argvPromise !== null && argvPromise !== void 0 ? argvPromise : argv, populateDoubleDash, !!calledFromCommand, true);\n    }\n    [kRunValidation](aliases, positionalMap, parseErrors, isDefaultCommand) {\n        const demandedOptions = { ...this.getDemandedOptions() };\n        return (argv) => {\n            if (parseErrors)\n                throw new YError(parseErrors.message);\n            __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").nonOptionCount(argv);\n            __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").requiredArguments(argv, demandedOptions);\n            let failedStrictCommands = false;\n            if (__classPrivateFieldGet(this, _YargsInstance_strictCommands, \"f\")) {\n                failedStrictCommands = __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").unknownCommands(argv);\n            }\n            if (__classPrivateFieldGet(this, _YargsInstance_strict, \"f\") && !failedStrictCommands) {\n                __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").unknownArguments(argv, aliases, positionalMap, !!isDefaultCommand);\n            }\n            else if (__classPrivateFieldGet(this, _YargsInstance_strictOptions, \"f\")) {\n                __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").unknownArguments(argv, aliases, {}, false, false);\n            }\n            __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").limitedChoices(argv);\n            __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").implications(argv);\n            __classPrivateFieldGet(this, _YargsInstance_validation, \"f\").conflicting(argv);\n        };\n    }\n    [kSetHasOutput]() {\n        __classPrivateFieldSet(this, _YargsInstance_hasOutput, true, \"f\");\n    }\n    [kTrackManuallySetKeys](keys) {\n        if (typeof keys === 'string') {\n            __classPrivateFieldGet(this, _YargsInstance_options, \"f\").key[keys] = true;\n        }\n        else {\n            for (const k of keys) {\n                __classPrivateFieldGet(this, _YargsInstance_options, \"f\").key[k] = true;\n            }\n        }\n    }\n}\nexport function isYargsInstance(y) {\n    return !!y && typeof y.getInternalMethods === 'function';\n}\n", "'use strict';\n\n// Bootstraps yargs for ESM:\nimport esmPlatformShim from './lib/platform-shims/esm.mjs';\nimport {YargsFactory} from './build/lib/yargs-factory.js';\n\nconst Yargs = YargsFactory(esmPlatformShim);\nexport default Yargs;\n\nexport {Yargs as 'module.exports'};\n", "export class NestedError extends Error {\n  readonly causes: Array<Error>\n\n  constructor(message: string, ...causes: Array<Error | Error[]>) {\n    super(message)\n    this.name = \"NestedError\"\n    this.causes = causes.flat()\n  }\n}\n\nexport namespace NestedError {\n  export function create(\n    message: string,\n    ...causes: Array<Error | Error[]>\n  ): NestedError {\n    return new NestedError(message, ...causes)\n  }\n\n  export function throwError(\n    message: string,\n    ...causes: Array<Error | Error[]>\n  ): never {\n    throw create(message, ...causes)\n  }\n}\n\nexport default NestedError\n", "import _isNil from 'lodash/isNil.js'\nimport _isObject from 'lodash/isObject.js'\nimport _isString from 'lodash/isString.js'\nimport _isNumber from 'lodash/isNumber.js'\nimport _isFunction from 'lodash/isFunction.js'\nimport { applyTypeGuardExtras } from \"./applyTypeGuardExtras.js\";\n\n\nexport type UndefinedOrNull = undefined|null\n\n\n\nexport function isNil(o:any):o is UndefinedOrNull {\n\treturn _isNil(o)\n}\n\n/**\n * O is a valid object\n *\n * @param o\n */\nexport function isDefined<T>(o:any):o is Exclude<T, UndefinedOrNull>\nexport function isDefined(o:any):o is Exclude<any,UndefinedOrNull>\nexport function isDefined(o:any) {\n\treturn !isNil(o)\n}\n\nexport function isObject(o:any):o is Object {\n\treturn !isNil(o) && _isObject(o)\n}\n\nexport function isPromise(o:any):o is Promise<any> {\n\treturn !isNil(o) && isObject(o) && (o instanceof Promise || isFunction(o.then))\n}\n\n\nexport function isObjectType<T>(o:any,type:{new():T}):o is T {\n\treturn !isNil(o) && (o instanceof type || o.$$clazz === type.name)\n}\n\nexport function isString(o:any):o is string {\n\treturn !isNil(o) && _isString(o)\n}\n\nexport function isNumber(o:any):o is number {\n\treturn !isNil(o) && _isNumber(o) && !isNaN(o)\n}\n\nexport const isFunction = applyTypeGuardExtras<Function>(function isFunction(o:any):o is Function {\n\treturn !isNil(o) && _isFunction(o)\n})\n\nexport function isSymbol(o:any):o is Symbol {\n\treturn !isNil(o) && typeof o === 'symbol'\n}\n\nexport function isBoolean(o: any): o is boolean {\n\treturn typeof o === \"boolean\"\n}\n\nexport function isDate(o: any): o is Date {\n\treturn o instanceof Date\n}\n\nexport type Primitive = boolean | string | number\n\nexport type PrimitiveProducer<P extends Primitive = Primitive> = (...args: any[]) => P\n\nexport const PrimitiveProducers = Array<PrimitiveProducer>(String, Number, Boolean)\n\nexport function isPrimitiveProducer<P extends Primitive = Primitive>(o:any): o is PrimitiveProducer<P> {\n\treturn PrimitiveProducers.includes(o)\n}\n\nexport function isPrimitive(o:any): o is Primitive {\n\treturn isBoolean(o) || isString(o) || isNumber(o)\n}", "import type { TypeGuard, TypeGuardExtras } from \"./types.js\"\n\n\nexport function applyTypeGuardExtras<T>(fn:TypeGuard<T>):TypeGuardExtras<T> {\n  (\n    fn as TypeGuardExtras<T>\n  ).lift = (o:any) => () => fn(o)\n  return fn as TypeGuardExtras<T>\n}", "import { isFunction, isString } from \"./primitive.js\"\n\nexport interface AssertOptions {\n  logErrorsToConsole: boolean\n}\n\nexport const DefaultAssertOptions:AssertOptions = {\n  logErrorsToConsole: false\n}\n\nlet assertOptions:AssertOptions = {...DefaultAssertOptions}\n\nexport function getAssertOptions() {\n  return {...assertOptions}\n}\n\nexport function setGlobalAssertOptions(options: AssertOptions) {\n  assertOptions = {...assertOptions, ...options}\n}\n\nexport class AssertError extends Error {\n  \n  \n  \n  constructor(message: string,  public readonly cause?: Error) {\n    super(message)\n  }\n}\n\n\nconst assertLift:AssertLift = <T>(test: (value:T) => boolean, messageProvider: string | ((value: T) => string)) => {\n  return (nextValue: T) => {\n    const ok = test(nextValue)\n    if (!ok) {\n      const message = isFunction(messageProvider) ? messageProvider(nextValue) : messageProvider ?? \"no message\"\n      throw new AssertError(message)\n    }\n  }\n}\n\nexport type AssertLift = <T>(test: (value:T) => boolean, message: string | ((value: T) => string)) =>\n  (nextValue: T) => void | never\n\nexport interface Assert {\n  (\n    test: (() => boolean) | boolean,\n    msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,\n    overrideOptions?: Partial<AssertOptions>\n  ): void | never\n  \n  lift: AssertLift\n}\n\n\nexport const assert: Assert = Object.assign((\n  test: (() => boolean) | boolean,\n  msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,\n  overrideOptions: Partial<AssertOptions> = {}\n): void | never => {\n  const options = {...assertOptions, ...overrideOptions}\n  let result: boolean = false\n  let error: Error = undefined\n  \n  try {\n    result = isFunction(test) ? test() : test\n  } catch (err) {\n    error = err\n    if (options.logErrorsToConsole) {\n      console.error(`Assert failed: \"${test}\"`, err)\n    }\n  }\n  \n  if (!result || !!error) {\n    const errOut = !msg ? (error?.message ?? \"unknown\") :\n      isFunction(msg) ? msg(error) :\n        msg\n    throw isString(errOut) ? new AssertError(errOut, error) : errOut\n  }\n}, {\n  lift: assertLift\n})\n\n\n", "import { isNil, isPromise } from \"./primitive.js\"\nimport type { ErrorHandler } from \"./types.js\"\n\nexport type GuardErrorHandler = (err:Error) => void\n\nlet globalErrorHandler:GuardErrorHandler | null\n\nexport function setGuardErrorHandler(errorHandler:GuardErrorHandler | null = null) {\n\tglobalErrorHandler = errorHandler\n}\n\nexport type ReturnTypeOrAny<Fn extends () => any> = (ReturnType<Fn> extends never ? unknown : ReturnType<Fn>)\n\n\n/**\n * Get a value in a guarded fashion\n * ensuring no exception\n *\n * @param fn\n * @param defaultValue\n * @returns {any}\n * @param errorHandler\n */\nexport function getValue<Fn extends () => any, T extends ReturnType<Fn> >(\n\tfn:Fn,\n\tdefaultValue: T = undefined,\n\terrorHandler: ErrorHandler = globalErrorHandler\n):T extends Promise<infer T2> ? Promise<T2> : T {\n\t\n\tlet result = null\n\n\ttry {\n\t\tresult = fn()\n\t\tif (isPromise(result))\n\t\t\treturn result\n\t\t\t\t.catch(err => {\n\t\t\t\t\tif (errorHandler)\n\t\t\t\t\t\terrorHandler(err)\n\n\t\t\t\t\treturn defaultValue\n\t\t\t\t})\n\t\t\t\t.then(value => isNil(value) ? defaultValue : value) as any\n\t} catch (err) {\n\t\tif (errorHandler)\n\t\t\terrorHandler(err)\n\t}\n\n\treturn isNil(result) ?\n\t\t(defaultValue as any) : result\n}\n\n\nexport type GuardFn = <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler?: GuardErrorHandler | null) => (void | Promise<void>)\nexport type GuardTool = GuardFn & {\n\tlift: <T>(fn:() => T, localErrorHandler?: GuardErrorHandler | null) => ((fn:() => T, localErrorHandler?: GuardErrorHandler | null) => (void | Promise<void>))\n}\n\n\n\n/**\n * Execute a function guarded from exception\n *\n * @param fn\n * @param localErrorHandler\n * @returns {(fn:()=>any)=>(fn:()=>any)=>any}\n */\nconst guardFn:GuardFn = <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler: ((err: Error) => void) | null = null):void | Promise<void> => {\n\tconst value = getValue<Fn,T>(fn, undefined, localErrorHandler)\n\tif (isPromise(value))\n\t\treturn value.then(() => undefined as void)\n\t\n}\n\nexport const guard: GuardTool = Object.assign(guardFn, {\n\tlift: <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler?: GuardErrorHandler | null) =>\n\t\t(fn:Fn, localErrorHandler?: GuardErrorHandler | null): (void | Promise<void>) =>\n\t\t\tguardFn<Fn,T>(fn,localErrorHandler)\n})\n", "import { isDefined, isPromise } from \"../guards/index.js\"\n\n/**\n * Represents the current state of a Deferred promise.\n */\nexport enum DeferredStatus {\n  PENDING = \"PENDING\",\n  FULFILLED = \"FULFILLED\",\n  REJECTED = \"REJECTED\",\n  CANCELED = \"CANCELED\"\n}\n\n/**\n * Internal deferred state\n */\ninterface DeferredState<T> {\n  resolve: (result?: T) => void\n  reject: (err: any) => void\n  isSettled: boolean\n  isCancelled: boolean\n  isRejected: boolean\n  isFulfilled: boolean\n  result: T | null\n  err: Error | null\n}\n\n/**\n * A deferred promise that can be resolved or rejected\n * externally, ideal for functions like a promise timeout\n */\nexport class Deferred<T> {\n  /**\n   * Creates a deferred promise that resolves after the specified delay.\n   * @param millis - The number of milliseconds to wait before resolving\n   * @returns A promise that resolves after the delay\n   */\n  static async delay(millis: number) {\n    const deferred = new Deferred<void>()\n    setTimeout(() => deferred.resolve(), millis)\n    await deferred.promise\n  }\n\n  /**\n   * Creates a deferred promise that is immediately resolved with the given value.\n   * @param value - The value to resolve the deferred promise with\n   * @returns A resolved Deferred instance\n   */\n  static resolve<T>(value?: T): Deferred<T> {\n    const deferred = new Deferred<T>()\n    deferred.resolve(value)\n    return deferred\n  }\n\n  /**\n   * Creates a deferred promise and passes it to a callback function for external control.\n   * @param callback - A function that receives the deferred instance and can resolve or reject it\n   * @returns The created Deferred instance\n   */\n  static useCallback<T>(\n    callback: (deferred: Deferred<T>) => unknown\n  ): Deferred<T> {\n    const deferred = new Deferred<T>()\n    callback(deferred)\n    return deferred\n  }\n\n  private readonly state: DeferredState<T>\n\n  /**\n   * The underlying promise that will be resolved or rejected.\n   */\n  readonly promise: Promise<T>\n\n  /**\n   * Creates a new Deferred instance, optionally wrapping an existing promise.\n   * @param promise - An optional existing promise to wrap\n   * @throws Error if the provided promise is not a valid promise\n   */\n  constructor(promise?: Promise<T> | undefined) {\n    this.state = {\n      resolve: null,\n      reject: null,\n      isSettled: false,\n      isCancelled: false,\n      isRejected: false,\n      isFulfilled: false,\n      result: null,\n      err: null\n    }\n\n    this.promise = new Promise<T>((resolve, reject) => {\n      Object.assign(this.state, {\n        resolve,\n        reject\n      })\n    })\n\n    if (isDefined(promise)) {\n      if (promise instanceof Promise || isPromise(promise)) {\n        promise.then(this.state.resolve).catch(this.state.reject)\n      } else {\n        throw Error(\n          `An existing promise was provided to Deferred constructor, but it wasn't a valid promise`\n        )\n      }\n    }\n  }\n\n  /**\n   * Checks if the deferred promise has been fulfilled.\n   * @returns True if the promise has been fulfilled, false otherwise\n   */\n  isFulfilled(): boolean {\n    return this.state.isFulfilled\n  }\n\n  /**\n   * Checks if the deferred promise has been rejected.\n   * @returns True if the promise has been rejected, false otherwise\n   */\n  isRejected(): boolean {\n    return this.state.isRejected\n  }\n\n  /**\n   * Checks if the deferred promise has been settled (either fulfilled or rejected).\n   * @returns True if the promise has been settled, false otherwise\n   */\n  isSettled(): boolean {\n    return this.state.isSettled\n  }\n\n  /**\n   * Checks if the deferred promise has been cancelled.\n   * @returns True if the promise has been cancelled, false otherwise\n   */\n  isCancelled(): boolean {\n    return this.state.isCancelled\n  }\n\n  /**\n   * Gets the current status of the deferred promise.\n   * @returns The current DeferredStatus\n   */\n  status(): DeferredStatus {\n    return this.isCancelled()\n      ? DeferredStatus.CANCELED\n      : this.isSettled()\n        ? this.isFulfilled()\n          ? DeferredStatus.FULFILLED\n          : DeferredStatus.REJECTED\n        : DeferredStatus.PENDING\n  }\n\n  /**\n   * Cancels the deferred promise, preventing it from being resolved or rejected.\n   */\n  cancel(): void {\n    this.state.isSettled = true\n    this.state.isCancelled = true\n  }\n\n  /**\n   * Resolves the deferred promise with the given result only if it hasn't been settled yet.\n   * @param result - The value to resolve the promise with\n   */\n  resolveIfUnsettled(result?: T): void {\n    if (!this.isSettled()) this.resolve(result)\n  }\n\n  /**\n   * Resolves the deferred promise with the given result.\n   * @param result - The value to resolve the promise with\n   */\n  resolve(result?: T): void {\n    if (!this.state.isSettled && !this.state.isCancelled) {\n      Object.assign(this.state, {\n        result: result,\n        isSettled: true,\n        isFulfilled: true\n      })\n      this.state.resolve(result)\n    }\n  }\n\n  /**\n   * Rejects the deferred promise with the given error only if it hasn't been settled yet.\n   * @param err - The error to reject the promise with\n   */\n  rejectIfUnsettled(err: any): void {\n    if (!this.isSettled()) this.reject(err)\n  }\n\n  /**\n   * Rejects the deferred promise with the given error.\n   * @param err - The error to reject the promise with\n   */\n  reject(err: any): void {\n    if (!this.state.isSettled && !this.state.isCancelled) {\n      Object.assign(this.state, {\n        isSettled: true,\n        isRejected: true,\n        err\n      })\n\n      this.state.reject(err)\n    }\n  }\n\n  /**\n   * Gets the error that caused the promise to be rejected.\n   * @throws Error if the promise is not settled\n   */\n  get error() {\n    return this.getError()\n  }\n\n  /**\n   * Gets the result value of the fulfilled promise.\n   * @throws Error if the promise is not settled\n   */\n  get value() {\n    return this.getResult()\n  }\n\n  /**\n   * Gets the error that caused the promise to be rejected.\n   * @returns The error, or undefined if the promise was not rejected\n   * @throws Error if the promise is not settled\n   */\n  getError(): Error | undefined {\n    if (!this.isSettled())\n      throw Error(\"Deferred promise is not settled, result is not available\")\n    return this.state.err\n  }\n\n  getResult(): T {\n    if (!this.isSettled())\n      throw Error(\"Deferred promise is not settled, result is not available\")\n    return this.state.result\n  }\n}\n\nexport default Deferred\n", "export enum Level {\n  trace = \"trace\",\n  debug = \"debug\",\n  info = \"info\",\n  warn = \"warn\",\n  error = \"error\",\n  fatal = \"fatal\"\n}\n\nexport type LevelName = `${Level}`\nexport type LevelKind = LevelName | Level\n\nexport const LevelNames: Array<LevelName> = Object.values(Level)\nexport const LevelThresholds = Object.fromEntries(\n  LevelNames.map((level, i) => [level, i])\n) as Record<LevelKind, number>\nexport type LevelEnableFnName = `is${Capitalize<LevelName>}Enabled`\n", "import { WithEquality } from \"./Comparison.js\"\n\nimport { ToString } from \"./ToString.js\"\n\n/**\n * @hidden\n */\n// @ts-ignore -- see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/30241\nexport const inspect: unique symbol = Symbol(\"inspect\")\n//: require(\"util\").inspect.custom;\n\nexport interface Value extends ToString {\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: any&WithEquality /*TODO*/): boolean; // I experimented with 'this' for the other type but had issues with interfaces\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number;\n\n    \n\n    /**\n     * Used by the node REPL to display values.\n     * Most of the time should be the same as toString()\n     */\n    [inspect](): string;\n}\n\n\n", "import { Option } from \"./Option.js\"\n\n/**\n * Sorting function for type T: function\n * to convert this type to a type which is natively\n * sortable in javascript, that is string, number or boolean.\n * `((v:T)=>number) | ((v:T)=>string) | ((v:T)=>boolean`\n */\nexport type ToOrderable<T> = ((v:T)=>number) | ((v:T)=>string) | ((v:T)=>boolean);\n\n/**\n * List of types which provide equality semantics:\n * some builtin JS types, for which === provides\n * proper semantics, and then types providing HasEquals.\n * The reason I use all over the place T&WithEquality\n * instead of saying <T extends WithEquality> earlier\n * in the declaration is: https://stackoverflow.com/a/45903143/516188\n */\nexport type WithEquality\n    = string\n    | number\n    | boolean\n    | null\n    | HasEquals;\n\n/**\n * A type with semantic equality relationships\n */\nexport type HasEquals = {equals(other: any): boolean; hashCode(): number;};\n\n/**\n * Type guard for HasEquals: find out for a type with\n * semantic equality, whether you should call .equals\n * or ===\n */\nexport function hasEquals(v: WithEquality): v is HasEquals {\n    // there is a reason why we check only for equals, not for hashCode.\n    // we want to decide which codepath to take: === or equals/hashcode.\n    // if there is a equals function then we don't want ===, regardless of\n    // whether there is a hashCode method or not. If there is a equals\n    // and not hashCode, we want to go on the equals/hashCode codepath,\n    // which will blow a little later at runtime if the hashCode is missing.\n    return ((<HasEquals>v).equals !== undefined);\n}\n\n/**\n * Helper function for your objects so you can compute\n * a hashcode. You can pass to this function all the fields\n * of your object that should be taken into account for the\n * hash, and the function will return a reasonable hash code.\n *\n * @param fields the fields of your object to take\n *        into account for the hashcode\n */\nexport function fieldsHashCode(...fields: any[]): number {\n    // https://stackoverflow.com/a/113600/516188\n    // https://stackoverflow.com/a/18066516/516188\n    let result = 1;\n    for (const value of fields) {\n        result = 37*result + getHashCode(value);\n    }\n    return result;\n}\n\n/**\n * Helper function to compute a reasonable hashcode for strings.\n */\nexport function stringHashCode(str: string): number {\n    // https://stackoverflow.com/a/7616484/516188\n    var hash = 0, i, chr;\n    if (str.length === 0) return hash;\n    for (i = 0; i < str.length; i++) {\n        chr   = str.charCodeAt(i);\n        hash  = ((hash << 5) - hash) + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n    return hash;\n}\n\n/**\n * Equality function which tries semantic equality (using .equals())\n * if possible, degrades to === if not available, and is also null-safe.\n */\nexport function areEqual(obj: any|null, obj2: any|null): boolean {\n    if (obj === null != obj2 === null) {\n        return false;\n    }\n    if (obj === null || obj2 === null) {\n        return true;\n    }\n    if (hasEquals(obj)) {\n        return obj.equals(obj2);\n    }\n    return obj === obj2;\n}\n\n/**\n * Hashing function which tries to call hashCode()\n * and uses the object itself for numbers, then degrades\n * for stringHashCode of the string representation if\n * not available.\n */\nexport function getHashCode(obj: any|null): number {\n    if (!obj) {\n        return 0;\n    }\n    \n    // NOTE: this is a check JUST in case the string proto was changed\n    if (typeof obj !== \"string\" && hasEquals(obj)) {\n        return obj.hashCode();\n    }\n    \n    if (typeof obj === 'number') {\n        // this is the hashcode implementation for numbers from immutablejs\n        if (obj !== obj || obj === Infinity) {\n            return 0;\n        }\n        let h = obj | 0;\n        if (h !== obj) {\n            h ^= obj * 0xffffffff;\n        }\n        while (obj > 0xffffffff) {\n            obj /= 0xffffffff;\n            h ^= obj;\n        }\n        return smi(h);\n    }\n    const val = obj+\"\";\n    return val.length > STRING_HASH_CACHE_MIN_STRLEN ?\n        cachedHashString(val) :\n        stringHashCode(val);\n}\n\nfunction cachedHashString(string: string) {\n    let hashed = stringHashCache[string];\n    if (hashed === undefined) {\n        hashed = stringHashCode(string);\n        if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n            STRING_HASH_CACHE_SIZE = 0;\n            stringHashCache = {};\n        }\n        STRING_HASH_CACHE_SIZE++;\n        stringHashCache[string] = hashed;\n    }\n    return hashed;\n}\n\n// v8 has an optimization for storing 31-bit signed numbers.\n// Values which have either 00 or 11 as the high order bits qualify.\n// This function drops the highest order bit in a signed number, maintaining\n// the sign bit. (taken from immutablejs)\nfunction smi(i32: number): number {\n    return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff);\n}\n\nconst STRING_HASH_CACHE_MIN_STRLEN = 16;\nconst STRING_HASH_CACHE_MAX_SIZE = 255;\nlet STRING_HASH_CACHE_SIZE = 0;\nlet stringHashCache: {[key:string]:number} = {};\n\n/**\n * @hidden\n */\nexport function hasTrueEquality(val: any): Option<boolean> {\n    if (!val) {\n        return Option.none<boolean>();\n    }\n    if (val.equals) {\n        return Option.of(true);\n    }\n    switch (val.constructor) {\n    case String:\n    case Number:\n    case Boolean:\n        return Option.of(true);\n    }\n    return Option.of(false);\n}\n\n/**\n * Enumeration used to express ordering relationships.\n * it's a const enum, is replaced by integers in the source.\n */\nexport const enum Ordering {\n    /**\n     * Lower Than\n     */\n    LT=-1,\n    /**\n     * EQuals\n     */\n    EQ=0,\n    /**\n     * Greater Than\n     */\n    GT=1\n};\n\n/**\n * Typescript doesn't infer typeguards for lambdas; it only sees\n * predicates. This type allows you to cast a predicate to a type\n * guard in a handy manner.\n *\n * It comes in handy for discriminated unions with a 'kind' discriminator,\n * for instance:\n *\n * .`filter(<TypeGuard<InBoard|OutBoard,InBoard>>(p => p.kind === \"in_board\"))`\n *\n * Also see [[typeGuard]], [[instanceOf]] and [[typeOf]].\n */\nexport type TypeGuard<T,U extends T> = (x: T) => x is U;\n\n/**\n * Typescript doesn't infer typeguards for lambdas; it only sees\n * predicates. This type allows you to cast a predicate to a type\n * guard in a handy manner.\n *\n * It comes in handy for discriminated unions with a 'kind' discriminator,\n * for instance:\n *\n * `.filter(typeGuard(p => p.kind === \"in_board\", {} as InBoard))`\n *\n * Normally you'd have to give both type parameters, but you can use\n * the type witness parameter as shown in that example to skip\n * the first type parameter.\n *\n * Also see [[typeGuard]], [[instanceOf]] and [[typeOf]].\n */\nexport function typeGuard<T,U extends T>(predicate:(x:T)=>boolean,\n                                         typeWitness?: U): TypeGuard<T,U> {\n    return <TypeGuard<T,U>>predicate;\n}\n\n/**\n * Curried function returning a type guard telling us if a value\n * is of a specific instance.\n * Can be used when filtering to filter for the type and at the\n * same time change the type of the generics on the container.\n *\n *     Vector.of<any>(\"bad\", new Date('04 Dec 1995 00:12:00 GMT')).filter(instanceOf(Date))\n *     => Vector.of<Date>(new Date('04 Dec 1995 00:12:00 GMT'))\n *\n *     Option.of<any>(\"test\").filter(instanceOf(Date))\n *     => Option.none<Date>()\n *\n *     Option.of<any>(new Date('04 Dec 1995 00:12:00 GMT')).filter(instanceOf(Date))\n *     => Option.of<Date>(new Date('04 Dec 1995 00:12:00 GMT'))\n *\n * Also see [[typeGuard]] and [[typeOf]].\n */\nexport function instanceOf<T>(ctor: new(...args: any[]) => T): TypeGuard<any,T> {\n    // https://github.com/Microsoft/TypeScript/issues/5101#issuecomment-145693151\n    return <TypeGuard<any,T>>(x => x instanceof ctor);\n}\n\n/**\n * Curried function returning a type guard telling us if a value\n * is of a specific type.\n * Can be used when filtering to filter for the type and at the\n * same time change the type of the generics on the container.\n *\n *     Vector.of<any>(1,\"a\",2,3,\"b\").filter(typeOf(\"number\"))\n *     => Vector.of<number>(1,2,3)\n *\n *     Option.of<any>(1).filter(typeOf(\"string\"))\n *     => Option.none<string>()\n *\n *     Option.of<any>(\"str\").filter(typeOf(\"string\"))\n *     => Option.of<string>(\"str\")\n *\n * Also see [[instanceOf]] and [[typeGuard]].\n */\nexport function typeOf(typ: \"string\"): TypeGuard<any,string>;\nexport function typeOf(typ: \"number\"): TypeGuard<any,number>;\nexport function typeOf(typ: \"boolean\"): TypeGuard<any,boolean>;\nexport function typeOf(typ: \"symbol\"): TypeGuard<any,symbol>;\nexport function typeOf(typ: string): TypeGuard<any,any> {\n    return <any>((x:any) => typeof x === typ);\n}\n", "/**\n * Utility function to help converting a value to string\n * util.inspect seems to depend on node.\n * @hidden\n */\nexport function toStringHelper(\n  obj:any | null,\n  options:{ quoteStrings:boolean } = { quoteStrings: true }\n):string {\n  if (Array.isArray(obj)) {\n    return \"[\" + obj.map(o => toStringHelper(o, options)) + \"]\"\n  }\n  if (typeof obj === \"string\") {\n    return options.quoteStrings ? `'${obj}'` : obj\n  }\n  if (obj &&\n    (\n      obj.toString !== Object.prototype.toString\n    )) {\n    return obj.toString()\n  }\n  // We used to use JSON.stringify here, but that will\n  // throw an exception if there are cycles, which we\n  // absolutely don't want!\n  // https://stackoverflow.com/a/48254637/516188\n  const customStringify = function(v:any) {\n    const cache = new Set()\n    return JSON.stringify(v, function(key, value) {\n      if (typeof value === \"object\" && value !== null) {\n        if (cache.has(value)) {\n          // Circular reference found, discard key\n          return\n        }\n        // Store value in our set\n        cache.add(value)\n      }\n      return value\n    })\n  }\n  return customStringify(obj)\n}\n", "import { hasTrueEquality } from \"./Comparison.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\nlet preludeTsContractViolationCb = (msg:string):never => { throw msg; };\n\n/**\n * Some programmatic errors are only detectable at runtime\n * (for instance trying to setup a <code>HashSet</code> of <code>Option&lt;number[]&gt;</code>: you\n * can't reliably compare a <code>number[]</code> therefore you can't compare\n * an <code>Option&lt;number[]&gt;</code>.. but we can't detect this error at compile-time\n * in typescript). So when we detect them at runtime, prelude-ts throws\n * an exception by default.\n * This function allows you to change that default action\n * (for instance, you could display an error message in the console,\n * or log the error)\n *\n * You can reproduce the issue easily by running for instance:\n *\n *  HashSet.of(Option.of([1]))\n *  => throws\n */\nexport function setContractViolationAction(action: (msg:string)=>never) {\n    preludeTsContractViolationCb = action;\n}\n\n/**\n * @hidden\n */\nexport function reportContractViolation(msg: string): void {\n    preludeTsContractViolationCb(msg);\n}\n\n/**\n * @hidden\n */\nexport function contractTrueEquality(context: string, ...vals: Array<any>) {\n    for (const val of vals) {\n        if (val) {\n            if (val.hasTrueEquality && (!val.hasTrueEquality())) {\n                reportContractViolation(\n                    context + \": element doesn't support true equality: \" + toStringHelper(val));\n            }\n            if (!hasTrueEquality(val).getOrThrow()) {\n                reportContractViolation(\n                    context + \": element doesn't support equality: \" + toStringHelper(val));\n            }\n            // the first element i find is looking good, aborting\n            return;\n        }\n    }\n}\n", "import { WithEquality, Ordering, ToOrderable } from \"./Comparison.js\"\nimport { Value} from \"./Value.js\"\nimport { Collection } from \"./Collection.js\"\nimport { Vector } from \"./Vector.js\"\nimport { LinkedList } from \"./LinkedList.js\"\nimport { Option } from \"./Option.js\"\nimport { ToString } from \"./ToString.js\"\n\n/**\n * Ability to specify a sorting function.\n * See [[Seq.sortOn]].\n *\n * You can give a lambda getting a sortable value (number or string) from your\n * object, or a list of lambdas, and in the list you can also put {desc:lambda}\n * items to request descending sorting\n *\n * `{sortOn: ToOrderable<T>|Array<ToOrderable<T>|{desc:ToOrderable<T>}>}`\n */\nexport type SortOnSpec<T> = {sortOn: ToOrderable<T>|Array<ToOrderable<T>|{desc:ToOrderable<T>}>};\n\n/**\n * Ability to specify a sorting function.\n * See [[Seq.sortBy]].\n *\n * `{sortBy: (v1:T,v2:T)=>Ordering}`\n */\nexport type SortBySpec<T> = {sortBy: (v1:T,v2:T)=>Ordering};\n\n/**\n * @hidden\n */\nexport function isSortOnSpec<T>(sortSpec: SortOnSpec<T> | SortBySpec<T>): sortSpec is SortOnSpec<T> {\n    return (<any>sortSpec).sortOn !== undefined;\n}\n\n/**\n * A generic interface for set-like implementations.\n * @param T the item type\n */\nexport interface ISet<T extends ToString> extends Collection<T> {\n\n    /**\n     * Returns the number of elements in the set.\n     */\n    length(): number;\n\n    /**\n     * true if the set is empty, false otherwise.\n     */\n    isEmpty(): boolean;\n\n    /**\n     * Add an element to this set.\n     */\n    add(elt: T & WithEquality): ISet<T>;\n\n    /**\n     * Add multiple elements to this set.\n     */\n    addAll(elts: Iterable<T & WithEquality>): ISet<T>;\n\n    /**\n     * Returns true if the element you give is present in\n     * the set, false otherwise.\n     */\n    contains(elt: T & WithEquality): boolean;\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     * The resulting set may be smaller than the source.\n     */\n    map<U>(mapper:(v:T)=>U&WithEquality): ISet<U>;\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U&WithEquality>): ISet<U>;\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fun:(x:T)=>void):ISet<T>;\n\n    /**\n     * Calls the function you give for each item in the set,\n     * your function returns a set, all the sets are\n     * merged.\n     */\n    flatMap<U>(mapper:(v:T)=>ISet<U&WithEquality>): ISet<U>;\n\n    /**\n     * Returns a new Set containing the difference\n     * between this set and the other Set passed as parameter.\n     * also see [[ISet.intersect]]\n     */\n    diff(other: ISet<T&WithEquality>): ISet<T>;\n\n    /**\n     * Returns a new Set containing the intersection\n     * of this set and the other Set passed as parameter\n     * (the elements which are common to both sets)\n     * also see [[ISet.diff]]\n     */\n    intersect(other: ISet<T&WithEquality>): ISet<T>;\n\n    /**\n     * Returns whether this set is a subset of the\n     * set you give as parameter (will return true\n     * also if both sets are equal)\n     */\n    isSubsetOf(other: ISet<T&WithEquality>): boolean;\n\n    /**\n     * Returns a new set with all the elements of the current\n     * Set, minus the elements of the iterable you give as a parameter.\n     * If you call this function with a HashSet as parameter,\n     * rather call 'diff', as it'll be faster.\n     */\n    removeAll(elts: Iterable<T&WithEquality>): ISet<T>;\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean;\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean;\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:ISet<T>)=>U): U;\n\n    /**\n     * Converts this set to an array. Since a Set is not ordered\n     * and since this method returns a JS array, it can be awkward\n     * to get an array sorted in the way you'd like. So you can pass\n     * an optional sorting function too.\n     *\n     *     HashSet.of(1,2,3).toArray().sort()\n     *     => [1,2,3]\n     *\n     *     HashSet.of(1,2,3).toArray({sortOn:x=>x})\n     *     => [1,2,3]\n     *\n     *     HashSet.of(1,2,3).toArray({sortBy:(x,y)=>x-y})\n     *     => [1,2,3]\n     *\n     * You can also pass an array in sortOn, listing lambdas to\n     * several fields to sort by those fields, and also {desc:lambda}\n     * to sort by some fields descending.\n     */\n    toArray(sort?: SortOnSpec<T> | SortBySpec<T>): Array<T & WithEquality>;\n\n    /**\n     * Converts this set to an vector\n     */\n    toVector(): Vector<T & WithEquality>;\n\n    /**\n     * Converts this set to an list\n     */\n    toLinkedList(): LinkedList<T & WithEquality>;\n\n    /**\n     * Convert to an ES6 Set.\n     * You must provide a function to convert the\n     * key to a string, number or boolean, because\n     * with other types equality is not correctly\n     * managed by JS.\n     * https://stackoverflow.com/questions/29759480/how-to-customize-object-equality-for-javascript-set\n     * https://esdiscuss.org/topic/maps-with-object-keys\n     *\n     *     HashSet.of(\"a\", \"b\").toJsSet(x=>x);\n     *     => new Set([\"a\", \"b\"])\n     */\n    toJsSet(keyConvert:(k:T)=>string): Set<string>;\n    toJsSet(keyConvert:(k:T)=>number): Set<number>;\n    toJsSet(keyConvert:(k:T)=>boolean): Set<boolean>;\n}\n", "/**\n * A sequence of values, organized in-memory as a strict linked list.\n * Each element has an head (value) and a tail (the rest of the list).\n *\n * The code is organized through the class [[EmptyLinkedList]] (empty list\n * or tail), the class [[ConsLinkedList]] (list value and pointer to next),\n * and the type alias [[LinkedList]] (empty or cons).\n *\n * Finally, \"static\" functions on Option are arranged in the class\n * [[LinkedListStatic]] and are accessed through the global constant LinkedList.\n *\n * Random access is expensive, appending is expensive, prepend or getting\n * the tail of the list is very cheap.\n * If you often need random access you should rather use [[Vector]].\n * Avoid appending at the end of the list in a loop, prefer prepending and\n * then reversing the list.\n *\n * Examples:\n *\n *     LinkedList.of(1,2,3);\n *     LinkedList.of(1,2,3).map(x => x*2).last();\n */\nimport { None, Option, Some } from \"./Option.js\"\nimport { Vector } from \"./Vector.js\"\nimport {\n  areEqual, getHashCode, Ordering, ToOrderable, WithEquality\n} from \"./Comparison.js\"\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { inspect } from \"./Value.js\"\nimport { HashMap } from \"./HashMap.js\"\nimport { HashSet } from \"./HashSet.js\"\nimport { IterableArray, Seq } from \"./Seq.js\"\nimport { Stream } from \"./Stream.js\"\nimport * as SeqHelpers from \"./SeqHelpers.js\"\nimport { ToString } from \"./ToString.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * Holds the \"static methods\" for [[LinkedList]]\n */\nexport class LinkedListStatic {\n    /**\n     * The empty stream\n     */\n    empty<T extends ToString>(): LinkedList<T> {\n        return <EmptyLinkedList<T>>emptyLinkedList;\n    }\n\n    /**\n     * Create a LinkedList with the elements you give.\n     */\n    of<T extends ToString>(elt: T, ...elts:T[]): ConsLinkedList<T>;\n    of<T extends ToString>(...elts:T[]): LinkedList<T>;\n    of<T extends ToString>(...elts:T[]): LinkedList<T> {\n        return LinkedList.ofIterable(elts);\n    }\n\n    /**\n     * Build a stream from any iterable, which means also\n     * an array for instance.\n     * @param T the item type\n     */\n    ofIterable<T>(elts: Iterable<T>): LinkedList<T> {\n        const iterator = elts[Symbol.iterator]();\n        let curItem = iterator.next();\n        let result: LinkedList<T> = <EmptyLinkedList<T>>emptyLinkedList;\n        while (!curItem.done) {\n            result = new ConsLinkedList(curItem.value, result);\n            curItem = iterator.next();\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Curried type guard for LinkedList.\n     * Sometimes needed also due to\n     * https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(LinkedList.of(1), LinkedList.empty<number>())\n     *         .filter(LinkedList.isEmpty)\n     *     => Vector.of(LinkedList.empty<number>())\n     */\n    isEmpty<T>(l: LinkedList<T>): l is EmptyLinkedList<T> {\n        return l.isEmpty();\n    }\n\n    /**\n     * Curried type guard for LinkedList.\n     * Sometimes needed also due to\n     * https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Stream.of(1), Stream.empty<number>())\n     *         .filter(Stream.isNotEmpty)\n     *         .map(s => s.head().get()+1)\n     *     => Vector.of(2)\n     */\n    isNotEmpty<T>(l: LinkedList<T>): l is ConsLinkedList<T> {\n        return !l.isEmpty();\n    }\n\n    /**\n     * Dual to the foldRight function. Build a collection from a seed.\n     * Takes a starting element and a function.\n     * It applies the function on the starting element; if the\n     * function returns None, it stops building the list, if it\n     * returns Some of a pair, it adds the first element to the result\n     * and takes the second element as a seed to keep going.\n     *\n     *     LinkedList.unfoldRight(\n     *          10, x=>Option.of(x)\n     *              .filter(x => x!==0)\n     *              .map<[number,number]>(x => [x,x-1]))\n     *     => LinkedList.of(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)\n     */\n    unfoldRight<T,U>(seed: T, fn: (x:T)=>Option<[U,T]>): LinkedList<U> {\n        let nextVal = fn(seed);\n        let result = <LinkedList<U>><EmptyLinkedList<U>>emptyLinkedList;\n        while (!nextVal.isNone()) {\n            result = new ConsLinkedList(\n                nextVal.get()[0],\n                result);\n            nextVal = fn(nextVal.get()[1]);\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Combine any number of iterables you give in as\n     * parameters to produce a new collection which combines all,\n     * in tuples. For instance:\n     *\n     *     LinkedList.zip(LinkedList.of(1,2,3), [\"a\",\"b\",\"c\"],\n     * Vector.of(8,9,10))\n     *     => LinkedList.of([1,\"a\",8], [2,\"b\",9], [3,\"c\",10])\n     *\n     * The result collection will have the length of the shorter\n     * of the input iterables. Extra elements will be discarded.\n     *\n     * Also see the non-static version [[ConsLinkedList.zip]], which only\n     * combines two collections.\n     *\n     *          (`[number,string,number]` for the code sample)\n     *\n     * @template A\n     \n     * @param {IterableArray<A>} iterables\n     * @return {LinkedList<A>}\n     */\n    zip<A extends any[]>(...iterables: IterableArray<A>): LinkedList<A> {\n        let r = LinkedList.empty<A>();\n        const iterators = iterables.map(i => i[Symbol.iterator]());\n        let items = iterators.map(i => i.next());\n\n        while (!items.some(item => item.done)) {\n            r = r.prepend(<any>items.map(item => item.value));\n            items = iterators.map(i => i.next());\n        }\n        return r.reverse();\n    }\n}\n\n/**\n * The LinkedList constant allows to call the LinkedList \"static\" methods\n */\nexport const LinkedList = new LinkedListStatic();\n\n/**\n * A LinkedList is either [[EmptyLinkedList]] or [[ConsLinkedList]]\n * \"static methods\" available through [[LinkedListStatic]]\n * @param T the item type\n */\nexport type LinkedList<T extends ToString> = EmptyLinkedList<T> | ConsLinkedList<T>;\n\n/**\n * EmptyLinkedList is the empty linked list; every non-empty\n * linked list also has a pointer to an empty linked list\n * after its last element.\n * \"static methods\" available through [[LinkedListStatic]]\n * @param T the item type\n */\nexport class EmptyLinkedList<T extends ToString> implements Seq<T> {\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return SeqHelpers.seqHasTrueEquality<T>(this);\n    }\n\n    /**\n     * Implementation of the Iterator interface.\n     */\n    [Symbol.iterator](): Iterator<T> {\n        return {\n            next(): IteratorResult<T> {\n                return {\n                    done: true,\n                    value: <any>undefined\n                };\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    readonly className: \"EmptyLinkedList\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * View this Some a as LinkedList. Useful to help typescript type\n     * inference sometimes.\n     */\n    asLinkedList(): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Get the length of the collection.\n     */\n    length(): number {\n        return 0;\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * true if the collection is empty, false otherwise.\n     */\n    isEmpty(): this is EmptyLinkedList<T> {\n        return true;\n    }\n\n    /**\n     * Get the first value of the collection, if any.\n     * In this case the list is empty, so returns Option.none\n     */\n    head(): None<T> {\n        return <None<T>>Option.none<T>();\n    }\n\n    /**\n     * Get all the elements in the collection but the first one.\n     * If the collection is empty, return None.\n     */\n    tail(): Option<LinkedList<T>> {\n        return Option.none<LinkedList<T>>();\n    }\n\n    /**\n     * Get the last value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    last(): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Retrieve the element at index idx.\n     * Returns an option because the collection may\n     * contain less elements than the index.\n     *\n     * Careful this is going to have poor performance\n     * on LinkedList, which is not a good data structure\n     * for random access!\n     */\n    get(idx: number): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Search for an item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    find(predicate:(v:T)=>boolean): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Returns true if the item is in the collection,\n     * false otherwise.\n     */\n    contains(v:T&WithEquality): boolean {\n        return false;\n    }\n\n    /**\n     * Return a new stream keeping only the first n elements\n     * from this stream.\n     */\n    take(n: number): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate.\n     */\n    takeWhile(predicate: (x:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate,\n     * but starting from the end of the collection.\n     *\n     *     LinkedList.of(1,2,3,4).takeRightWhile(x => x > 2)\n     *     => LinkedList.of(3,4)\n     */\n    takeRightWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with the first\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    drop(n:number): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the first elements\n     * until one element fails the predicate. All elements\n     * after that point are retained.\n     */\n    dropWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with the last\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    dropRight(n:number): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the last elements\n     * until one element fails the predicate. All elements\n     * before that point are retained.\n     */\n    dropRightWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     LinkedList.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return zero;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldLeft(\"!\", (xs,x) => x+xs);\n     *     => \"cba!\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        return zero;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldRight(\"!\", (x,xs) => xs+x);\n     *     => \"!cba\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return zero;\n    }\n\n    /**\n     * Combine this collection with the collection you give in\n     * parameter to produce a new collection which combines both,\n     * in pairs. For instance:\n     *\n     *     Vector.of(1,2,3).zip([\"a\",\"b\",\"c\"])\n     *     => Vector.of([1,\"a\"], [2,\"b\"], [3,\"c\"])\n     *\n     * The result collection will have the length of the shorter\n     * of both collections. Extra elements will be discarded.\n     *\n     * Also see [[LinkedListStatic.zip]] (static version which can more than two\n     * iterables)\n     */\n    zip<U>(other: Iterable<U>): LinkedList<[T,U]> {\n        return <EmptyLinkedList<[T,U]>>emptyLinkedList;\n    }\n\n    /**\n     * Combine this collection with the index of the elements\n     * in it. Handy if you need the index when you map on\n     * the collection for instance:\n     *\n     *     LinkedList.of(\"a\",\"b\").zipWithIndex().map(([v,idx]) => v+idx);\n     *     => LinkedList.of(\"a0\", \"b1\")\n     */\n    zipWithIndex(): LinkedList<[T,number]> {\n        return <EmptyLinkedList<[T,number]>><any>this;\n    }\n\n    /**\n     * Reverse the collection. For instance:\n     *\n     *     LinkedList.of(1,2,3).reverse();\n     *     => LinkedList.of(3,2,1)\n     */\n    reverse(): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Takes a predicate; returns a pair of collections.\n     * The first one is the longest prefix of this collection\n     * which satisfies the predicate, and the second collection\n     * is the remainder of the collection.\n     *\n     *    LinkedList.of(1,2,3,4,5,6).span(x => x <3)\n     *    => [LinkedList.of(1,2), LinkedList.of(3,4,5,6)]\n     */\n    span(predicate:(x:T)=>boolean): [LinkedList<T>,LinkedList<T>] {\n        return [this, this];\n    }\n\n    /**\n     * Split the collection at a specific index.\n     *\n     *     LinkedList.of(1,2,3,4,5).splitAt(3)\n     *     => [LinkedList.of(1,2,3), LinkedList.of(4,5)]\n     */\n    splitAt(index:number): [LinkedList<T>,LinkedList<T>] {\n        return [this, this];\n    }\n\n    /**\n     * Returns a pair of two collections; the first one\n     * will only contain the items from this collection for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     LinkedList.of(1,2,3,4).partition(x => x%2===0)\n     *     => [LinkedList.of(2,4),LinkedList.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [LinkedList<U>,LinkedList<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [LinkedList<T>,LinkedList<T>];\n    partition<U extends T>(predicate:(v:T)=>boolean): [LinkedList<U>,LinkedList<any>] {\n        return [LinkedList.empty<U>(), LinkedList.empty<T>()];\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[ConsLinkedList.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C & WithEquality): HashMap<C,LinkedList<T>> {\n        return HashMap.empty<C,LinkedList<T>>();\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[ConsLinkedList.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Randomly reorder the elements of the collection.\n     */\n    shuffle(): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Append an element at the end of this LinkedList.\n     * Warning: appending in a loop on a linked list is going\n     * to be very slow!\n     */\n    append(v:T): LinkedList<T> {\n        return LinkedList.of(v);\n    }\n\n    /*\n     * Append multiple elements at the end of this LinkedList.\n     */\n    appendAll(elts:Iterable<T>): LinkedList<T> {\n        return LinkedList.ofIterable(elts);\n    }\n\n    /**\n     * Remove multiple elements from a LinkedList\n     *\n     *     LinkedList.of(1,2,3,4,3,2,1).removeAll([2,4])\n     *     => LinkedList.of(1,3,3,1)\n     */\n    removeAll(elts:Iterable<T&WithEquality>): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Removes the first element matching the predicate\n     * (use [[Seq.filter]] to remove all elements matching a predicate)\n     */\n    removeFirst(predicate: (x:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Prepend an element at the beginning of the collection.\n     */\n    prepend(elt: T): LinkedList<T> {\n        return new ConsLinkedList(elt, this);\n    }\n\n    /**\n     * Prepend multiple elements at the beginning of the collection.\n     */\n    prependAll(elt: Iterable<T>): LinkedList<T> {\n        return LinkedList.ofIterable(elt);\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(mapper:(v:T)=>U): LinkedList<U> {\n        return <EmptyLinkedList<U>>emptyLinkedList;\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     LinkedList.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => LinkedList.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U>): LinkedList<U> {\n        return <EmptyLinkedList<U>>emptyLinkedList;\n    }\n\n    /**\n     * Calls the function you give for each item in the collection,\n     * your function returns a collection, all the collections are\n     * concatenated.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper:(v:T)=>LinkedList<U>): LinkedList<U> {\n        return <EmptyLinkedList<U>>emptyLinkedList;\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return true;\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return false;\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(predicate:(v:T)=>v is U): LinkedList<U>;\n    filter(predicate:(v:T)=>boolean): LinkedList<T>;\n    filter(predicate:(v:T)=>boolean): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with elements\n     * sorted according to the comparator you give.\n     *\n     *     const activityOrder = [\"Writer\", \"Actor\", \"Director\"];\n     *     LinkedList.of({name:\"George\", activity: \"Director\"}, {name:\"Robert\",\n     * activity: \"Actor\"})\n     *         .sortBy((p1,p2) => activityOrder.indexOf(p1.activity) -\n     * activityOrder.indexOf(p2.activity));\n     *     => LinkedList.of({\"name\":\"Robert\",\"activity\":\"Actor\"},\n     * {\"name\":\"George\",\"activity\":\"Director\"})\n     *\n     * also see [[ConsLinkedList.sortOn]]\n     */\n    sortBy(compare: (v1:T,v2:T)=>Ordering): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Give a function associating a number or a string with\n     * elements from the collection, and the elements\n     * are sorted according to that value.\n     *\n     *     LinkedList.of({a:3,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a)\n     *     => LinkedList.of({a:1,b:\"test\"},{a:2,b:\"a\"},{a:3,b:\"b\"})\n     *\n     * You can also sort by multiple criteria, and request 'descending'\n     * sorting:\n     *\n     *     LinkedList.of({a:1,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a,{desc:elt=>elt.b})\n     *     => LinkedList.of({a:1,b:\"test\"},{a:1,b:\"b\"},{a:2,b:\"a\"})\n     *\n     * also see [[ConsLinkedList.sortBy]]\n     */\n    sortOn(...getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Remove duplicate items; elements are mapped to keys, those\n     * get compared.\n     *\n     *     LinkedList.of(1,1,2,3,2,3,1).distinctBy(x => x)\n     *     => LinkedList.of(1,2,3)\n     */\n    distinctBy<U>(keyExtractor: (x:T)=>U&WithEquality): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fn: (v:T)=>void): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsLinkedList.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.minBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     LinkedList.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).minOn(x=>x.age)\n     *     => Option.of({name:\"Paula\", age:6})\n     *\n     * also see [[ConsLinkedList.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.minOn(this, getOrderable);\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsLinkedList.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.maxBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     LinkedList.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).maxOn(x=>x.age)\n     *     => Option.of({name:\"Joe\", age:12})\n     *\n     * also see [[ConsLinkedList.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.maxOn(this, getOrderable);\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     LinkedList.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return SeqHelpers.sumOn(this, getNumber);\n    }\n\n    /**\n     * Slides a window of a specific size over the sequence.\n     * Returns a lazy stream so memory use is not prohibitive.\n     *\n     *     LinkedList.of(1,2,3,4,5,6,7,8).sliding(3)\n     *     => Stream.of(LinkedList.of(1,2,3), LinkedList.of(4,5,6),\n     * LinkedList.of(7,8))\n     */\n    sliding(count:number): Stream<ConsLinkedList<T>> {\n        return <Stream<ConsLinkedList<T>>>SeqHelpers.sliding(this, count);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The last element of the result is the final cumulative result.\n     *\n     *     LinkedList.of(1,2,3).scanLeft(0, (soFar,cur)=>soFar+cur)\n     *     => LinkedList.of(0,1,3,6)\n     */\n    scanLeft<U>(init:U, fn:(soFar:U,cur:T)=>U): LinkedList<U> {\n        return LinkedList.of<U>(init);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The first element of the result is the final cumulative result.\n     *\n     *     LinkedList.of(1,2,3).scanRight(0, (cur,soFar)=>soFar+cur)\n     *     => LinkedList.of(6,5,3,0)\n     */\n    scanRight<U>(init:U, fn:(cur:T,soFar:U)=>U): LinkedList<U> {\n        return LinkedList.of<U>(init);\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     LinkedList.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     */\n    mkString(separator: string): string {\n        return \"\";\n    }\n\n    /**\n     * Convert to array.\n     * Don't do it on an infinite stream!\n     */\n    toArray(): T[] {\n        return [];\n    }\n\n    /**\n     * Convert to vector.\n     * Don't do it on an infinite stream!\n     */\n    toVector(): Vector<T> {\n        return Vector.empty<T>();\n    }\n\n    /**\n     * Convert this collection to a map. You give a function which\n     * for each element in the collection returns a pair. The\n     * key of the pair will be used as a key in the map, the value,\n     * as a value in the map. If several values get the same key,\n     * entries will be lost.\n     *\n     *     LinkedList.of(1,2,3).toMap(x=>[x.toString(), x])\n     *     => HashMap.of([\"1\",1], [\"2\",2], [\"3\",3])\n     */\n    toMap<K,V>(converter:(x:T)=>[K & WithEquality,V]): HashMap<K,V> {\n        return HashMap.empty<K,V>();\n    }\n\n    /**\n     * Convert this collection to a set. Since the elements of the\n     * Seq may not support equality, you must pass a function returning\n     * a value supporting equality.\n     *\n     *     LinkedList.of(1,2,3,3,4).toSet(x=>x)\n     *     => HashSet.of(1,2,3,4)\n     */\n    toSet<K>(converter:(x:T)=>K&WithEquality): HashSet<K> {\n        return HashSet.empty<K>();\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:LinkedList<T>)=>U): U {\n        return converter(this);\n    }\n    \n    pluck<K extends keyof T>(key:K): Seq<T[K]> {\n        return SeqHelpers.pluck(this,key) // Stream.of(...this.ma);\n    }\n    \n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: LinkedList<T&WithEquality>): boolean {\n        if (!other) {\n            return false;\n        }\n        return other.isEmpty();\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return 1;\n    }\n\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[ConsLinkedList.mkString]]\n     */\n    toString(): string {\n        return \"LinkedList()\";\n    }\n}\n\n/**\n * ConsLinkedList holds a value and a pointer to a next element,\n * which could be [[ConsLinkedList]] or [[EmptyLinkedList]].\n * A ConsLinkedList is basically a non-empty linked list. It will\n * contain at least one element.\n * \"static methods\" available through [[LinkedListStatic]]\n * @param T the item type\n */\nexport class ConsLinkedList<T extends ToString> implements Seq<T> {\n\n    /**\n     * @hidden\n     */\n    readonly className: \"ConsLinkedList\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * @hidden\n     */\n    public constructor(protected value: T, protected _tail: LinkedList<T>) {}\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return SeqHelpers.seqHasTrueEquality<T>(this);\n    }\n\n    /**\n     * View this Some a as LinkedList. Useful to help typescript type\n     * inference sometimes.\n     */\n    asLinkedList(): LinkedList<T> {\n        return this;\n    }\n\n    /**\n     * Implementation of the Iterator interface.\n     */\n    [Symbol.iterator](): Iterator<T> {\n        let item: LinkedList<T> = this;\n        return {\n            next(): IteratorResult<T> {\n                if (item.isEmpty()) {\n                    return { done: true, value: <any>undefined };\n                }\n                const value = item.head().get();\n                item = item.tail().get();\n                return {done: false, value};\n            }\n        };\n    }\n\n    /**\n     * Get the length of the collection.\n     */\n    length(): number {\n        return this.foldLeft(0, (n, ignored) => n + 1);\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return this._tail.isEmpty() ?\n            Option.of(this.value) :\n            Option.none<T>();\n    }\n\n    /**\n     * true if the collection is empty, false otherwise.\n     */\n    isEmpty(): this is EmptyLinkedList<T> {\n        return false;\n    }\n\n    /**\n     * Get the first value of the collection, if any.\n     * In this case the list is not empty, so returns Option.some\n     */\n    head(): Some<T> {\n        return Option.some(this.value);\n    }\n\n    /**\n     * Get all the elements in the collection but the first one.\n     * If the collection is empty, return None.\n     */\n    tail(): Some<LinkedList<T>> {\n        return Option.some(this._tail);\n    }\n\n    /**\n     * Get the last value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    last(): Some<T> {\n        let curItem: LinkedList<T> = this;\n        while (true) {\n            const item = (<ConsLinkedList<T>>curItem).value;\n            curItem = (<ConsLinkedList<T>>curItem)._tail;\n            if (curItem.isEmpty()) {\n                return Option.some(item);\n            }\n        }\n    }\n\n    /**\n     * Retrieve the element at index idx.\n     * Returns an option because the collection may\n     * contain less elements than the index.\n     *\n     * Careful this is going to have poor performance\n     * on LinkedList, which is not a good data structure\n     * for random access!\n     */\n    get(idx: number): Option<T> {\n        let curItem: LinkedList<T> = this;\n        let i=0;\n        while (!curItem.isEmpty()) {\n            if (i === idx) {\n                const item = curItem.value;\n                return Option.of(item);\n            }\n            curItem = curItem._tail;\n            ++i;\n        }\n        return Option.none<T>();\n    }\n\n    /**\n     * Search for an item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    find(predicate:(v:T)=>boolean): Option<T> {\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            const item = curItem.value;\n            if (predicate(item)) {\n                return Option.of(item);\n            }\n            curItem = curItem._tail;\n        }\n        return Option.none<T>();\n    }\n\n    /**\n     * Returns true if the item is in the collection,\n     * false otherwise.\n     */\n    contains(v:T&WithEquality): boolean {\n        return this.find(x => areEqual(x,v)).isSome();\n    }\n\n    /**\n     * Return a new stream keeping only the first n elements\n     * from this stream.\n     */\n    take(n: number): LinkedList<T> {\n        let result = <LinkedList<T>><EmptyLinkedList<T>>emptyLinkedList;\n        let curItem: LinkedList<T> = this;\n        let i = 0;\n        while (i++ < n && (!curItem.isEmpty())) {\n            result = new ConsLinkedList(curItem.value, result);\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate.\n     */\n    takeWhile(predicate: (x:T)=>boolean): LinkedList<T> {\n        let result = <LinkedList<T>><EmptyLinkedList<T>>emptyLinkedList;\n        let curItem: LinkedList<T> = this;\n        while ((!curItem.isEmpty()) && predicate(curItem.value)) {\n            result = new ConsLinkedList(curItem.value, result);\n            curItem =curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate,\n     * but starting from the end of the collection.\n     *\n     *     LinkedList.of(1,2,3,4).takeRightWhile(x => x > 2)\n     *     => LinkedList.of(3,4)\n     */\n    takeRightWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        return this.reverse().takeWhile(predicate).reverse();\n    }\n\n    /**\n     * Returns a new collection with the first\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    drop(n:number): LinkedList<T> {\n        let i = n;\n        let curItem: LinkedList<T> = this;\n        while (i-- > 0 && !curItem.isEmpty()) {\n            curItem = curItem._tail;\n        }\n        return curItem;\n    }\n\n    /**\n     * Returns a new collection, discarding the first elements\n     * until one element fails the predicate. All elements\n     * after that point are retained.\n     */\n    dropWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty() && predicate(curItem.value)) {\n            curItem = curItem._tail;\n        }\n        return curItem;\n    }\n\n    /**\n     * Returns a new collection with the last\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    dropRight(n:number): LinkedList<T> {\n        // going twice through the list...\n        const length = this.length();\n        return this.take(length-n);\n    }\n\n    /**\n     * Returns a new collection, discarding the last elements\n     * until one element fails the predicate. All elements\n     * before that point are retained.\n     */\n    dropRightWhile(predicate:(x:T)=>boolean): LinkedList<T> {\n        return this.reverse().dropWhile(predicate).reverse();\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     LinkedList.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return this.foldLeft(zero, fn);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldLeft(\"!\", (xs,x) => x+xs);\n     *     => \"cba!\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        let r = zero;\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            r = fn(r, curItem.value);\n            curItem = curItem._tail;\n        }\n        return r;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldRight(\"!\", (x,xs) => xs+x);\n     *     => \"!cba\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return this.reverse().foldLeft(zero, (xs,x)=>fn(x,xs));\n    }\n\n    /**\n     * Combine this collection with the collection you give in\n     * parameter to produce a new collection which combines both,\n     * in pairs. For instance:\n     *\n     *     Vector.of(1,2,3).zip([\"a\",\"b\",\"c\"])\n     *     => Vector.of([1,\"a\"], [2,\"b\"], [3,\"c\"])\n     *\n     * The result collection will have the length of the shorter\n     * of both collections. Extra elements will be discarded.\n     *\n     * Also see [[LinkedListStatic.zip]] (static version which can more than two\n     * iterables)\n     */\n    zip<U>(other: Iterable<U>): LinkedList<[T,U]> {\n        const otherIterator = other[Symbol.iterator]();\n        let otherCurItem = otherIterator.next();\n\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<[T,U]> = <EmptyLinkedList<[T,U]>>emptyLinkedList;\n\n        while ((!curItem.isEmpty()) && (!otherCurItem.done)) {\n            result = new ConsLinkedList(\n                [curItem.value, otherCurItem.value] as [T,U], result);\n            curItem = curItem._tail;\n            otherCurItem = otherIterator.next();\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Combine this collection with the index of the elements\n     * in it. Handy if you need the index when you map on\n     * the collection for instance:\n     *\n     *     LinkedList.of(\"a\",\"b\").zipWithIndex().map(([v,idx]) => v+idx);\n     *     => LinkedList.of(\"a0\", \"b1\")\n     */\n    zipWithIndex(): LinkedList<[T,number]> {\n        return <LinkedList<[T,number]>>SeqHelpers.zipWithIndex<T>(this);\n    }\n\n    /**\n     * Reverse the collection. For instance:\n     *\n     *     LinkedList.of(1,2,3).reverse();\n     *     => LinkedList.of(3,2,1)\n     */\n    reverse(): LinkedList<T> {\n        return this.foldLeft(<LinkedList<T>><EmptyLinkedList<T>>emptyLinkedList, (xs,x) => xs.prepend(x));\n    }\n\n    /**\n     * Takes a predicate; returns a pair of collections.\n     * The first one is the longest prefix of this collection\n     * which satisfies the predicate, and the second collection\n     * is the remainder of the collection.\n     *\n     *    LinkedList.of(1,2,3,4,5,6).span(x => x <3)\n     *    => [LinkedList.of(1,2), LinkedList.of(3,4,5,6)]\n     */\n    span(predicate:(x:T)=>boolean): [LinkedList<T>,LinkedList<T>] {\n        let first: LinkedList<T> = <EmptyLinkedList<T>>emptyLinkedList;\n        let curItem: LinkedList<T> = this;\n        while ((!curItem.isEmpty()) && predicate(curItem.value)) {\n            first = new ConsLinkedList(curItem.value, first);\n            curItem = curItem._tail;\n        }\n        return [first.reverse(), curItem];\n    }\n\n    /**\n     * Split the collection at a specific index.\n     *\n     *     LinkedList.of(1,2,3,4,5).splitAt(3)\n     *     => [LinkedList.of(1,2,3), LinkedList.of(4,5)]\n     */\n    splitAt(index:number): [LinkedList<T>,LinkedList<T>] {\n        let first: LinkedList<T> = <EmptyLinkedList<T>>emptyLinkedList;\n        let curItem: LinkedList<T> = this;\n        let i = 0;\n        while (i++ < index && (!curItem.isEmpty())) {\n            first = new ConsLinkedList(curItem.value, first);\n            curItem = curItem._tail;\n        }\n        return [first.reverse(), curItem];\n    }\n\n    /**\n     * Returns a pair of two collections; the first one\n     * will only contain the items from this collection for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     LinkedList.of(1,2,3,4).partition(x => x%2===0)\n     *     => [LinkedList.of(2,4),LinkedList.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [LinkedList<U>,LinkedList<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [LinkedList<T>,LinkedList<T>];\n    partition(predicate:(v:T)=>boolean): [LinkedList<T>,LinkedList<T>] {\n        let fst = LinkedList.empty<T>();\n        let snd = LinkedList.empty<T>();\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            if (predicate(curItem.value)) {\n                fst = new ConsLinkedList(curItem.value, fst);\n            } else {\n                snd = new ConsLinkedList(curItem.value, snd);\n            }\n            curItem = curItem._tail;\n        }\n        return [fst.reverse(), snd.reverse()];\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[ConsLinkedList.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C & WithEquality): HashMap<C,LinkedList<T>> {\n        return this.foldLeft(\n            HashMap.empty<C,LinkedList<T>>(),\n            (acc: HashMap<C,LinkedList<T>>, v:T) =>\n                acc.putWithMerge(\n                    classifier(v), LinkedList.of(v),\n                    (v1:LinkedList<T>,v2:LinkedList<T>)=>\n                        v1.prepend(v2.single().getOrThrow())))\n            .mapValues(l => l.reverse());\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[ConsLinkedList.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Randomly reorder the elements of the collection.\n     */\n    shuffle(): LinkedList<T> {\n        return LinkedList.ofIterable<T>(SeqHelpers.shuffle(this.toArray()));\n    }\n\n    /**\n     * Append an element at the end of this LinkedList.\n     * Warning: appending in a loop on a linked list is going\n     * to be very slow!\n     */\n    append(v:T): LinkedList<T> {\n        return new ConsLinkedList(\n            this.value,\n            this._tail.append(v));\n    }\n\n    /*\n     * Append multiple elements at the end of this LinkedList.\n     */\n    appendAll(elts:Iterable<T>): LinkedList<T> {\n        return LinkedList.ofIterable(elts).prependAll(<LinkedList<T>>this);\n    }\n\n    /**\n     * Remove multiple elements from a LinkedList\n     *\n     *     LinkedList.of(1,2,3,4,3,2,1).removeAll([2,4])\n     *     => LinkedList.of(1,3,3,1)\n     */\n    removeAll(elts:Iterable<T&WithEquality>): LinkedList<T> {\n        return <LinkedList<T>><any>SeqHelpers.removeAll(this, elts);\n    }\n\n    /**\n     * Removes the first element matching the predicate\n     * (use [[Seq.filter]] to remove all elements matching a predicate)\n     */\n    removeFirst(predicate: (x:T)=>boolean): LinkedList<T> {\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<T> = <EmptyLinkedList<T>>emptyLinkedList;\n        let removed = false;\n        while (!curItem.isEmpty()) {\n            if (predicate(curItem.value) && !removed) {\n                removed = true;\n            } else {\n                result = new ConsLinkedList(curItem.value, result);\n            }\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Prepend an element at the beginning of the collection.\n     */\n    prepend(elt: T): LinkedList<T> {\n        return new ConsLinkedList(elt, this);\n    }\n\n    /**\n     * Prepend multiple elements at the beginning of the collection.\n     */\n    prependAll(elts: Iterable<T>): LinkedList<T> {\n        let leftToAdd = LinkedList.ofIterable(elts).reverse();\n        let result: LinkedList<T> = this;\n        while (!leftToAdd.isEmpty()) {\n            result = new ConsLinkedList(leftToAdd.value, result);\n            leftToAdd = leftToAdd._tail;\n        }\n        return result;\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(mapper:(v:T)=>U): LinkedList<U> {\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<U> = <EmptyLinkedList<U>>emptyLinkedList;\n        while (!curItem.isEmpty()) {\n            result = new ConsLinkedList(mapper(curItem.value), result);\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     LinkedList.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => LinkedList.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U>): LinkedList<U> {\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<U> = <EmptyLinkedList<U>>emptyLinkedList;\n        while (!curItem.isEmpty()) {\n            const mapped = mapper(curItem.value);\n            if (mapped.isSome()) {\n                result = new ConsLinkedList(mapped.get(), result);\n            }\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Calls the function you give for each item in the collection,\n     * your function returns a collection, all the collections are\n     * concatenated.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper:(v:T)=>LinkedList<U>): LinkedList<U> {\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<U> = <EmptyLinkedList<U>>emptyLinkedList;\n        while (!curItem.isEmpty()) {\n            result = result.prependAll(mapper(curItem.value).reverse());\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return this.find(x => !predicate(x)).isNone();\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return this.find(predicate).isSome();\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(predicate:(v:T)=>v is U): LinkedList<U>;\n    filter(predicate:(v:T)=>boolean): LinkedList<T>;\n    filter(predicate:(v:T)=>boolean): LinkedList<T> {\n        let curItem: LinkedList<T> = this;\n        let result: LinkedList<T> = <EmptyLinkedList<T>>emptyLinkedList;\n        while (!curItem.isEmpty()) {\n            if (predicate(curItem.value)) {\n                result = new ConsLinkedList(curItem.value, result);\n            }\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Returns a new collection with elements\n     * sorted according to the comparator you give.\n     *\n     *     const activityOrder = [\"Writer\", \"Actor\", \"Director\"];\n     *     LinkedList.of({name:\"George\", activity: \"Director\"}, {name:\"Robert\",\n     * activity: \"Actor\"})\n     *         .sortBy((p1,p2) => activityOrder.indexOf(p1.activity) -\n     * activityOrder.indexOf(p2.activity));\n     *     => LinkedList.of({\"name\":\"Robert\",\"activity\":\"Actor\"},\n     * {\"name\":\"George\",\"activity\":\"Director\"})\n     *\n     * also see [[ConsLinkedList.sortOn]]\n     */\n    sortBy(compare: (v1:T,v2:T)=>Ordering): LinkedList<T> {\n        return LinkedList.ofIterable<T>(this.toArray().sort(compare));\n    }\n\n    /**\n     * Give a function associating a number or a string with\n     * elements from the collection, and the elements\n     * are sorted according to that value.\n     *\n     *     LinkedList.of({a:3,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a)\n     *     => LinkedList.of({a:1,b:\"test\"},{a:2,b:\"a\"},{a:3,b:\"b\"})\n     *\n     * You can also sort by multiple criteria, and request 'descending'\n     * sorting:\n     *\n     *     LinkedList.of({a:1,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a,{desc:elt=>elt.b})\n     *     => LinkedList.of({a:1,b:\"test\"},{a:1,b:\"b\"},{a:2,b:\"a\"})\n     *\n     * also see [[ConsLinkedList.sortBy]]\n     */\n    sortOn(...getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): LinkedList<T> {\n        return <LinkedList<T>>SeqHelpers.sortOn<T>(this, getKeys);\n    }\n\n    /**\n     * Remove duplicate items; elements are mapped to keys, those\n     * get compared.\n     *\n     *     LinkedList.of(1,1,2,3,2,3,1).distinctBy(x => x)\n     *     => LinkedList.of(1,2,3)\n     */\n    distinctBy<U>(keyExtractor: (x:T)=>U&WithEquality): LinkedList<T> {\n        return <LinkedList<T>>SeqHelpers.distinctBy(this, keyExtractor);\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fn: (v:T)=>void): LinkedList<T> {\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            fn(curItem.value);\n            curItem = curItem._tail;\n        }\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsLinkedList.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.minBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     LinkedList.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).minOn(x=>x.age)\n     *     => Option.of({name:\"Paula\", age:6})\n     *\n     * also see [[ConsLinkedList.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.minOn(this, getOrderable);\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     *     LinkedList.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).maxOn(x=>x.age)\n     *     => Option.of({name:\"Joe\", age:12})\n     *\n     * also see [[ConsLinkedList.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.maxBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsLinkedList.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.maxOn(this, getOrderable);\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     LinkedList.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return SeqHelpers.sumOn(this, getNumber);\n    }\n\n    /**\n     * Slides a window of a specific size over the sequence.\n     * Returns a lazy stream so memory use is not prohibitive.\n     *\n     *     LinkedList.of(1,2,3,4,5,6,7,8).sliding(3)\n     *     => Stream.of(LinkedList.of(1,2,3), LinkedList.of(4,5,6),\n     * LinkedList.of(7,8))\n     */\n    sliding(count:number): Stream<ConsLinkedList<T>> {\n        return <Stream<ConsLinkedList<T>>>SeqHelpers.sliding(this, count);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     *\n     *     LinkedList.of(1,2,3).scanLeft(0, (soFar,cur)=>soFar+cur)\n     *     => LinkedList.of(0,1,3,6)\n     */\n    scanLeft<U>(init:U, fn:(soFar:U,cur:T)=>U): LinkedList<U> {\n        let result = LinkedList.of(init);\n        let curItem: LinkedList<T> = this;\n        let soFar = init;\n        while (!curItem.isEmpty()) {\n            soFar = fn(soFar, curItem.value);\n            result = new ConsLinkedList(soFar, result);\n            curItem = curItem._tail;\n        }\n        return result.reverse();\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The first element of the result is the final cumulative result.\n     *\n     *     LinkedList.of(1,2,3).scanRight(0, (cur,soFar)=>soFar+cur)\n     *     => LinkedList.of(6,5,3,0)\n     */\n    scanRight<U>(init:U, fn:(cur:T,soFar:U)=>U): LinkedList<U> {\n        let result = LinkedList.of(init);\n        let curItem: LinkedList<T> = this.reverse();\n        let soFar = init;\n        while (!curItem.isEmpty()) {\n            soFar = fn(curItem.value, soFar);\n            result = new ConsLinkedList(soFar, result);\n            curItem = curItem._tail;\n        }\n        return result;\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     LinkedList.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     */\n    mkString(separator: string): string {\n        let r = \"\";\n        let curItem: LinkedList<T> = this;\n        let isNotFirst = false;\n        while (!curItem.isEmpty()) {\n            if (isNotFirst) {\n                r += separator;\n            }\n            r += toStringHelper(curItem.value, {quoteStrings:false});\n            curItem = curItem._tail;\n            isNotFirst = true;\n        }\n        return r;\n    }\n\n    /**\n     * Convert to array.\n     * Don't do it on an infinite stream!\n     */\n    toArray(): T[] {\n        let r:T[] = [];\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            r.push(curItem.value);\n            curItem = curItem._tail;\n        }\n        return r;\n    }\n\n    /**\n     * Convert to vector.\n     * Don't do it on an infinite stream!\n     */\n    toVector(): Vector<T> {\n        return Vector.ofIterable<T>(this.toArray());\n    }\n\n    /**\n     * Convert this collection to a map. You give a function which\n     * for each element in the collection returns a pair. The\n     * key of the pair will be used as a key in the map, the value,\n     * as a value in the map. If several values get the same key,\n     * entries will be lost.\n     *\n     *     LinkedList.of(1,2,3).toMap(x=>[x.toString(), x])\n     *     => HashMap.of([\"1\",1], [\"2\",2], [\"3\",3])\n     */\n    toMap<K,V>(converter:(x:T)=>[K & WithEquality,V]): HashMap<K,V> {\n        return this.foldLeft(HashMap.empty<K,V>(), (acc,cur) => {\n            const converted = converter(cur);\n            return acc.put(converted[0], converted[1]);\n        });\n    }\n\n    /**\n     * Convert this collection to a set. Since the elements of the\n     * Seq may not support equality, you must pass a function returning\n     * a value supporting equality.\n     *\n     *     LinkedList.of(1,2,3,3,4).toSet(x=>x)\n     *     => HashSet.of(1,2,3,4)\n     */\n    toSet<K>(converter:(x:T)=>K&WithEquality): HashSet<K> {\n        return this.foldLeft(HashSet.empty<K>(), (acc,cur) => {\n            return acc.add(converter(cur));\n        });\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:LinkedList<T>)=>U): U {\n        return converter(this);\n    }\n    \n    pluck<K extends keyof T>(key:K): Seq<T[K]> {\n        return SeqHelpers.pluck(this,key) // Stream.of(...this.ma);\n    }\n    \n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: LinkedList<T&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if (!other || !other.tail) {\n            return false;\n        }\n        contractTrueEquality(\"LinkedList.equals\", this, other);\n        let myVal: LinkedList<T> = this;\n        let hisVal = other;\n        while (true) {\n            if (myVal.isEmpty() !== hisVal.isEmpty()) {\n                return false;\n            }\n            if (myVal.isEmpty()) {\n                // they are both empty, end of the stream\n                return true;\n            }\n            const myHead = myVal.value;\n            const hisHead = (<ConsLinkedList<T>>hisVal).value;\n\n            if ((myHead === undefined) !== (hisHead === undefined)) {\n                return false;\n            }\n            if (myHead === undefined || hisHead === undefined) {\n                // they are both undefined, the || is for TS's flow analysis\n                // so he realizes none of them is undefined after this.\n                continue;\n            }\n            if (!areEqual(myHead, hisHead)) {\n                return false;\n            }\n            myVal = myVal._tail;\n            hisVal = (<ConsLinkedList<T&WithEquality>>hisVal)._tail;\n        }\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        let hash = 1;\n        let curItem: LinkedList<T> = this;\n        while (!curItem.isEmpty()) {\n            hash = 31 * hash + getHashCode(curItem.value);\n            curItem = curItem._tail;\n        }\n        return hash;\n    }\n\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[ConsLinkedList.mkString]]\n     */\n    toString(): string {\n        let curItem: LinkedList<T> = this;\n        let result = \"LinkedList(\";\n\n        while (!curItem.isEmpty()) {\n            result += toStringHelper(curItem.value);\n            const tail: LinkedList<T> = curItem._tail;\n            curItem = tail;\n            if (!curItem.isEmpty()) {\n                result += \", \";\n            }\n        }\n\n        return result + \")\";\n    }\n}\n\nconst emptyLinkedList = new EmptyLinkedList<any>();\n\nexport const linkedListOf = LinkedList.of\nexport const linkedListOfIterable = LinkedList.ofIterable\n", "/**\n *  @fileOverview Hash Array Mapped Trie.\n *\n *  Code based on: https://github.com/exclipy/pdata\n */\n\n/* Configuration\n ******************************************************************************/\nconst SIZE = 5\n\nconst BUCKET_SIZE = Math.pow(2, SIZE)\n\nconst MASK = BUCKET_SIZE - 1\n\nconst MAX_INDEX_NODE = BUCKET_SIZE / 2\n\nconst MIN_ARRAY_NODE = BUCKET_SIZE / 4\n\n/* Types\n ******************************************************************************/\ntype KeyEqFn = (a: any, b: any) => boolean\ntype HashFn = (key: any) => number\ntype UpdateFn = (current?: any) => any\ntype SizeRef = { value: number }\n\ninterface HamtConfig {\n  keyEq: KeyEqFn\n  hash: HashFn\n}\n\ninterface VisitState {\n  value: any\n  rest: any\n}\n\n/*\n ******************************************************************************/\nconst nothing: any = {}\n\nconst constant =\n  <T>(x: T) =>\n  (): T =>\n    x\n\n/**\n *  Get 32 bit hash of string.\n *\n *  Based on:\n *  http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\n */\nexport const hash: HashFn = (str: any): number => {\n  const type = typeof str\n  if (type === \"number\") return str as number\n  if (type !== \"string\") str += \"\"\n\n  let h = 0\n  for (let i = 0, len = str.length; i < len; ++i) {\n    const c = str.charCodeAt(i)\n    h = (((h << 5) - h) + c) | 0\n  }\n  return h\n}\n\n/* Bit Ops\n ******************************************************************************/\n/**\n *  Hamming weight.\n *\n *  Taken from: http://jsperf.com/hamming-weight\n */\nconst popcount = (x: number): number => {\n  x -= (x >> 1) & 0x55555555\n  x = (x & 0x33333333) + ((x >> 2) & 0x33333333)\n  x = (x + (x >> 4)) & 0x0f0f0f0f\n  x += x >> 8\n  x += x >> 16\n  return x & 0x7f\n}\n\nconst hashFragment = (shift: number, h: number): number =>\n  (h >>> shift) & MASK\n\nconst toBitmap = (x: number): number => 1 << x\n\nconst fromBitmap = (bitmap: number, bit: number): number =>\n  popcount(bitmap & (bit - 1))\n\n/* Array Ops\n ******************************************************************************/\n/**\n *  Set a value in an array.\n *\n *  @param mutate Should the input array be mutated?\n *  @param at Index to change.\n *  @param v New value\n *  @param arr Array.\n */\nconst arrayUpdate = <T>(mutate: boolean, at: number, v: T, arr: T[]): T[] => {\n  let out = arr\n  if (!mutate) {\n    const len = arr.length\n    out = new Array(len)\n    for (let i = 0; i < len; ++i) out[i] = arr[i]\n  }\n  out[at] = v\n  return out\n}\n\n/**\n *  Remove a value from an array.\n *\n *  @param mutate Should the input array be mutated?\n *  @param at Index to remove.\n *  @param arr Array.\n */\nconst arraySpliceOut = <T>(mutate: boolean, at: number, arr: T[]): T[] => {\n  const newLen = arr.length - 1\n  let i = 0\n  let g = 0\n  let out = arr\n  if (mutate) {\n    i = g = at\n  } else {\n    out = new Array(newLen)\n    while (i < at) out[g++] = arr[i++]\n  }\n  ++i\n  while (i <= newLen) out[g++] = arr[i++]\n  if (mutate) {\n    out.length = newLen\n  }\n  return out\n}\n\n/**\n *  Insert a value into an array.\n *\n *  @param mutate Should the input array be mutated?\n *  @param at Index to insert at.\n *  @param v Value to insert.\n *  @param arr Array.\n */\nconst arraySpliceIn = <T>(\n  mutate: boolean,\n  at: number,\n  v: T,\n  arr: T[]\n): T[] => {\n  const len = arr.length\n  if (mutate) {\n    let i = len\n    while (i >= at) arr[i--] = arr[i]\n    arr[at] = v\n    return arr\n  }\n  let i = 0,\n    g = 0\n  const out: T[] = new Array(len + 1)\n  while (i < at) out[g++] = arr[i++]\n  out[at] = v\n  while (i < len) out[++g] = arr[i++]\n  return out\n}\n\n/* Node Structures\n ******************************************************************************/\nconst LEAF = 1\nconst COLLISION = 2\nconst INDEX = 3\nconst ARRAY = 4\n\n/**\n *  Empty node.\n */\nconst empty: any = {\n  __hamt_isEmpty: true\n}\n\nconst isEmptyNode = (x: any): boolean =>\n  x === empty || (x && x.__hamt_isEmpty)\n\n/**\n *  Leaf holding a value.\n *\n *  @member edit Edit of the node.\n *  @member hash Hash of key.\n *  @member key Key.\n *  @member value Value stored.\n */\nconst Leaf = (edit: number, hash: number, key: any, value: any): any => ({\n  type: LEAF,\n  edit: edit,\n  hash: hash,\n  key: key,\n  value: value,\n  _modify: Leaf__modify\n})\n\n/**\n *  Leaf holding multiple values with the same hash but different keys.\n *\n *  @member edit Edit of the node.\n *  @member hash Hash of key.\n *  @member children Array of collision children node.\n */\nconst Collision = (edit: number, hash: number, children: any[]): any => ({\n  type: COLLISION,\n  edit: edit,\n  hash: hash,\n  children: children,\n  _modify: Collision__modify\n})\n\n/**\n *  Internal node with a sparse set of children.\n *\n *  Uses a bitmap and array to pack children.\n *\n *  @member edit Edit of the node.\n *  @member mask Bitmap that encode the positions of children in the array.\n *  @member children Array of child nodes.\n */\nconst IndexedNode = (edit: number, mask: number, children: any[]): any => ({\n  type: INDEX,\n  edit: edit,\n  mask: mask,\n  children: children,\n  _modify: IndexedNode__modify\n})\n\n/**\n *  Internal node with many children.\n *\n *  @member edit Edit of the node.\n *  @member size Number of children.\n *  @member children Array of child nodes.\n */\nconst ArrayNode = (edit: number, size: number, children: any[]): any => ({\n  type: ARRAY,\n  edit: edit,\n  size: size,\n  children: children,\n  _modify: ArrayNode__modify\n})\n\n/**\n *  Is `node` a leaf node?\n */\nconst isLeaf = (node: any): boolean =>\n  node === empty || node.type === LEAF || node.type === COLLISION\n\n/* Internal node operations.\n ******************************************************************************/\n/**\n *  Expand an indexed node into an array node.\n *\n *  @param edit Current edit.\n *  @param frag Index of added child.\n *  @param child Added child.\n *  @param bitmap Index node mask before child added.\n *  @param subNodes Index node children before child added.\n */\nconst expand = (\n  edit: number,\n  frag: number,\n  child: any,\n  bitmap: number,\n  subNodes: any[]\n): any => {\n  const arr: any[] = []\n  let bit = bitmap\n  let count = 0\n  for (let i = 0; bit; ++i) {\n    if (bit & 1) arr[i] = subNodes[count++]\n    bit >>>= 1\n  }\n  arr[frag] = child\n  return ArrayNode(edit, count + 1, arr)\n}\n\n/**\n *  Collapse an array node into a indexed node.\n *\n *  @param edit Current edit.\n *  @param count Number of elements in new array.\n *  @param removed Index of removed element.\n *  @param elements Array node children before remove.\n */\nconst pack = (\n  edit: number,\n  count: number,\n  removed: number,\n  elements: any[]\n): any => {\n  const children: any[] = new Array(count - 1)\n  let g = 0\n  let bitmap = 0\n  for (let i = 0, len = elements.length; i < len; ++i) {\n    if (i !== removed) {\n      const elem = elements[i]\n      if (elem && !isEmptyNode(elem)) {\n        children[g++] = elem\n        bitmap |= 1 << i\n      }\n    }\n  }\n  return IndexedNode(edit, bitmap, children)\n}\n\n/**\n *  Merge two leaf nodes.\n *\n *  @param shift Current shift.\n *  @param h1 Node 1 hash.\n *  @param n1 Node 1.\n *  @param h2 Node 2 hash.\n *  @param n2 Node 2.\n */\nconst mergeLeaves = (\n  edit: number,\n  shift: number,\n  h1: number,\n  n1: any,\n  h2: number,\n  n2: any\n): any => {\n  if (h1 === h2) return Collision(edit, h1, [n2, n1])\n\n  const subH1 = hashFragment(shift, h1)\n  const subH2 = hashFragment(shift, h2)\n  return IndexedNode(\n    edit,\n    toBitmap(subH1) | toBitmap(subH2),\n    subH1 === subH2\n      ? [mergeLeaves(edit, shift + SIZE, h1, n1, h2, n2)]\n      : subH1 < subH2\n        ? [n1, n2]\n        : [n2, n1]\n  )\n}\n\n/**\n *  Update an entry in a collision list.\n *\n *  @param mutate Should mutation be used?\n *  @param edit Current edit.\n *  @param keyEq Key compare function.\n *  @param h Hash of collision.\n *  @param list Collision list.\n *  @param f Update function.\n *  @param k Key to update.\n *  @param size Size ref.\n */\nconst updateCollisionList = (\n  mutate: boolean,\n  edit: number,\n  keyEq: KeyEqFn,\n  h: number,\n  list: any[],\n  f: UpdateFn,\n  k: any,\n  size: SizeRef\n): any[] => {\n  const len = list.length\n  for (let i = 0; i < len; ++i) {\n    const child = list[i]\n    if (keyEq(k, child.key)) {\n      const value = child.value\n      const newValue = f(value)\n      if (newValue === value) return list\n\n      if (newValue === nothing) {\n        --size.value\n        return arraySpliceOut(mutate, i, list)\n      }\n      return arrayUpdate(mutate, i, Leaf(edit, h, k, newValue), list)\n    }\n  }\n\n  const newValue = f()\n  if (newValue === nothing) return list\n  ++size.value\n  return arrayUpdate(mutate, len, Leaf(edit, h, k, newValue), list)\n}\n\nconst canEditNode = (edit: number, node: any): boolean => edit === node.edit\n\n/* Editing\n ******************************************************************************/\nfunction Leaf__modify(\n  this: any,\n  edit: number,\n  keyEq: KeyEqFn,\n  shift: number,\n  f: UpdateFn,\n  h: number,\n  k: any,\n  size: SizeRef\n): any {\n  if (keyEq(k, this.key)) {\n    const v = f(this.value)\n    if (v === this.value) return this\n    else if (v === nothing) {\n      --size.value\n      return empty\n    }\n    if (canEditNode(edit, this)) {\n      this.value = v\n      return this\n    }\n    return Leaf(edit, h, k, v)\n  }\n  const v = f()\n  if (v === nothing) return this\n  ++size.value\n  return mergeLeaves(edit, shift, this.hash, this, h, Leaf(edit, h, k, v))\n}\n\nfunction Collision__modify(\n  this: any,\n  edit: number,\n  keyEq: KeyEqFn,\n  shift: number,\n  f: UpdateFn,\n  h: number,\n  k: any,\n  size: SizeRef\n): any {\n  if (h === this.hash) {\n    const canEdit = canEditNode(edit, this)\n    const list = updateCollisionList(\n      canEdit,\n      edit,\n      keyEq,\n      this.hash,\n      this.children,\n      f,\n      k,\n      size\n    )\n    if (list === this.children) return this\n\n    return list.length > 1\n      ? Collision(edit, this.hash, list)\n      : list[0] // collapse single element collision list\n  }\n  const v = f()\n  if (v === nothing) return this\n  ++size.value\n  return mergeLeaves(edit, shift, this.hash, this, h, Leaf(edit, h, k, v))\n}\n\nfunction IndexedNode__modify(\n  this: any,\n  edit: number,\n  keyEq: KeyEqFn,\n  shift: number,\n  f: UpdateFn,\n  h: number,\n  k: any,\n  size: SizeRef\n): any {\n  const mask = this.mask\n  const children = this.children\n  const frag = hashFragment(shift, h)\n  const bit = toBitmap(frag)\n  const indx = fromBitmap(mask, bit)\n  const exists = mask & bit\n  const current = exists ? children[indx] : empty\n  const child = current._modify(edit, keyEq, shift + SIZE, f, h, k, size)\n\n  if (current === child) return this\n\n  const canEdit = canEditNode(edit, this)\n  let bitmap = mask\n  let newChildren: any[]\n  if (exists && isEmptyNode(child)) {\n    // remove\n    bitmap &= ~bit\n    if (!bitmap) return empty\n    if (children.length <= 2 && isLeaf(children[indx ^ 1]))\n      return children[indx ^ 1] // collapse\n\n    newChildren = arraySpliceOut(canEdit, indx, children)\n  } else if (!exists && !isEmptyNode(child)) {\n    // add\n    if (children.length >= MAX_INDEX_NODE)\n      return expand(edit, frag, child, mask, children)\n\n    bitmap |= bit\n    newChildren = arraySpliceIn(canEdit, indx, child, children)\n  } else {\n    // modify\n    newChildren = arrayUpdate(canEdit, indx, child, children)\n  }\n\n  if (canEdit) {\n    this.mask = bitmap\n    this.children = newChildren\n    return this\n  }\n  return IndexedNode(edit, bitmap, newChildren)\n}\n\nfunction ArrayNode__modify(\n  this: any,\n  edit: number,\n  keyEq: KeyEqFn,\n  shift: number,\n  f: UpdateFn,\n  h: number,\n  k: any,\n  size: SizeRef\n): any {\n  let count = this.size\n  const children = this.children\n  const frag = hashFragment(shift, h)\n  const child = children[frag]\n  const newChild = (child || empty)._modify(\n    edit,\n    keyEq,\n    shift + SIZE,\n    f,\n    h,\n    k,\n    size\n  )\n\n  if (child === newChild) return this\n\n  const canEdit = canEditNode(edit, this)\n  let newChildren: any[]\n  if (isEmptyNode(child) && !isEmptyNode(newChild)) {\n    // add\n    ++count\n    newChildren = arrayUpdate(canEdit, frag, newChild, children)\n  } else if (!isEmptyNode(child) && isEmptyNode(newChild)) {\n    // remove\n    --count\n    if (count <= MIN_ARRAY_NODE) return pack(edit, count, frag, children)\n    newChildren = arrayUpdate(canEdit, frag, empty, children)\n  } else {\n    // modify\n    newChildren = arrayUpdate(canEdit, frag, newChild, children)\n  }\n\n  if (canEdit) {\n    this.size = count\n    this.children = newChildren\n    return this\n  }\n  return ArrayNode(edit, count, newChildren)\n}\n\nempty._modify = (\n  edit: number,\n  keyEq: KeyEqFn,\n  shift: number,\n  f: UpdateFn,\n  h: number,\n  k: any,\n  size: SizeRef\n): any => {\n  const v = f()\n  if (v === nothing) return empty\n  ++size.value\n  return Leaf(edit, h, k, v)\n}\n\n/*\n ******************************************************************************/\nexport class HamtMap {\n  _editable: number\n  _edit: number\n  _config: HamtConfig\n  _root: any\n  _size: number\n\n  constructor(\n    editable: number,\n    edit: number,\n    config: HamtConfig,\n    root: any,\n    size: number\n  ) {\n    this._editable = editable\n    this._edit = edit\n    this._config = config\n    this._root = root\n    this._size = size\n  }\n\n  setTree(newRoot: any, newSize: number): HamtMap {\n    if (this._editable) {\n      this._root = newRoot\n      this._size = newSize\n      return this\n    }\n    return newRoot === this._root\n      ? this\n      : new HamtMap(\n          this._editable,\n          this._edit,\n          this._config,\n          newRoot,\n          newSize\n        )\n  }\n\n  tryGetHash(alt: any, hash: number, key: any): any {\n    return tryGetHash(alt, hash, key, this)\n  }\n\n  tryGet(alt: any, key: any): any {\n    return tryGet(alt, key, this)\n  }\n\n  getHash(hash: number, key: any): any {\n    return getHash(hash, key, this)\n  }\n\n  get(key: any, alt?: any): any {\n    return tryGet(alt, key, this)\n  }\n\n  hasHash(hash: number, key: any): boolean {\n    return hasHash(hash, key, this)\n  }\n\n  has(key: any): boolean {\n    return has(key, this)\n  }\n\n  isEmpty(): boolean {\n    return isEmpty(this)\n  }\n\n  modifyHash(hash: number, key: any, f: UpdateFn): HamtMap {\n    return modifyHash(f, hash, key, this)\n  }\n\n  modify(key: any, f: UpdateFn): HamtMap {\n    return modify(f, key, this)\n  }\n\n  setHash(hash: number, key: any, value: any): HamtMap {\n    return setHash(hash, key, value, this)\n  }\n\n  set(key: any, value: any): HamtMap {\n    return set(key, value, this)\n  }\n\n  removeHash(hash: number, key: any): HamtMap {\n    return removeHash(hash, key, this)\n  }\n\n  deleteHash(hash: number, key: any): HamtMap {\n    return removeHash(hash, key, this)\n  }\n\n  remove(key: any): HamtMap {\n    return remove(key, this)\n  }\n\n  delete(key: any): HamtMap {\n    return remove(key, this)\n  }\n\n  beginMutation(): HamtMap {\n    return beginMutation(this)\n  }\n\n  endMutation(): HamtMap {\n    return endMutation(this)\n  }\n\n  mutate(f: (map: HamtMap) => void): HamtMap {\n    return mutate(f, this)\n  }\n\n  entries(): MapIterator {\n    return entries(this)\n  }\n\n  [Symbol.iterator](): MapIterator {\n    return entries(this)\n  }\n\n  keys(): MapIterator {\n    return keys(this)\n  }\n\n  values(): MapIterator {\n    return values(this)\n  }\n\n  fold<Z>(f: (acc: Z, value: any, key: any) => Z, z: Z): Z {\n    return fold(f, z, this)\n  }\n\n  forEach(f: (value: any, key: any, map: HamtMap) => void): void {\n    return forEach(f, this)\n  }\n\n  count(): number {\n    return count(this)\n  }\n\n  get size(): number {\n    return this._size\n  }\n}\n\n/* Queries\n ******************************************************************************/\n/**\n *  Lookup the value for `key` in `map` using a custom `hash`.\n *\n *  Returns the value or `alt` if none.\n */\nexport const tryGetHash = (\n  alt: any,\n  hash: number,\n  key: any,\n  map: HamtMap\n): any => {\n  let node = map._root\n  let shift = 0\n  const keyEq = map._config.keyEq\n  while (true)\n    switch (node.type) {\n      case LEAF: {\n        return keyEq(key, node.key) ? node.value : alt\n      }\n      case COLLISION: {\n        if (hash === node.hash) {\n          const children = node.children\n          for (let i = 0, len = children.length; i < len; ++i) {\n            const child = children[i]\n            if (keyEq(key, child.key)) return child.value\n          }\n        }\n        return alt\n      }\n      case INDEX: {\n        const frag = hashFragment(shift, hash)\n        const bit = toBitmap(frag)\n        if (node.mask & bit) {\n          node = node.children[fromBitmap(node.mask, bit)]\n          shift += SIZE\n          break\n        }\n        return alt\n      }\n      case ARRAY: {\n        node = node.children[hashFragment(shift, hash)]\n        if (node) {\n          shift += SIZE\n          break\n        }\n        return alt\n      }\n      default:\n        return alt\n    }\n}\n\n/**\n *  Lookup the value for `key` in `map` using internal hash function.\n *\n *  @see `tryGetHash`\n */\nexport const tryGet = (alt: any, key: any, map: HamtMap): any =>\n  tryGetHash(alt, map._config.hash(key), key, map)\n\n/**\n *  Lookup the value for `key` in `map` using a custom `hash`.\n *\n *  Returns the value or `undefined` if none.\n */\nexport const getHash = (hash: number, key: any, map: HamtMap): any =>\n  tryGetHash(undefined, hash, key, map)\n\n/**\n *  Lookup the value for `key` in `map` using internal hash function.\n *\n *  @see `get`\n */\nexport const get = (key: any, map: HamtMap): any =>\n  tryGetHash(undefined, map._config.hash(key), key, map)\n\n/**\n *  Does an entry exist for `key` in `map`? Uses custom `hash`.\n */\nexport const hasHash = (hash: number, key: any, map: HamtMap): boolean =>\n  tryGetHash(nothing, hash, key, map) !== nothing\n\n/**\n *  Does an entry exist for `key` in `map`? Uses internal hash function.\n */\nexport const has = (key: any, map: HamtMap): boolean =>\n  hasHash(map._config.hash(key), key, map)\n\nconst defKeyCompare: KeyEqFn = (x, y) => x === y\n\n/**\n *  Create an empty map.\n *\n *  @param config Configuration.\n */\nexport const make = (config?: Partial<HamtConfig>): HamtMap =>\n  new HamtMap(\n    0,\n    0,\n    {\n      keyEq: (config && config.keyEq) || defKeyCompare,\n      hash: (config && config.hash) || hash\n    },\n    empty,\n    0\n  )\n\n/**\n *  Empty map.\n */\nconst emptyMap: HamtMap = make()\n\n/**\n *  Does `map` contain any elements?\n */\nexport const isEmpty = (map: HamtMap): boolean =>\n  !!(map && isEmptyNode(map._root))\n\n/* Updates\n ******************************************************************************/\n/**\n *  Alter the value stored for `key` in `map` using function `f` using\n *  custom hash.\n *\n *  `f` is invoked with the current value for `k` if it exists,\n *  or no arguments if no such value exists. `modify` will always either\n *  update or insert a value into the map.\n *\n *  Returns a map with the modified value. Does not alter `map`.\n */\nexport const modifyHash = (\n  f: UpdateFn,\n  hash: number,\n  key: any,\n  map: HamtMap\n): HamtMap => {\n  const size: SizeRef = { value: map._size }\n  const newRoot = map._root._modify(\n    map._editable ? map._edit : NaN,\n    map._config.keyEq,\n    0,\n    f,\n    hash,\n    key,\n    size\n  )\n  return map.setTree(newRoot, size.value)\n}\n\n/**\n *  Alter the value stored for `key` in `map` using function `f` using\n *  internal hash function.\n *\n *  @see `modifyHash`\n */\nexport const modify = (f: UpdateFn, key: any, map: HamtMap): HamtMap =>\n  modifyHash(f, map._config.hash(key), key, map)\n\n/**\n *  Store `value` for `key` in `map` using custom `hash`.\n *\n *  Returns a map with the modified value. Does not alter `map`.\n */\nexport const setHash = (\n  hash: number,\n  key: any,\n  value: any,\n  map: HamtMap\n): HamtMap => modifyHash(constant(value), hash, key, map)\n\n/**\n *  Store `value` for `key` in `map` using internal hash function.\n *\n *  @see `setHash`\n */\nexport const set = (key: any, value: any, map: HamtMap): HamtMap =>\n  setHash(map._config.hash(key), key, value, map)\n\n/**\n *  Remove the entry for `key` in `map`.\n *\n *  Returns a map with the value removed. Does not alter `map`.\n */\nconst del = constant(nothing)\nexport const removeHash = (hash: number, key: any, map: HamtMap): HamtMap =>\n  modifyHash(del, hash, key, map)\n\n/**\n *  Remove the entry for `key` in `map` using internal hash function.\n *\n *  @see `removeHash`\n */\nexport const remove = (key: any, map: HamtMap): HamtMap =>\n  removeHash(map._config.hash(key), key, map)\n\n/* Mutation\n ******************************************************************************/\n/**\n *  Mark `map` as mutable.\n */\nexport const beginMutation = (map: HamtMap): HamtMap =>\n  new HamtMap(\n    map._editable + 1,\n    map._edit + 1,\n    map._config,\n    map._root,\n    map._size\n  )\n\n/**\n *  Mark `map` as immutable.\n */\nexport const endMutation = (map: HamtMap): HamtMap => {\n  map._editable = map._editable && map._editable - 1\n  return map\n}\n\n/**\n *  Mutate `map` within the context of `f`.\n *  @param f\n *  @param map HAMT\n */\nexport const mutate = (f: (map: HamtMap) => void, map: HamtMap): HamtMap => {\n  const transient = beginMutation(map)\n  f(transient)\n  return endMutation(transient)\n}\n\n/* Traversal\n ******************************************************************************/\n/**\n *  Apply a continuation.\n */\nconst appk = (k: any): VisitState | undefined =>\n  k && lazyVisitChildren(k[0], k[1], k[2], k[3], k[4])\n\n/**\n *  Recursively visit all values stored in an array of nodes lazily.\n */\nconst lazyVisitChildren = (\n  len: number,\n  children: any[],\n  i: number,\n  f: (node: any) => any,\n  k: any\n): VisitState | undefined => {\n  while (i < len) {\n    const child = children[i++]\n    if (child && !isEmptyNode(child))\n      return lazyVisit(child, f, [len, children, i, f, k])\n  }\n  return appk(k)\n}\n\n/**\n *  Recursively visit all values stored in `node` lazily.\n */\nconst lazyVisit = (\n  node: any,\n  f: (node: any) => any,\n  k?: any\n): VisitState | undefined => {\n  switch (node.type) {\n    case LEAF:\n      return {\n        value: f(node),\n        rest: k\n      }\n\n    case COLLISION:\n    case ARRAY:\n    case INDEX: {\n      const children = node.children\n      return lazyVisitChildren(children.length, children, 0, f, k)\n    }\n\n    default:\n      return appk(k)\n  }\n}\n\nconst DONE: any = {\n  done: true\n}\n\n/**\n *  Javascript iterator over a map.\n */\nexport class MapIterator {\n  v: VisitState | undefined\n\n  constructor(v: VisitState | undefined) {\n    this.v = v\n  }\n\n  next(): any {\n    if (!this.v) return DONE\n    const v0 = this.v\n    this.v = appk(v0.rest)\n    return v0\n  }\n\n  [Symbol.iterator](): this {\n    return this\n  }\n}\n\n/**\n *  Lazily visit each value in map with function `f`.\n */\nconst visit = (map: HamtMap, f: (node: any) => any): MapIterator =>\n  new MapIterator(lazyVisit(map._root, f))\n\n/**\n *  Get a Javascsript iterator of `map`.\n *\n *  Iterates over `[key, value]` arrays.\n */\nconst buildPairs = (x: any): [any, any] => [x.key, x.value]\nexport const entries = (map: HamtMap): MapIterator => visit(map, buildPairs)\n\n/**\n *  Get array of all keys in `map`.\n *\n *  Order is not guaranteed.\n */\nconst buildKeys = (x: any): any => x.key\nexport const keys = (map: HamtMap): MapIterator => visit(map, buildKeys)\n\n/**\n *  Get array of all values in `map`.\n *\n *  Order is not guaranteed, duplicates are preserved.\n */\nconst buildValues = (x: any): any => x.value\nexport const values = (map: HamtMap): MapIterator => visit(map, buildValues)\n\n/* Fold\n ******************************************************************************/\n/**\n *  Visit every entry in the map, aggregating data.\n *\n *  Order of nodes is not guaranteed.\n *\n *  @param f Function mapping accumulated value, value, and key to new value.\n *  @param z Starting value.\n *  @param m HAMT\n */\nexport const fold = <Z>(\n  f: (acc: Z, value: any, key: any) => Z,\n  z: Z,\n  m: HamtMap\n): Z => {\n  const root = m._root\n  if (root.type === LEAF) return f(z, root.value, root.key)\n\n  const toVisit: any[][] = [root.children]\n  let children: any[] | undefined\n  while ((children = toVisit.pop())) {\n    for (let i = 0, len = children.length; i < len; ) {\n      const child = children[i++]\n      if (child && child.type) {\n        if (child.type === LEAF) z = f(z, child.value, child.key)\n        else toVisit.push(child.children)\n      }\n    }\n  }\n  return z\n}\n\n/**\n *  Visit every entry in the map, aggregating data.\n *\n *  Order of nodes is not guaranteed.\n *\n *  @param f Function invoked with value and key\n *  @param map HAMT\n */\nexport const forEach = (\n  f: (value: any, key: any, map: HamtMap) => void,\n  map: HamtMap\n): void => {\n  fold((_acc: null, value, key) => {\n    f(value, key, map)\n    return null\n  }, null, map)\n}\n\n/* Aggregate\n ******************************************************************************/\n/**\n *  Get the number of entries in `map`.\n */\nexport const count = (map: HamtMap): number => map._size\n\n/* Export\n ******************************************************************************/\nexport { emptyMap as empty }\n\nexport const hamt = {\n  hash,\n  tryGetHash,\n  tryGet,\n  getHash,\n  get,\n  hasHash,\n  has,\n  make,\n  empty: emptyMap,\n  isEmpty,\n  modifyHash,\n  modify,\n  setHash,\n  set,\n  removeHash,\n  remove,\n  beginMutation,\n  endMutation,\n  mutate,\n  entries,\n  keys,\n  values,\n  fold,\n  forEach,\n  count\n}\n\nexport default hamt\n", "// noinspection DuplicatedCode\n\nimport { ISet, isSortOnSpec, SortBySpec, SortOnSpec } from \"./ISet.js\"\nimport { Vector } from \"./Vector.js\"\nimport { HashMap } from \"./HashMap.js\"\nimport { LinkedList } from \"./LinkedList.js\"\nimport { Option } from \"./Option.js\"\nimport {\n  areEqual,\n  getHashCode,\n  hasEquals,\n  HasEquals,\n  Ordering,\n  ToOrderable,\n  WithEquality\n} from \"./Comparison.js\"\nimport * as SeqHelpers from \"./SeqHelpers.js\"\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { inspect } from \"./Value.js\"\nimport { ToString } from \"./ToString.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\nimport hamt from \"./internal/hamt_plus/hamt\";\n// const hamt: any = require(\"hamt_plus\");\n\n/**\n * An unordered collection of values, where no two values\n * may be equal. A value can only be present once.\n * @param T the item type\n */\nexport class HashSet<T extends ToString> implements ISet<T> {\n\n    /**\n     * @hidden\n     */\n    protected constructor(protected hamt: any) {}\n\n    /**\n     * The empty hashset.\n     * @param T the item type\n     */\n    static empty<T>(): HashSet<T> {\n        return <EmptyHashSet<T>>emptyHashSet;\n    }\n\n    /**\n     * Build a hashset from any iterable, which means also\n     * an array for instance.\n     * @param T the item type\n     */\n    static ofIterable<T>(elts: Iterable<T & WithEquality>): HashSet<T> {\n        return new EmptyHashSet<T>().addAll(elts);\n    }\n\n    /**\n     * Build a hashset from a series of items (any number, as parameters)\n     * @param T the item type\n     */\n    static of<T>(...arr: Array<T & WithEquality>): HashSet<T> {\n        return HashSet.ofIterable(arr);\n    }\n\n    /**\n     * Curried predicate to find out whether the HashSet is empty.\n     *\n     *     Vector.of(HashSet.of(1), HashSet.empty<number>())\n     *         .filter(HashSet.isEmpty)\n     *     => Vector.of(HashSet.empty<number>())\n     */\n    static isEmpty<T>(v: HashSet<T>): boolean {\n        return v.isEmpty();\n    }\n\n    /**\n     * Curried predicate to find out whether the HashSet is empty.\n     *\n     *     Vector.of(HashSet.of(1), HashSet.empty<number>())\n     *         .filter(HashSet.isNotEmpty)\n     *     => Vector.of(HashSet.of(1))\n     */\n    static isNotEmpty<T>(v: HashSet<T>): boolean {\n        return !v.isEmpty();\n    }\n\n    /**\n     * Implementation of the Iterator interface.\n     */\n    [Symbol.iterator](): Iterator<T> {\n        return this.hamt.keys();\n    }\n\n    /**\n     * Add an element to this set.\n     */\n    add(elt: T & WithEquality): HashSet<T> {\n        return new HashSet<T>(this.hamt.set(elt,elt));\n    }\n\n    protected addAllArray(elts: Array<T&WithEquality>): HashSet<T> {\n        return new HashSet<T>(this.hamt.mutate((h:any) => {\n            if (elts.length > 0) {\n                contractTrueEquality(\"Error building a HashSet\", elts[0]);\n            }\n            for (const val of elts) {\n                h.set(val, val);\n            }\n        }));\n    }\n\n    /**\n     * Add multiple elements to this set.\n     */\n    addAll(elts: Iterable<T & WithEquality>): HashSet<T> {\n        if (Array.isArray(elts)) {\n            return this.addAllArray(elts);\n        }\n        return new HashSet<T>(this.hamt.mutate((h:any) => {\n            let checkedEq = false;\n            const iterator = elts[Symbol.iterator]();\n            let curItem = iterator.next();\n            if (!curItem.done && curItem.value && !checkedEq) {\n                contractTrueEquality(\"Error building a HashSet\", curItem.value);\n                checkedEq = true;\n            }\n            while (!curItem.done) {\n                h.set(curItem.value, curItem.value);\n                curItem = iterator.next();\n            }\n        }));\n    }\n\n    /**\n     * Returns true if the element you give is present in\n     * the set, false otherwise.\n     */\n    contains(elt: T & WithEquality): boolean {\n        return this.hamt.has(elt);\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     * The resulting set may be smaller than the source.\n     */\n    map<U>(mapper:(v:T)=>U&WithEquality): HashSet<U> {\n        return this.hamt.fold(\n            (acc: HashSet<U>, value: T&WithEquality, key: T&WithEquality) => {\n                return acc.add(mapper(value));\n            }, HashSet.empty());\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     HashSet.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => HashSet.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U&WithEquality>): HashSet<U> {\n        return this.hamt.fold(\n            (acc: HashSet<U>, value: T&WithEquality, key: T&WithEquality) => {\n                const val = mapper(value);\n                return val.isSome() ? acc.add(val.get()) : acc\n            }, HashSet.empty());\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fun:(x:T)=>void): HashSet<T> {\n        const iterator: Iterator<T> = this.hamt.values();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            fun(curItem.value);\n            curItem = iterator.next();\n        }\n        return this;\n    }\n\n    /**\n     * Calls the function you give for each item in the set,\n     * your function returns a set, all the sets are\n     * merged.\n     */\n    flatMap<U>(mapper:(v:T)=>HashSet<U&WithEquality>): HashSet<U> {\n        return this.foldLeft(HashSet.empty<U>(),\n                             (soFar,cur) => soFar.addAll(mapper(cur)));\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(fn:(v:T)=>v is U): HashSet<U>;\n    filter(predicate:(v:T)=>boolean): HashSet<T>;\n    filter(predicate:(v:T)=>boolean): HashSet<T> {\n        return new HashSet<T>(\n            hamt.make({hash:this.hamt._config.hash, keyEq:this.hamt._config.keyEq}).mutate((h:any) => {\n                const iterator: Iterator<T> = this.hamt.values();\n                let curItem = iterator.next();\n                while (!curItem.done) {\n                    if (predicate(curItem.value)) {\n                        h.set(curItem.value, curItem.value);\n                    }\n                    curItem = iterator.next();\n                }\n            }));\n    }\n\n    /**\n     * Search for an item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     * We name the method findAny instead of find to emphasize\n     * that there is not ordering in a hashset.\n     *\n     *     HashSet.of(1,2,3).findAny(x => x>=3)\n     *     => Option.of(3)\n     *\n     *     HashSet.of(1,2,3).findAny(x => x>=4)\n     *     => Option.none<number>()\n     */\n    findAny(predicate:(v:T)=>boolean): Option<T> {\n        const iterator: Iterator<T> = this.hamt.values();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            if (predicate(curItem.value)) {\n                return Option.of(curItem.value);\n            }\n            curItem = iterator.next();\n        }\n        return Option.none<T>();\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     HashSet.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return this.foldLeft(zero, fn);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     * No guarantees for the order of items in a hashset!\n     *\n     * Example:\n     *\n     *     HashSet.of(\"a\", \"bb\", \"ccc\").foldLeft(0, (soFar,item) =>\n     * soFar+item.length);\n     *     => 6\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        return this.hamt.fold(\n            (acc: U, v: T&WithEquality, k: T&WithEquality) =>\n                fn(acc, v), zero);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     * No guarantees for the order of items in a hashset!\n     *\n     * Example:\n     *\n     *     HashSet.of(\"a\", \"bb\", \"ccc\").foldRight(0, (item,soFar) =>\n     * soFar+item.length);\n     *     => 6\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return this.foldLeft(zero, (cur, soFar) => fn(soFar, cur));\n    }\n\n    /**\n     * Converts this set to an array. Since a Set is not ordered\n     * and since this method returns a JS array, it can be awkward\n     * to get an array sorted in the way you'd like. So you can pass\n     * an optional sorting function too.\n     *\n     *     HashSet.of(1,2,3).toArray().sort()\n     *     => [1,2,3]\n     *\n     *     HashSet.of(1,2,3).toArray({sortOn:x=>x})\n     *     => [1,2,3]\n     *\n     *     HashSet.of(1,2,3).toArray({sortBy:(x,y)=>x-y})\n     *     => [1,2,3]\n     *\n     * You can also pass an array in sortOn, listing lambdas to\n     * several fields to sort by those fields, and also {desc:lambda}\n     * to sort by some fields descending.\n     */\n    toArray(sort?: SortOnSpec<T> | SortBySpec<T>): Array<T & WithEquality> {\n        if (!sort) {\n            return Array.from<T&WithEquality>(this.hamt.keys());\n        }\n        if (isSortOnSpec(sort)) {\n            const sortOn = sort.sortOn instanceof Array ? sort.sortOn : [sort.sortOn];\n            return Vector.ofIterable<T&WithEquality>(this.hamt.keys())\n                .sortOn(...sortOn)\n                .toArray();\n        }\n        return Array.from<T&WithEquality>(this.hamt.keys()).sort(sort.sortBy);\n    }\n\n    /**\n     * Converts this set to an vector\n     */\n    toVector(): Vector<T & WithEquality> {\n        return Vector.ofIterable<T&WithEquality>(this.hamt.keys());\n    }\n\n    /**\n     * Converts this set to an list\n     */\n    toLinkedList(): LinkedList<T & WithEquality> {\n        return LinkedList.ofIterable<T&WithEquality>(this.hamt.keys());\n    }\n\n    /**\n     * Returns the number of elements in the set.\n     */\n    length(): number {\n        return this.hamt.size;\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return this.hamt.size === 1\n            ? Option.of(this.hamt.keys().next().value)\n            : Option.none();\n    }\n\n    /**\n     * true if the set is empty, false otherwise.\n     */\n    isEmpty(): boolean {\n        return this.hamt.size === 0;\n    }\n\n    /**\n     * Returns a new Set containing the difference\n     * between this set and the other Set passed as parameter.\n     * also see [[HashSet.intersect]]\n     */\n    diff(elts: ISet<T&WithEquality>): HashSet<T> {\n        return new HashSet<T>(this.hamt.fold(\n            (acc: any, v: T&WithEquality, k: T&WithEquality) =>\n                elts.contains(k) ? acc : acc.set(k,k), hamt.empty));\n    }\n\n    /**\n     * Returns a new Set containing the intersection\n     * of this set and the other Set passed as parameter\n     * (the elements which are common to both sets)\n     * also see [[HashSet.diff]]\n     */\n    intersect(other: ISet<T&WithEquality>): HashSet<T> {\n        return new HashSet<T>(this.hamt.fold(\n            (acc: any, v: T&WithEquality, k: T&WithEquality) =>\n                other.contains(k) ? acc.set(k,k) : acc, hamt.empty));\n    }\n\n    isSubsetOf(other: ISet<T&WithEquality>): boolean {\n        return this.allMatch((x:T) => other.contains(<T&WithEquality>x));\n    }\n\n    /**\n     * Returns a new set with the element you give removed\n     * if it was present in the set.\n     */\n    remove(elt: T&WithEquality): HashSet<T> {\n        return new HashSet<T>(this.hamt.remove(elt));\n    }\n\n    /**\n     * Returns a new set with all the elements of the current\n     * Set, minus the elements of the iterable you give as a parameter.\n     * If you call this function with a HashSet as parameter,\n     * rather call 'diff', as it'll be faster.\n     */\n    removeAll(elts: Iterable<T&WithEquality>): HashSet<T> {\n        return this.diff(HashSet.ofIterable<T&WithEquality>(elts));\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        const iterator: Iterator<T> = this.hamt.values();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            if (!predicate(curItem.value)) {\n                return false;\n            }\n            curItem = iterator.next();\n        }\n        return true;\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        const iterator: Iterator<T> = this.hamt.values();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            if (predicate(curItem.value)) {\n                return true;\n            }\n            curItem = iterator.next();\n        }\n        return false;\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[HashSet.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C&WithEquality): HashMap<C,HashSet<T>> {\n        // make a singleton set with the same equality as this\n        const singletonHamtSet = (v:T) => hamt.make({\n            hash:this.hamt._config.hash, keyEq:this.hamt._config.keyEq\n        }).set(v,v);\n        // merge two mutable hamt sets, but I know the second has only 1 elt\n        const mergeSets = (v1:any,v2:any)=> {\n            const k = v2.keys().next().value;\n            v1.set(k,k);\n            return v1;\n        };\n        return this.hamt.fold(\n            // fold operation: combine a new value from the set with the accumulator\n            (acc: HashMap<C,any>, v:T&WithEquality, k:T&WithEquality) =>\n                acc.putWithMerge(\n                    classifier(v), singletonHamtSet(v).beginMutation(),\n                    mergeSets),\n            // fold accumulator: the empty hashmap\n            HashMap.empty())\n            .mapValues((h:any) => new HashSet<T>(h.endMutation()));\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[HashSet.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Returns a pair of two sets; the first one\n     * will only contain the items from this sets for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     HashSet.of(1,2,3,4).partition(x => x%2===0)\n     *     => [HashSet.of(2,4), HashSet.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [HashSet<U>,HashSet<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [HashSet<T>,HashSet<T>];\n    partition(predicate:(v:T)=>boolean): [HashSet<T>,HashSet<T>] {\n        let r1 = hamt.make({\n            hash:this.hamt._config.hash, keyEq:this.hamt._config.keyEq\n        }).beginMutation();\n        let r2 = hamt.make({\n            hash:this.hamt._config.hash, keyEq:this.hamt._config.keyEq\n        }).beginMutation();\n        const iterator: Iterator<T&WithEquality> = this.hamt.values();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            if (predicate(curItem.value)) {\n                r1.set(curItem.value, curItem.value);\n            } else {\n                r2.set(curItem.value, curItem.value);\n            }\n            curItem = iterator.next();\n        }\n        return [new HashSet<T>(r1), new HashSet<T>(r2)];\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[HashSet.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.minBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[HashSet.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.minOn(this, getOrderable);\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[HashSet.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.maxBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[HashSet.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.maxOn(this, getOrderable);\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     HashSet.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return SeqHelpers.sumOn(this, getNumber);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:HashSet<T>)=>U): U {\n        return converter(this);\n    }\n\n    /**\n     * Convert to an ES6 Set.\n     * You must provide a function to convert the\n     * key to a string, number or boolean, because\n     * with other types equality is not correctly\n     * managed by JS.\n     * https://stackoverflow.com/questions/29759480/how-to-customize-object-equality-for-javascript-set\n     * https://esdiscuss.org/topic/maps-with-object-keys\n     *\n     *     HashSet.of(\"a\", \"b\").toJsSet(x=>x);\n     *     => new Set([\"a\", \"b\"])\n     */\n    toJsSet(keyConvert:(k:T)=>string): Set<string>;\n    toJsSet(keyConvert:(k:T)=>number): Set<number>;\n    toJsSet(keyConvert:(k:T)=>boolean): Set<boolean>;\n    toJsSet<K extends string|number|boolean>(keyConvert:(k:T)=>K): Set<K> {\n        return this.foldLeft(new Set<K>(), (sofar,cur) => sofar.add(keyConvert(cur)));\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: HashSet<T>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        const sz = this.hamt.size;\n        if (other === <EmptyHashSet<T>>emptyHashSet && sz === 0) {\n            // we could get that i'm not the empty map\n            // but my size is zero, after some filtering and such.\n            return true;\n        }\n        if (!other || !other.hamt) {\n            return false;\n        }\n        if (sz !== other.hamt.size) {\n            return false;\n        }\n        contractTrueEquality(\"HashSet.equals\", this, other);\n        const keys: Array<T & WithEquality> = Array.from<T & WithEquality>(this.hamt.keys());\n        for (let k of keys) {\n            const hisVal: T & WithEquality|null|undefined = other.hamt.get(k);\n            if (hisVal === undefined) {\n                return false;\n            }\n            if (!areEqual(k, hisVal)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return this.hamt.fold(\n            (acc: number, value: T & WithEquality, key: T & WithEquality) =>\n                getHashCode(key), 0);\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[HashSet.mkString]]\n     */\n    toString(): string {\n        return \"HashSet(\" +\n            this.hamt.fold(\n                (acc: string[], value: T, key: T) =>\n                    {acc.push(toStringHelper(key)); return acc;}, []).join(\", \")\n            + \")\";\n    }\n\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     HashSet.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     *\n     * (of course, order is not guaranteed)\n     */\n    mkString(separator: string): string {\n        return this.hamt.fold(\n            (acc: string[], value: T, key: T) =>\n                {acc.push(toStringHelper(key, {quoteStrings: false})); return acc;}, []).join(separator);\n    }\n}\n\nexport class MutableHashSet<T> extends HashSet<T> {\n    \n    protected constructor(h: any = hamt.make()) {\n        super(h)\n    }\n    \n    \n    /**\n     * The empty hashset.\n     * @param T the item type\n     */\n    static new<T>(): HashSet<T> {\n        return new MutableHashSet<T>();\n    }\n    \n    /**\n     * Build a hashset from any iterable, which means also\n     * an array for instance.\n     * @param T the item type\n     */\n    static ofIterable<T>(elts: Iterable<T & WithEquality>): HashSet<T> {\n        return new MutableHashSet<T>().addAll(elts);\n    }\n    \n    /**\n     * Build a hashset from a series of items (any number, as parameters)\n     * @param T the item type\n     */\n    static of<T>(...arr: Array<T & WithEquality>): HashSet<T> {\n        return MutableHashSet.ofIterable(arr);\n    }\n    \n    /**\n     * @inheritDoc\n     */\n    protected addAllArray(elts: Array<T&WithEquality>): HashSet<T> {\n        this.hamt = this.hamt.mutate((h:any) => {\n            if (elts.length > 0) {\n                contractTrueEquality(\"Error building a HashSet\", elts[0]);\n            }\n            for (const val of elts) {\n                h.set(val, val);\n            }\n        })\n        return this;\n    }\n    \n    /**\n     * @inheritDoc\n     */\n    add(elt:T & WithEquality):HashSet<T> {\n        this.hamt = this.hamt.set(elt,elt)\n        return this\n    }\n    \n    /**\n     * @inheritDoc\n     */\n    addAll(elts:Iterable<T & WithEquality>):HashSet<T> {\n        if (Array.isArray(elts)) {\n            return this.addAllArray(elts);\n        }\n        \n        this.hamt = this.hamt.mutate((h:any) => {\n            let checkedEq = false;\n            const iterator = elts[Symbol.iterator]();\n            let curItem = iterator.next();\n            if (!curItem.done && curItem.value && !checkedEq) {\n                contractTrueEquality(\"Error building a HashSet\", curItem.value);\n                checkedEq = true;\n            }\n            while (!curItem.done) {\n                h.set(curItem.value, curItem.value);\n                curItem = iterator.next();\n            }\n        })\n        return this;\n    }\n    \n    /**\n     * @inheritDoc\n     */\n    remove(elt: T&WithEquality): HashSet<T> {\n        this.hamt = this.hamt.remove(elt)\n        return this;\n    }\n    \n    /**\n     * @inheritDoc\n     */\n    removeAll(elts: Iterable<T&WithEquality>): HashSet<T> {\n        this.hamt = this.hamt.fold(\n          (acc: any, v: T&WithEquality, k: T&WithEquality) =>\n            HashSet.ofIterable<T&WithEquality>(elts).contains(k) ? acc : acc.set(k,k), hamt.empty)\n        \n        return this;\n    }\n}\n\n// we need to override the empty hashmap\n// because i don't know how to get the hash & keyset\n// functions for the keys without a key value to get\n// the functions from\nclass EmptyHashSet<T> extends HashSet<T> {\n\n    constructor() {\n        super({}); // we must override all the functions\n    }\n\n    add(elt: T & WithEquality): HashSet<T> {\n        contractTrueEquality(\"Error building a HashSet\", elt);\n        if (!elt) {\n            // special case if we get null for the first element...\n            // less optimized variant because we don't know\n            // if we should use '===' or 'equals'\n            return new HashSet<T>(hamt.make({\n                hash: (v: T & HasEquals) => getHashCode(v),\n                keyEq: (a: T & HasEquals, b: T & HasEquals) => areEqual(a, b)\n            }).set(elt,elt));\n        }\n        // if the element is not null, save a if later by finding\n        // out right now whether we should call equals or ===\n        if (hasEquals(elt)) {\n            return new HashSet<T>(hamt.make({\n                hash: (v: T & HasEquals) => v.hashCode(),\n                keyEq: (a: T & HasEquals, b: T & HasEquals) => a.equals(b)\n            }).set(elt,elt));\n        }\n        return new HashSet<T>(hamt.make().set(elt,elt));\n    }\n\n    addAll(elts: Iterable<T & WithEquality>): HashSet<T> {\n        const it = elts[Symbol.iterator]();\n        let curItem = it.next();\n        if (curItem.done) {\n            return <EmptyHashSet<T>>emptyHashSet;\n        }\n        return this.add(curItem.value).addAll({[Symbol.iterator]: () => it});\n    }\n\n    contains(elt: T & WithEquality): boolean {\n        return false;\n    }\n\n    map<U>(mapper:(v:T)=>U&WithEquality): HashSet<U> {\n        return <EmptyHashSet<U>>emptyHashSet;\n    }\n\n    mapOption<U>(mapper:(v:T)=>Option<U&WithEquality>): HashSet<U> {\n        return <EmptyHashSet<U>>emptyHashSet;\n    }\n\n    forEach(fun:(x:T)=>void): HashSet<T> {\n        return this;\n    }\n\n    filter<U extends T>(fn:(v:T)=>v is U): HashSet<U>;\n    filter(predicate:(v:T)=>boolean): HashSet<T>;\n    filter(predicate:(v:T)=>boolean): HashSet<T> {\n        return this;\n    }\n\n    findAny(predicate:(v:T)=>boolean): Option<T> {\n        return Option.none();\n    }\n\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        return zero;\n    }\n\n    toArray(sort?: SortOnSpec<T> | SortBySpec<T>): Array<T & WithEquality> {\n        return [];\n    }\n\n    toVector(): Vector<T & WithEquality> {\n        return Vector.empty<T&WithEquality>();\n    }\n\n    toLinkedList(): LinkedList<T & WithEquality> {\n        return LinkedList.empty<T&WithEquality>();\n    }\n\n    [Symbol.iterator](): Iterator<T> {\n        return { next: () => ({ done: true, value: <any>undefined }) };\n    }\n\n    length(): number {\n        return 0;\n    }\n\n    isEmpty(): boolean {\n        return true;\n    }\n\n    diff(elts: ISet<T&WithEquality>): HashSet<T> {\n        return this;\n    }\n\n    intersect(other: ISet<T&WithEquality>): HashSet<T> {\n        return this;\n    }\n\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return false;\n    }\n\n    groupBy<C>(classifier: (v:T)=>C&WithEquality): HashMap<C,HashSet<T>> {\n        return HashMap.empty();\n    }\n\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return true;\n    }\n\n    partition<U extends T>(predicate:(v:T)=>v is U): [HashSet<U>,HashSet<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [HashSet<T>,HashSet<T>];\n    partition<U extends T>(predicate:(v:T)=>boolean): [HashSet<U>,HashSet<any>] {\n        return [<any>this, <any>this];\n    }\n\n    remove(elt: T&WithEquality): HashSet<T> {\n        return this;\n    }\n\n    equals(other: HashSet<T>): boolean {\n        if (!other || !other.length) {\n            return false;\n        }\n        return <any>other === emptyHashSet || other.length() === 0;\n    }\n\n    hashCode(): number {\n        return 0;\n    }\n\n    toString(): string {\n        return \"HashSet()\";\n    }\n\n    mkString(separator: string): string {\n        return \"\";\n    }\n}\n\nconst emptyHashSet = new EmptyHashSet<any>();\n\nexport const hashSetOf = HashSet.of\nexport const hashSetOfIterable = HashSet.ofIterable\n", "import { inspect } from \"./Value.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * Represent a lazily evaluated value. You give a function which\n * will return a value; that function is only called when the value\n * is requested from Lazy, but it will be computed at most once.\n * If the value is requested again, the previously computed result\n * will be returned: Lazy is memoizing.\n */\nexport class Lazy<T> {\n\n    private thunk: (()=>T)|undefined;\n    private value: T|undefined;\n\n    private constructor(thunk: ()=>T) {\n        this.thunk = thunk;\n    }\n    \n    /**\n     * Build a Lazy from a computation returning a value.\n     * The computation will be called at most once.\n     */\n    static of<T>(thunk: ()=>T) {\n        return new Lazy(thunk);\n    }\n\n    /**\n     * Evaluate the value, cache its value, and return it, or return the\n     * previously computed value.\n     */\n    get(): T {\n        if (this.thunk) {\n            this.value = this.thunk();\n            this.thunk = undefined;\n        }\n        return <T>this.value;\n    }\n\n    /**\n     * Returns true if the computation underlying this Lazy was already\n     * performed, false otherwise.\n     */\n    isEvaluated(): boolean {\n        return this.thunk === undefined;\n    }\n\n    /**\n     * Return a new lazy where the element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(mapper:(v:T)=>U): Lazy<U> {\n        return new Lazy(()=>mapper(this.get()));\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return this.isEvaluated() ?\n            `Lazy(${toStringHelper(this.get())})` :\n            \"Lazy(?)\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     * Most of the time should be the same as toString()\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n", "/**\n * A lazy, potentially infinite, sequence of values.\n *\n * The code is organized through the class [[EmptyStream]] (empty list\n * or tail), the class [[ConsStream]] (list value and lazy pointer to next),\n * and the type alias [[Stream]] (empty or cons).\n *\n * Finally, \"static\" functions on Option are arranged in the class\n * [[StreamStatic]] and are accessed through the global constant Stream.\n *\n * Use take() for instance to reduce an infinite stream to a finite one.\n *\n * Examples:\n *\n *     Stream.iterate(1, x => x*2).take(4);\n *     => Stream.of(1,2,4,8)\n *\n *     Stream.continually(Math.random).take(2);\n *     => Stream.of(0.49884723907769635, 0.3226548779864311)\n */\nimport { Option, Some } from \"./Option.js\"\nimport { Vector } from \"./Vector.js\"\nimport {\n  areEqual, getHashCode, Ordering, ToOrderable, WithEquality\n} from \"./Comparison.js\"\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { inspect } from \"./Value.js\"\nimport { HashMap } from \"./HashMap.js\"\nimport { HashSet } from \"./HashSet.js\"\nimport { IterableArray, Seq } from \"./Seq.js\"\nimport { Lazy } from \"./Lazy.js\"\nimport { LinkedList } from \"./LinkedList.js\"\nimport * as SeqHelpers from \"./SeqHelpers.js\"\nimport { ToString } from \"./ToString.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * A Stream is either [[EmptyStream]] or [[ConsStream]]\n * \"static methods\" available through [[StreamStatic]]\n * @param T the item type\n */\nexport type Stream<T extends ToString> = EmptyStream<T> | ConsStream<T>;\n\n/**\n * Holds the \"static methods\" for [[Stream]]\n */\nexport class StreamStatic {\n    /**\n     * The empty stream\n     */\n    empty<T>(): Stream<T> {\n        return <EmptyStream<T>>emptyStream;\n    }\n\n    /**\n     * Create a Stream with the elements you give.\n     */\n    of<T>(elt:T, ...elts:T[]): ConsStream<T>;\n    of<T>(...elts:T[]): Stream<T>;\n    of<T>(...elts:T[]): Stream<T> {\n        return Stream.ofIterable(elts);\n    }\n\n    /**\n     * Build a stream from any iterable, which means also\n     * an array for instance.\n     * @param T the item type\n     */\n    ofIterable<T>(elts: Iterable<T>): Stream<T> {\n        // need to eagerly copy the iterable. the reason\n        // is, if we would build the stream based on the iterator\n        // in the iterable, Stream.tail() would do it.next().\n        // but it.next() modifies the iterator (mutability),\n        // and you would end up with getting two different tails\n        // for the same stream if you call .tail() twice in a row\n        if (Array.isArray(elts)) {\n            return Stream.ofArray(elts);\n        }\n        return Stream.ofArray(Array.from(elts));\n    }\n\n    /**\n     * Curried type guard for Stream.\n     * Sometimes needed also due to\n     * https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Stream.of(1), Stream.empty<number>())\n     *         .filter(Stream.isEmpty)\n     *     => Vector.of(Stream.empty<number>())\n     */\n    isEmpty<T>(s: Stream<T>): s is EmptyStream<T> {\n        return s.isEmpty();\n    }\n\n    /**\n     * Curried type guard for Stream.\n     * Sometimes needed also due to\n     * https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Stream.of(1), Stream.empty<number>())\n     *         .filter(Stream.isNotEmpty)\n     *         .map(s => s.head().get()+1)\n     *     => Vector.of(2)\n     */\n    isNotEmpty<T>(s: Stream<T>): s is ConsStream<T> {\n        return !s.isEmpty();\n    }\n\n    /**\n     * @hidden\n     */\n    private ofArray<T>(elts: Array<T>): Stream<T> {\n        if (elts.length === 0) {\n            return <EmptyStream<T>>emptyStream;\n        }\n        const head = elts[0];\n        return new ConsStream(head, Lazy.of(() => Stream.ofArray(elts.slice(1))));\n    }\n\n    /**\n     * Build an infinite stream from a seed and a transformation function.\n     *\n     *     Stream.iterate(1, x => x*2).take(4);\n     *     => Stream.of(1,2,4,8)\n     */\n    iterate<T>(seed:T, fn: (v:T)=>T): ConsStream<T> {\n        return new ConsStream(seed, Lazy.of(()=>Stream.iterate(fn(seed), fn)));\n    }\n\n    /**\n     * Build an infinite stream by calling repeatedly a function.\n     *\n     *     Stream.continually(() => 1).take(4);\n     *     => Stream.of(1,1,1,1)\n     *\n     *     Stream.continually(Math.random).take(2);\n     *     => Stream.of(0.49884723907769635, 0.3226548779864311)\n     */\n    continually<T>(fn: ()=>T): ConsStream<T> {\n        return new ConsStream(fn(), Lazy.of(() => Stream.continually(fn)));\n    }\n\n    /**\n     * Dual to the foldRight function. Build a collection from a seed.\n     * Takes a starting element and a function.\n     * It applies the function on the starting element; if the\n     * function returns None, it stops building the list, if it\n     * returns Some of a pair, it adds the first element to the result\n     * and takes the second element as a seed to keep going.\n     *\n     *     Stream.unfoldRight(\n     *          10, x=>Option.of(x)\n     *              .filter(x => x!==0)\n     *              .map<[number,number]>(x => [x,x-1]));\n     *     => Stream.of(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)\n     */\n    unfoldRight<T,U>(seed: T, fn: (x:T)=>Option<[U,T]>): Stream<U> {\n        let nextVal = fn(seed);\n        if (nextVal.isNone()) {\n            return <EmptyStream<U>>emptyStream;\n        }\n        return new ConsStream(\n            nextVal.get()[0],\n            Lazy.of(()=>Stream.unfoldRight(nextVal.getOrThrow()[1], fn)));\n    }\n\n    /**\n     * Combine any number of iterables you give in as\n     * parameters to produce a new collection which combines all,\n     * in tuples. For instance:\n     *\n     *     Stream.zip(Stream.of(1,2,3), [\"a\",\"b\",\"c\"], LinkedList.of(8,9,10))\n     *     => Stream.of([1,\"a\",8], [2,\"b\",9], [3,\"c\",10])\n     *\n     * The result collection will have the length of the shorter\n     * of the input iterables. Extra elements will be discarded.\n     *\n     * Also see the non-static version [[ConsStream.zip]], which only combines\n     * two collections.\n     * @param A A is the type of the tuple that'll be generated\n     *          (`[number,string,number]` for the code sample)\n     */\n    zip<A extends any[]>(...iterables: IterableArray<A>): Stream<A> {\n        const iterators: Iterator<A>[] = iterables.map(i => i[Symbol.iterator]());\n        let items = iterators.map(i => i.next());\n\n        if (items.some(item => item.done)) {\n            return <EmptyStream<A>>emptyStream;\n        }\n\n        return new ConsStream(items.map(item => item.value) as A,\n                              Lazy.of(() => Stream.zip<A>(...\n                                  <any>iterators.map(i=>({ [Symbol.iterator]: ()=>i})))));\n    }\n\n}\n\n/**\n * The Stream constant allows to call the Stream \"static\" methods\n */\nexport const Stream = new StreamStatic();\n\n/**\n * EmptyStream is the empty stream; every non-empty\n * stream also has a pointer to an empty stream\n * after its last element.\n * \"static methods\" available through [[StreamStatic]]\n * @param T the item type\n */\nexport class EmptyStream<T extends ToString> implements Seq<T> {\n\n    /**\n     * @hidden\n     */\n    readonly className: \"EmptyStream\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * Implementation of the Iterator interface.\n     */\n    [Symbol.iterator](): Iterator<T> {\n        return {\n            next(): IteratorResult<T> {\n                return {\n                    done: true,\n                    value: <any>undefined\n                };\n            }\n        }\n    }\n\n    /**\n     * View this Some a as Stream. Useful to help typescript type\n     * inference sometimes.\n     */\n    asStream(): Stream<T> {\n        return this;\n    }\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return SeqHelpers.seqHasTrueEquality<T>(this);\n    }\n    \n    \n    pluck<K extends keyof T>(key:K): Seq<T[K]> {\n        return SeqHelpers.pluck(this,key) // Stream.of(...this.ma);\n    }\n\n    \n    \n    /**\n     * Get the length of the collection.\n     */\n    length(): number {\n        return 0;\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * true if the collection is empty, false otherwise.\n     */\n    isEmpty(): this is EmptyStream<T> {\n        return true;\n    }\n\n    /**\n     * Get the first value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    head(): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Get all the elements in the collection but the first one.\n     * If the collection is empty, return None.\n     */\n    tail(): Option<Stream<T>> {\n        return Option.none<Stream<T>>();\n    }\n\n    /**\n     * Get the last value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    last(): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Retrieve the element at index idx.\n     * Returns an option because the collection may\n     * contain less elements than the index.\n     *\n     * Careful this is going to have poor performance\n     * on Stream, which is not a good data structure\n     * for random access!\n     */\n    get(idx: number): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Search for an item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    find(predicate:(v:T)=>boolean): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Returns true if the item is in the collection,\n     * false otherwise.\n     */\n    contains(v:T&WithEquality): boolean {\n        return false;\n    }\n\n    /**\n     * Return a new stream keeping only the first n elements\n     * from this stream.\n     */\n    take(n: number): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate.\n     */\n    takeWhile(predicate: (x:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate,\n     * but starting from the end of the collection.\n     *\n     *     Stream.of(1,2,3,4).takeRightWhile(x => x > 2)\n     *     => Stream.of(3,4)\n     */\n    takeRightWhile(predicate:(x:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with the first\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    drop(n:number): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the first elements\n     * until one element fails the predicate. All elements\n     * after that point are retained.\n     */\n    dropWhile(predicate:(x:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with the last\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    dropRight(n:number): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection, discarding the last elements\n     * until one element fails the predicate. All elements\n     * before that point are retained.\n     */\n    dropRightWhile(predicate:(x:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     Stream.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return zero;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldLeft(\"!\", (xs,x) => x+xs);\n     *     => \"cba!\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        return zero;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldRight(\"!\", (x,xs) => xs+x);\n     *     => \"!cba\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return zero;\n    }\n\n    /**\n     * Combine this collection with the collection you give in\n     * parameter to produce a new collection which combines both,\n     * in pairs. For instance:\n     *\n     *     Stream.of(1,2,3).zip([\"a\",\"b\",\"c\"])\n     *     => Stream.of([1,\"a\"], [2,\"b\"], [3,\"c\"])\n     *\n     * The result collection will have the length of the shorter\n     * of both collections. Extra elements will be discarded.\n     *\n     * Also see [[StreamStatic.zip]] (static version which can more than two\n     * iterables)\n     */\n    zip<U>(other: Iterable<U>): Stream<[T,U]> {\n        return <EmptyStream<[T,U]>>emptyStream;\n    }\n\n    /**\n     * Combine this collection with the index of the elements\n     * in it. Handy if you need the index when you map on\n     * the collection for instance:\n     *\n     *     Stream.of(\"a\",\"b\").zipWithIndex().map(([v,idx]) => v+idx);\n     *     => Stream.of(\"a0\", \"b1\")\n     */\n    zipWithIndex(): Stream<[T,number]> {\n        return <Stream<[T,number]>>SeqHelpers.zipWithIndex<T>(this);\n    }\n\n    /**\n     * Reverse the collection. For instance:\n     *\n     *     Stream.of(1,2,3).reverse();\n     *     => Stream.of(3,2,1)\n     */\n    reverse(): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Takes a predicate; returns a pair of collections.\n     * The first one is the longest prefix of this collection\n     * which satisfies the predicate, and the second collection\n     * is the remainder of the collection.\n     *\n     *    Stream.of(1,2,3,4,5,6).span(x => x <3)\n     *    => [Stream.of(1,2), Stream.of(3,4,5,6)]\n     */\n    span(predicate:(x:T)=>boolean): [Stream<T>,Stream<T>] {\n        return [this, this];\n    }\n\n    /**\n     * Split the collection at a specific index.\n     *\n     *     Stream.of(1,2,3,4,5).splitAt(3)\n     *     => [Stream.of(1,2,3), Stream.of(4,5)]\n     */\n    splitAt(index:number): [Stream<T>,Stream<T>] {\n        return [this, this];\n    }\n\n    /**\n     * Returns a pair of two collections; the first one\n     * will only contain the items from this collection for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     Stream.of(1,2,3,4).partition(x => x%2===0)\n     *     => [Stream.of(2,4),Stream.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [Stream<U>,Stream<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [Stream<T>,Stream<T>];\n    partition<U extends T>(predicate:(v:T)=>boolean): [Stream<U>,Stream<any>] {\n        return [Stream.empty<U>(), Stream.empty<T>()];\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[ConsStream.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C & WithEquality): HashMap<C,Stream<T>> {\n        return HashMap.empty<C,Stream<T>>();\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[ConsStream.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Randomly reorder the elements of the collection.\n     */\n    shuffle(): Stream<T> {\n        return Stream.ofIterable(SeqHelpers.shuffle(this.toArray()));\n    }\n\n    /**\n     * Append an element at the end of this Stream.\n     */\n    append(v:T): Stream<T> {\n        return Stream.of(v);\n    }\n\n    /*\n     * Append multiple elements at the end of this Stream.\n     */\n    appendAll(elts:Iterable<T>): Stream<T> {\n        return Stream.ofIterable(elts);\n    }\n\n    /**\n     * Remove multiple elements from a stream\n     *\n     *     Stream.of(1,2,3,4,3,2,1).removeAll([2,4])\n     *     => Stream.of(1,3,3,1)\n     */\n    removeAll(elts:Iterable<T&WithEquality>): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Removes the first element matching the predicate\n     * (use [[ConsStream.filter]] to remove all elements matching a predicate)\n     */\n    removeFirst(predicate: (x:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /*\n     * Append another Stream at the end of this Stream.\n     *\n     * There is no function taking a javascript iterator,\n     * because iterators are stateful and Streams lazy.\n     * If we would create two Streams working on the same iterator,\n     * the streams would interact with one another.\n     * It also breaks the cycle() function.\n     */\n    appendStream(elts:Stream<T>): Stream<T> {\n        return elts;\n    }\n\n    /**\n     * Prepend an element at the beginning of the collection.\n     */\n    prepend(elt: T): Stream<T> {\n        return Stream.of(elt);\n    }\n\n    /**\n     * Prepend multiple elements at the beginning of the collection.\n     */\n    prependAll(elt: Iterable<T>): Stream<T> {\n        return Stream.ofIterable(elt);\n    }\n\n    /**\n     * Repeat infinitely this Stream.\n     * For instance:\n     *\n     *     Stream.of(1,2,3).cycle().take(8)\n     *     => Stream.of(1,2,3,1,2,3,1,2)\n     */\n    cycle(): Stream<T> {\n        return <EmptyStream<T>>emptyStream;\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(mapper:(v:T)=>U): Stream<U> {\n        return <EmptyStream<U>>emptyStream;\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     Stream.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => Stream.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U>): Stream<U> {\n        return <EmptyStream<U>>emptyStream;\n    }\n\n    /**\n     * Calls the function you give for each item in the collection,\n     * your function returns a collection, all the collections are\n     * concatenated.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper:(v:T)=>Stream<U>): Stream<U> {\n        return <EmptyStream<U>>emptyStream;\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return true;\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return false;\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(predicate:(v:T)=>v is U): Stream<U>;\n    filter(predicate:(v:T)=>boolean): Stream<T>;\n    filter(predicate:(v:T)=>boolean): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Returns a new collection with elements\n     * sorted according to the comparator you give.\n     *\n     *     const activityOrder = [\"Writer\", \"Actor\", \"Director\"];\n     *     Stream.of({name:\"George\", activity: \"Director\"}, {name:\"Robert\",\n     * activity: \"Actor\"})\n     *         .sortBy((p1,p2) => activityOrder.indexOf(p1.activity) -\n     * activityOrder.indexOf(p2.activity));\n     *     => Stream.of({\"name\":\"Robert\",\"activity\":\"Actor\"},\n     * {\"name\":\"George\",\"activity\":\"Director\"})\n     *\n     * also see [[ConsStream.sortOn]]\n     */\n    sortBy(compare: (v1:T,v2:T)=>Ordering): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Give a function associating a number or a string with\n     * elements from the collection, and the elements\n     * are sorted according to that value.\n     *\n     *     Stream.of({a:3,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a)\n     *     => Stream.of({a:1,b:\"test\"},{a:2,b:\"a\"},{a:3,b:\"b\"})\n     *\n     * You can also sort by multiple criteria, and request 'descending'\n     * sorting:\n     *\n     *     Stream.of({a:1,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a,{desc:elt=>elt.b})\n     *     => Stream.of({a:1,b:\"test\"},{a:1,b:\"b\"},{a:2,b:\"a\"})\n     *\n     * also see [[ConsStream.sortBy]]\n     */\n    sortOn(...getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Remove duplicate items; elements are mapped to keys, those\n     * get compared.\n     *\n     *     Stream.of(1,1,2,3,2,3,1).distinctBy(x => x);\n     *     => Stream.of(1,2,3)\n     */\n    distinctBy<U>(keyExtractor: (x:T)=>U&WithEquality): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fn: (v:T)=>void): Stream<T> {\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsStream.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Stream.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).minOn(x=>x.age)\n     *     => Option.of({name:\"Paula\", age:6})\n     *\n     * also see [[ConsStream.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsStream.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Stream.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).maxOn(x=>x.age)\n     *     => Option.of({name:\"Joe\", age:12})\n     *\n     * also see [[ConsStream.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return Option.none<T>();\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     Stream.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return 0;\n    }\n\n    /**\n     * Slides a window of a specific size over the sequence.\n     * Returns a lazy stream so memory use is not prohibitive.\n     *\n     *     Stream.of(1,2,3,4,5,6,7,8).sliding(3)\n     *     => Stream.of(Stream.of(1,2,3), Stream.of(4,5,6), Stream.of(7,8))\n     */\n    sliding(count:number): Stream<Stream<T>> {\n        return <Stream<Stream<T>>>SeqHelpers.sliding(this, count);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     *\n     *     Stream.of(1,2,3).scanLeft(0, (soFar,cur)=>soFar+cur)\n     *     => Stream.of(0,1,3,6)\n     */\n    scanLeft<U>(init:U, fn:(soFar:U,cur:T)=>U): Stream<U> {\n        return new ConsStream(init, Lazy.of(()=><EmptyStream<U>>emptyStream));\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The first element of the result is the final cumulative result.\n     *\n     *     Stream.of(1,2,3).scanRight(0, (cur,soFar)=>soFar+cur)\n     *     => Stream.of(6,5,3,0)\n     */\n    scanRight<U>(init:U, fn:(cur:T,soFar:U)=>U): Stream<U> {\n        return new ConsStream(init, Lazy.of(()=><EmptyStream<U>>emptyStream));\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     Vector.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     */\n    mkString(separator: string): string {\n        return \"\";\n    }\n\n    /**\n     * Convert to array.\n     * Don't do it on an infinite stream!\n     */\n    toArray(): T[] {\n        return [];\n    }\n\n    /**\n     * Convert to vector.\n     * Don't do it on an infinite stream!\n     */\n    toVector(): Vector<T> {\n        return Vector.empty<T>();\n    }\n\n    /**\n     * Convert this collection to a map. You give a function which\n     * for each element in the collection returns a pair. The\n     * key of the pair will be used as a key in the map, the value,\n     * as a value in the map. If several values get the same key,\n     * entries will be lost.\n     *\n     *     Stream.of(1,2,3).toMap(x=>[x.toString(), x])\n     *     => HashMap.of([\"1\",1], [\"2\",2], [\"3\",3])\n     */\n    toMap<K,V>(converter:(x:T)=>[K & WithEquality,V]): HashMap<K,V> {\n        return HashMap.empty<K,V>();\n    }\n\n    /**\n     * Convert this collection to a set. Since the elements of the\n     * Seq may not support equality, you must pass a function returning\n     * a value supporting equality.\n     *\n     *     Stream.of(1,2,3,3,4).toSet(x=>x)\n     *     => HashSet.of(1,2,3,4)\n     */\n    toSet<K>(converter:(x:T)=>K&WithEquality): HashSet<K> {\n        return HashSet.empty<K>();\n    }\n\n    /**\n     * Convert this collection to a list.\n     */\n    toLinkedList(): LinkedList<T> {\n        return LinkedList.ofIterable(this);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:Stream<T>)=>U): U {\n        return converter(this);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Stream<T&WithEquality>): boolean {\n        if (!other) {\n            return false;\n        }\n        return other.isEmpty();\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return 1;\n    }\n\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[ConsStream.mkString]]\n     */\n    toString(): string {\n        return \"[]\";\n    }\n}\n\n/**\n * ConsStream holds a value and a lazy pointer to a next element,\n * which could be [[ConsStream]] or [[EmptyStream]].\n * A ConsStream is basically a non-empty stream. It will\n * contain at least one element.\n * \"static methods\" available through [[StreamStatic]]\n * @param T the item type\n */\nexport class ConsStream<T> implements Seq<T> {\n\n    /**\n     * @hidden\n     */\n    readonly className: \"ConsStream\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * @hidden\n     */\n    public constructor(protected value: T, protected _tail: Lazy<Stream<T>>) {}\n\n    /**\n     * Implementation of the Iterator interface.\n     */\n    [Symbol.iterator](): Iterator<T> {\n        let item: Stream<T> = this;\n        return {\n            next(): IteratorResult<T> {\n                if (item.isEmpty()) {\n                    return { done: true, value: <any>undefined };\n                }\n                const value = item.head().get();\n                item = item.tail().get();\n                return {done: false, value};\n            }\n        };\n    }\n\n    /**\n     * View this Some a as Stream. Useful to help typescript type\n     * inference sometimes.\n     */\n    asStream(): Stream<T> {\n        return this;\n    }\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return SeqHelpers.seqHasTrueEquality<T>(this);\n    }\n\n    /**\n     * Get the length of the collection.\n     */\n    length(): number {\n        return this.foldLeft(0, (n, ignored) => n + 1);\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return this._tail.get().isEmpty() ?\n            Option.of(this.value) :\n            Option.none<T>();\n    }\n\n    /**\n     * true if the collection is empty, false otherwise.\n     */\n    isEmpty(): this is EmptyStream<T> {\n        return false;\n    }\n\n    /**\n     * Get the first value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    head(): Some<T> {\n        return Option.some(this.value);\n    }\n\n    /**\n     * Get all the elements in the collection but the first one.\n     * If the collection is empty, return None.\n     */\n    tail(): Some<Stream<T>> {\n        return Option.some(this._tail.get());\n    }\n\n    /**\n     * Get the last value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    last(): Some<T> {\n        let curItem: Stream<T> = this;\n        while (true) {\n            const item = (<ConsStream<T>>curItem).value;\n            curItem = (<ConsStream<T>>curItem)._tail.get();\n            if (curItem.isEmpty()) {\n                return Option.some(item);\n            }\n        }\n    }\n\n    /**\n     * Retrieve the element at index idx.\n     * Returns an option because the collection may\n     * contain less elements than the index.\n     *\n     * Careful this is going to have poor performance\n     * on Stream, which is not a good data structure\n     * for random access!\n     */\n    get(idx: number): Option<T> {\n        let curItem: Stream<T> = this;\n        let i=0;\n        while (!curItem.isEmpty()) {\n            if (i === idx) {\n                const item = curItem.value;\n                return Option.of(item);\n            }\n            curItem = curItem._tail.get();\n            ++i;\n        }\n        return Option.none<T>();\n    }\n\n    /**\n     * Search for an item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    find(predicate:(v:T)=>boolean): Option<T> {\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty()) {\n            const item = curItem.value;\n            if (predicate(item)) {\n                return Option.of(item);\n            }\n            curItem = curItem._tail.get();\n        }\n        return Option.none<T>();\n    }\n\n    /**\n     * Returns true if the item is in the collection,\n     * false otherwise.\n     */\n    contains(v:T&WithEquality): boolean {\n        return this.find(x => areEqual(x,v)).isSome();\n    }\n\n    /**\n     * Return a new stream keeping only the first n elements\n     * from this stream.\n     */\n    take(n: number): Stream<T> {\n        if (n < 1) {\n            return <EmptyStream<T>>emptyStream;\n        }\n        return new ConsStream(this.value,\n                              Lazy.of(() => this._tail.get().take(n-1)));\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate.\n     */\n    takeWhile(predicate: (x:T)=>boolean): Stream<T> {\n        if (!predicate(this.value)) {\n            return <EmptyStream<T>>emptyStream;\n        }\n        return new ConsStream(this.value,\n                              Lazy.of(() => this._tail.get().takeWhile(predicate)));\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate,\n     * but starting from the end of the collection.\n     *\n     *     Stream.of(1,2,3,4).takeRightWhile(x => x > 2)\n     *     => Stream.of(3,4)\n     */\n    takeRightWhile(predicate:(x:T)=>boolean): Stream<T> {\n        return this.reverse().takeWhile(predicate).reverse();\n    }\n\n    /**\n     * Returns a new collection with the first\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    drop(n:number): Stream<T> {\n        let i = n;\n        let curItem: Stream<T> = this;\n        while (i-- > 0 && !curItem.isEmpty()) {\n            curItem = curItem._tail.get();\n        }\n        return curItem;\n    }\n\n    /**\n     * Returns a new collection, discarding the first elements\n     * until one element fails the predicate. All elements\n     * after that point are retained.\n     */\n    dropWhile(predicate:(x:T)=>boolean): Stream<T> {\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty() && predicate(curItem.value)) {\n            curItem = curItem._tail.get();\n        }\n        return curItem;\n    }\n\n    /**\n     * Returns a new collection with the last\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    dropRight(n:number): Stream<T> {\n        // going twice through the list...\n        const length = this.length();\n        return this.take(length-n);\n    }\n\n    /**\n     * Returns a new collection, discarding the last elements\n     * until one element fails the predicate. All elements\n     * before that point are retained.\n     */\n    dropRightWhile(predicate:(x:T)=>boolean): Stream<T> {\n        return this.reverse().dropWhile(predicate).reverse();\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     Stream.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return this.foldLeft(zero, fn);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldLeft(\"!\", (xs,x) => x+xs);\n     *     => \"cba!\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero: U, fn:(soFar:U,cur:T)=>U): U {\n        let r = zero;\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty()) {\n            r = fn(r, curItem.value);\n            curItem = curItem._tail.get();\n        }\n        return r;\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldRight(\"!\", (x,xs) => xs+x);\n     *     => \"!cba\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return this.reverse().foldLeft(zero, (xs,x)=>fn(x,xs));\n    }\n\n    /**\n     * Combine this collection with the collection you give in\n     * parameter to produce a new collection which combines both,\n     * in pairs. For instance:\n     *\n     *     Stream.of(1,2,3).zip([\"a\",\"b\",\"c\"])\n     *     => Stream.of([1,\"a\"], [2,\"b\"], [3,\"c\"])\n     *\n     * The result collection will have the length of the shorter\n     * of both collections. Extra elements will be discarded.\n     *\n     * Also see [[StreamStatic.zip]] (static version which can more than two\n     * iterables)\n     */\n    zip<U>(other: Iterable<U>): Stream<[T,U]> {\n        const otherIterator = other[Symbol.iterator]();\n        let otherCurItem = otherIterator.next();\n\n        if (this.isEmpty() || otherCurItem.done) {\n            return <EmptyStream<[T,U]>>emptyStream;\n        }\n\n        return new ConsStream([this.value, otherCurItem.value] as [T,U],\n                              Lazy.of(() => this._tail.get().zip(\n                                  { [Symbol.iterator]: ()=>otherIterator})));\n    }\n\n    /**\n     * Combine this collection with the index of the elements\n     * in it. Handy if you need the index when you map on\n     * the collection for instance:\n     *\n     *     Stream.of(\"a\",\"b\").zipWithIndex().map(([v,idx]) => v+idx);\n     *     => Stream.of(\"a0\", \"b1\")\n     */\n    zipWithIndex(): Stream<[T,number]> {\n        return <Stream<[T,number]>>SeqHelpers.zipWithIndex<T>(this);\n    }\n\n    /**\n     * Reverse the collection. For instance:\n     *\n     *     Stream.of(1,2,3).reverse();\n     *     => Stream.of(3,2,1)\n     */\n    reverse(): Stream<T> {\n        return this.foldLeft(<Stream<T>><EmptyStream<T>>emptyStream, (xs,x) => xs.prepend(x));\n    }\n\n    /**\n     * Takes a predicate; returns a pair of collections.\n     * The first one is the longest prefix of this collection\n     * which satisfies the predicate, and the second collection\n     * is the remainder of the collection.\n     *\n     *    Stream.of(1,2,3,4,5,6).span(x => x <3)\n     *    => [Stream.of(1,2), Stream.of(3,4,5,6)]\n     */\n    span(predicate:(x:T)=>boolean): [Stream<T>,Stream<T>] {\n        return [this.takeWhile(predicate), this.dropWhile(predicate)];\n    }\n\n    /**\n     * Split the collection at a specific index.\n     *\n     *     Stream.of(1,2,3,4,5).splitAt(3)\n     *     => [Stream.of(1,2,3), Stream.of(4,5)]\n     */\n    splitAt(index:number): [Stream<T>,Stream<T>] {\n        return [this.take(index), this.drop(index)];\n    }\n\n    /**\n     * Returns a pair of two collections; the first one\n     * will only contain the items from this collection for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     Stream.of(1,2,3,4).partition(x => x%2===0)\n     *     => [Stream.of(2,4),Stream.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [Stream<U>,Stream<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [Stream<T>,Stream<T>];\n    partition(predicate:(v:T)=>boolean): [Stream<T>,Stream<T>] {\n        // goes twice over the list, but since we want a lazy behavior...\n        return [this.filter(predicate), this.filter(x => !predicate(x))];\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[ConsStream.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C & WithEquality): HashMap<C,Stream<T>> {\n        return this.foldLeft(\n            HashMap.empty<C,Stream<T>>(),\n            (acc: HashMap<C,Stream<T>>, v:T) =>\n                acc.putWithMerge(\n                    classifier(v), Stream.of(v),\n                    (v1:Stream<T>,v2:Stream<T>)=>v1.appendStream(v2)));\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[ConsStream.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Randomly reorder the elements of the collection.\n     */\n    shuffle(): Stream<T> {\n        return Stream.ofIterable(SeqHelpers.shuffle(this.toArray()));\n    }\n\n    /**\n     * Append an element at the end of this Stream.\n     */\n    append(v:T): Stream<T> {\n        const tail = this._tail.get();\n        return new ConsStream(\n            this.value,\n            Lazy.of(()=>tail.append(v)));\n    }\n\n    /*\n     * Append multiple elements at the end of this Stream.\n     */\n    appendAll(elts:Iterable<T>): Stream<T> {\n        return this.appendStream(Stream.ofIterable(elts));\n    }\n\n    /**\n     * Remove multiple elements from a stream\n     *\n     *     Stream.of(1,2,3,4,3,2,1).removeAll([2,4])\n     *     => Stream.of(1,3,3,1)\n     */\n    removeAll(elts:Iterable<T&WithEquality>): Stream<T> {\n        return <Stream<T>><any>SeqHelpers.removeAll(this, elts);\n    }\n\n    /**\n     * Removes the first element matching the predicate\n     * (use [[ConsStream.filter]] to remove all elements matching a predicate)\n     */\n    removeFirst(predicate: (x:T)=>boolean): Stream<T> {\n        const tail = this._tail.get();\n        return predicate(this.value) ?\n            tail :\n            new ConsStream(this.value,\n                           Lazy.of(()=>tail.removeFirst(predicate)));\n    }\n\n    /*\n     * Append another Stream at the end of this Stream.\n     *\n     * There is no function taking a javascript iterator,\n     * because iterators are stateful and Streams lazy.\n     * If we would create two Streams working on the same iterator,\n     * the streams would interact with one another.\n     * It also breaks the cycle() function.\n     */\n    appendStream(elts:Stream<T>): Stream<T> {\n        const tail = this._tail.get();\n        return new ConsStream(\n            this.value,\n            Lazy.of(() => tail.appendStream(elts)));\n    }\n\n    /**\n     * Prepend an element at the beginning of the collection.\n     */\n    prepend(elt: T): Stream<T> {\n        return new ConsStream(\n            elt,\n            Lazy.of(()=>this));\n    }\n\n    /**\n     * Prepend multiple elements at the beginning of the collection.\n     */\n    prependAll(elts: Iterable<T>): Stream<T> {\n        return Stream.ofIterable(elts).appendAll(this);\n    }\n\n    /**\n     * Repeat infinitely this Stream.\n     * For instance:\n     *\n     *     Stream.of(1,2,3).cycle().take(8)\n     *     => Stream.of(1,2,3,1,2,3,1,2)\n     */\n    cycle(): Stream<T> {\n        return this._cycle(this);\n    }\n\n    private _cycle(toRepeat: Stream<T>): Stream<T> {\n        const tail = this._tail.get();\n        return new ConsStream(\n            this.value,\n            Lazy.of(() => tail.isEmpty() ? toRepeat.cycle() : tail._cycle(toRepeat)));\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(mapper:(v:T)=>U): Stream<U> {\n        return new ConsStream(mapper(this.value),\n                              Lazy.of(() => this._tail.get().map(mapper)));\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     Stream.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => Stream.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U>): Stream<U> {\n        const mapped = mapper(this.value);\n        return mapped.isSome() ?\n            new ConsStream(mapped.get(),\n                           Lazy.of(() => this._tail.get().mapOption(mapper))) :\n            this._tail.get().mapOption(mapper);\n    }\n\n    /**\n     * Calls the function you give for each item in the collection,\n     * your function returns a collection, all the collections are\n     * concatenated.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper:(v:T)=>Stream<U>): Stream<U> {\n        return mapper(this.value).appendStream(\n            this._tail.get().flatMap(mapper));\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return this.find(x => !predicate(x)).isNone();\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return this.find(predicate).isSome();\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(predicate:(v:T)=>v is U): Stream<U>;\n    filter(predicate:(v:T)=>boolean): Stream<T>;\n    filter(predicate:(v:T)=>boolean): Stream<T> {\n        return predicate(this.value) ?\n            new ConsStream(this.value,\n                           Lazy.of(() => this._tail.get().filter(predicate))) :\n            this._tail.get().filter(predicate);\n    }\n\n    /**\n     * Returns a new collection with elements\n     * sorted according to the comparator you give.\n     *\n     *     const activityOrder = [\"Writer\", \"Actor\", \"Director\"];\n     *     Stream.of({name:\"George\", activity: \"Director\"}, {name:\"Robert\",\n     * activity: \"Actor\"})\n     *         .sortBy((p1,p2) => activityOrder.indexOf(p1.activity) -\n     * activityOrder.indexOf(p2.activity));\n     *     => Stream.of({\"name\":\"Robert\",\"activity\":\"Actor\"},\n     * {\"name\":\"George\",\"activity\":\"Director\"})\n     *\n     * also see [[ConsStream.sortOn]]\n     */\n    sortBy(compare: (v1:T,v2:T)=>Ordering): Stream<T> {\n        return Stream.ofIterable<T>(this.toArray().sort(compare));\n    }\n\n    /**\n     * Give a function associating a number or a string with\n     * elements from the collection, and the elements\n     * are sorted according to that value.\n     *\n     *     Stream.of({a:3,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a)\n     *     => Stream.of({a:1,b:\"test\"},{a:2,b:\"a\"},{a:3,b:\"b\"})\n     *\n     * You can also sort by multiple criteria, and request 'descending'\n     * sorting:\n     *\n     *     Stream.of({a:1,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a,{desc:elt=>elt.b})\n     *     => Stream.of({a:1,b:\"test\"},{a:1,b:\"b\"},{a:2,b:\"a\"})\n     *\n     * also see [[ConsStream.sortBy]]\n     */\n    sortOn(...getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): Stream<T> {\n        return <Stream<T>>SeqHelpers.sortOn<T>(this, getKeys);\n    }\n\n    /**\n     * Remove duplicate items; elements are mapped to keys, those\n     * get compared.\n     *\n     *     Stream.of(1,1,2,3,2,3,1).distinctBy(x => x);\n     *     => Stream.of(1,2,3)\n     */\n    distinctBy<U>(keyExtractor: (x:T)=>U&WithEquality): Stream<T> {\n        return <Stream<T>>SeqHelpers.distinctBy(this, keyExtractor);\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fn: (v:T)=>void): Stream<T> {\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty()) {\n            fn(curItem.value);\n            curItem = curItem._tail.get();\n        }\n        return this;\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsStream.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.minBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Stream.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).minOn(x=>x.age)\n     *     => Option.of({name:\"Paula\", age:6})\n     *\n     * also see [[ConsStream.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.minOn(this, getOrderable);\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[ConsStream.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.maxBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Stream.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).maxOn(x=>x.age)\n     *     => Option.of({name:\"Joe\", age:12})\n     *\n     * also see [[ConsStream.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.maxOn(this, getOrderable);\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     Stream.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return SeqHelpers.sumOn(this, getNumber);\n    }\n\n    /**\n     * Slides a window of a specific size over the sequence.\n     * Returns a lazy stream so memory use is not prohibitive.\n     *\n     *     Stream.of(1,2,3,4,5,6,7,8).sliding(3)\n     *     => Stream.of(Stream.of(1,2,3), Stream.of(4,5,6), Stream.of(7,8))\n     */\n    sliding(count:number): Stream<Stream<T>> {\n        return <Stream<Stream<T>>>SeqHelpers.sliding(this, count);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     *\n     *     Stream.of(1,2,3).scanLeft(0, (soFar,cur)=>soFar+cur)\n     *     => Stream.of(0,1,3,6)\n     */\n    scanLeft<U>(init:U, fn:(soFar:U,cur:T)=>U): Stream<U> {\n        return new ConsStream(\n            init,\n            Lazy.of(()=>this._tail.get().scanLeft(fn(init, this.value), fn)));\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The first element of the result is the final cumulative result.\n     *\n     *     Stream.of(1,2,3).scanRight(0, (cur,soFar)=>soFar+cur)\n     *     => Stream.of(6,5,3,0)\n     */\n    scanRight<U>(init:U, fn:(cur:T,soFar:U)=>U): Stream<U> {\n        // can't be lazy\n        const fn2 = (x:U,y:T)=>fn(y,x);\n        return this.reverse().scanLeft(init, fn2).reverse();\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     Vector.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     */\n    mkString(separator: string): string {\n        let r = \"\";\n        let curItem: Stream<T> = this;\n        let isNotFirst = false;\n        while (!curItem.isEmpty()) {\n            if (isNotFirst) {\n                r += separator;\n            }\n            r += toStringHelper(curItem.value, {quoteStrings:false});\n            curItem = curItem._tail.get();\n            isNotFirst = true;\n        }\n        return r;\n    }\n\n    /**\n     * Convert to array.\n     * Don't do it on an infinite stream!\n     */\n    toArray(): T[] {\n        let r:T[] = [];\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty()) {\n            r.push(curItem.value);\n            curItem = curItem._tail.get();\n        }\n        return r;\n    }\n\n    /**\n     * Convert to vector.\n     * Don't do it on an infinite stream!\n     */\n    toVector(): Vector<T> {\n        return Vector.ofIterable<T>(this.toArray());\n    }\n\n    /**\n     * Convert this collection to a map. You give a function which\n     * for each element in the collection returns a pair. The\n     * key of the pair will be used as a key in the map, the value,\n     * as a value in the map. If several values get the same key,\n     * entries will be lost.\n     *\n     *     Stream.of(1,2,3).toMap(x=>[x.toString(), x])\n     *     => HashMap.of([\"1\",1], [\"2\",2], [\"3\",3])\n     */\n    toMap<K,V>(converter:(x:T)=>[K & WithEquality,V]): HashMap<K,V> {\n        return this.foldLeft(HashMap.empty<K,V>(), (acc,cur) => {\n            const converted = converter(cur);\n            return acc.put(converted[0], converted[1]);\n        });\n    }\n\n    /**\n     * Convert this collection to a set. Since the elements of the\n     * Seq may not support equality, you must pass a function returning\n     * a value supporting equality.\n     *\n     *     Stream.of(1,2,3,3,4).toSet(x=>x)\n     *     => HashSet.of(1,2,3,4)\n     */\n    toSet<K>(converter:(x:T)=>K&WithEquality): HashSet<K> {\n        return this.foldLeft(HashSet.empty<K>(), (acc,cur) => {\n            return acc.add(converter(cur));\n        });\n    }\n\n    /**\n     * Convert this collection to a list.\n     */\n    toLinkedList(): LinkedList<T> {\n        return LinkedList.ofIterable(this);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:Stream<T>)=>U): U {\n        return converter(this);\n    }\n    \n    pluck<K extends keyof T>(key:K): Seq<T[K]> {\n        return SeqHelpers.pluck(this,key) // Stream.of(...this.ma);\n    }\n    \n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Stream<T&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if (!other || !other.tail) {\n            return false;\n        }\n        contractTrueEquality(\"Stream.equals\", this, other);\n        let myVal: Stream<T> = this;\n        let hisVal = other;\n        while (true) {\n            if (myVal.isEmpty() !== hisVal.isEmpty()) {\n                return false;\n            }\n            if (myVal.isEmpty()) {\n                // they are both empty, end of the stream\n                return true;\n            }\n            const myHead = myVal.value;\n            const hisHead = (<ConsStream<T>>hisVal).value;\n\n            if ((myHead === undefined) !== (hisHead === undefined)) {\n                return false;\n            }\n            if (myHead === undefined || hisHead === undefined) {\n                // they are both undefined, the || is for TS's flow analysis\n                // so he realizes none of them is undefined after this.\n                continue;\n            }\n            if (!areEqual(myHead, hisHead)) {\n                return false;\n            }\n            myVal = myVal._tail.get();\n            hisVal = (<ConsStream<T&WithEquality>>hisVal)._tail.get();\n        }\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        let hash = 1;\n        let curItem: Stream<T> = this;\n        while (!curItem.isEmpty()) {\n            hash = 31 * hash + getHashCode(curItem.value);\n            curItem = curItem._tail.get();\n        }\n        return hash;\n    }\n\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[ConsStream.mkString]]\n     */\n    toString(): string {\n        let curItem: Stream<T> = this;\n        let result = \"Stream(\";\n\n        while (!curItem.isEmpty()) {\n            result += toStringHelper(curItem.value);\n            const tail: Lazy<Stream<T>> = curItem._tail;\n            if (!tail.isEvaluated()) {\n                result += \", ?\";\n                break;\n            }\n            curItem = tail.get();\n            if (!curItem.isEmpty()) {\n                result += \", \";\n            }\n        }\n\n        return result + \")\";\n    }\n}\n\nconst emptyStream = new EmptyStream<any>();\n\n/**\n * @see Stream.of\n */\nexport const streamOf = Stream.of\n\n/**\n * @see Stream.ofIterable\n */\nexport const streamOfIterable = Stream.ofIterable\n", "import { Option } from \"./Option.js\"\nimport { Ordering, ToOrderable, WithEquality } from \"./Comparison.js\"\nimport { HashMap } from \"./HashMap.js\"\nimport { Seq } from \"./Seq.js\"\nimport { Collection } from \"./Collection.js\"\nimport { ConsStream, Stream } from \"./Stream.js\"\nimport { Lazy } from \"./Lazy.js\"\nimport { HashSet } from \"./HashSet.js\"\n\n/**\n * @hidden\n */\nexport function shuffle(array: any[]) {\n    // https://stackoverflow.com/a/2450976/516188\n    var currentIndex = array.length, temporaryValue, randomIndex;\n\n    // While there remain elements to shuffle...\n    while (0 !== currentIndex) {\n\n        // Pick a remaining element...\n        randomIndex = Math.floor(Math.random() * currentIndex);\n        currentIndex -= 1;\n\n        // And swap it with the current element.\n        temporaryValue = array[currentIndex];\n        array[currentIndex] = array[randomIndex];\n        array[randomIndex] = temporaryValue;\n    }\n\n    return array;\n}\n\n/**\n * @hidden\n */\nexport function arrangeBy<T,K>(collection: Collection<T>, getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n    return Option.of(collection.groupBy(getKey).mapValues(v => v.single()))\n        .filter(map => !map.anyMatch((k,v) => v.isNone()))\n        .map(map => map.mapValues(v => v.getOrThrow()));\n}\n\n/**\n * @hidden\n */\nexport function seqHasTrueEquality<T>(seq: Seq<T>): boolean {\n    return seq.find(x => x!=null).hasTrueEquality();\n}\n\n/**\n * @hidden\n */\nexport function zipWithIndex<T>(seq: Seq<T>): Seq<[T,number]> {\n    return seq.zip<number>(Stream.iterate(0,i=>i+1));\n}\n\n/**\n * @hidden\n */\nexport function sortOn<T>(seq: Seq<T>, getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): Seq<T> {\n    return seq.sortBy((x,y) => {\n        for (const getKey of getKeys) {\n            if ((<any>getKey).desc) {\n                const a = (<ToOrderable<T>>(<any>getKey).desc)(x);\n                const b = (<ToOrderable<T>>(<any>getKey).desc)(y);\n                if (a === b) {\n                    continue;\n                }\n                return a<b?Ordering.GT:Ordering.LT;\n            } else {\n                const a = (<ToOrderable<T>>getKey)(x);\n                const b = (<ToOrderable<T>>getKey)(y);\n                if (a === b) {\n                    continue;\n                }\n                return a>b?Ordering.GT:Ordering.LT;\n            }\n        }\n        return Ordering.EQ;\n    });\n}\n\n/**\n * @hidden\n */\nexport function distinctBy<T,U>(seq: Collection<T>, keyExtractor: (x:T)=>U&WithEquality): Collection<T> {\n    let knownKeys = HashSet.empty<U>();\n    return seq.filter(x => {\n        const key = keyExtractor(x);\n        const r = knownKeys.contains(key);\n        if (!r) {\n            knownKeys = knownKeys.add(key);\n        }\n        return !r;\n    });\n}\n\nexport type PluckKeyValue<T, K extends keyof T> = (T extends Array<any> ? (K extends keyof T ? T[K] : never) : K extends keyof T ? T[K] : never)\n\n\nexport function plucker<T extends {} | Array<any>,K extends keyof T, V extends PluckKeyValue<T, K>>(key: K): ((x:T) => V) {\n    return (x: T) => x[key] as V\n}\n\nexport function pluck<T,K extends keyof T, V extends PluckKeyValue<T, K>\n  >(seq: Seq<T>, key: K): Seq<V> {\n    return Stream.of(...seq.toArray().map(plucker<T,K,V>(key)))\n}\n\n/**\n * @hidden\n */\nexport function minBy<T>(coll: Collection<T>, compare: (v1:T,v2:T)=>Ordering): Option<T> {\n    return coll.reduce((v1,v2)=>compare(v1,v2)<0 ? v2 : v1);\n}\n\n/**\n * @hidden\n */\nexport function minOn<T>(coll: Collection<T>, getSortable: ToOrderable<T>): Option<T> {\n    if (coll.isEmpty()) {\n        return Option.none<T>();\n    }\n    let iter = coll[Symbol.iterator]();\n    let step = iter.next();\n    let val = getSortable(step.value);\n    let result = step.value;\n    while (!(step = iter.next()).done) {\n        const curVal = getSortable(step.value);\n        if (curVal < val) {\n            val = curVal;\n            result = step.value;\n        }\n    }\n    return Option.of(result);\n}\n\n/**\n * @hidden\n */\nexport function maxBy<T>(coll: Collection<T>, compare: (v1:T,v2:T)=>Ordering): Option<T> {\n    return coll.reduce((v1,v2)=>compare(v1,v2)>0 ? v2 : v1);\n}\n\n/**\n * @hidden\n */\nexport function maxOn<T>(coll: Collection<T>, getSortable: ToOrderable<T>): Option<T> {\n    if (coll.isEmpty()) {\n        return Option.none<T>();\n    }\n    let iter = coll[Symbol.iterator]();\n    let step = iter.next();\n    let val = getSortable(step.value);\n    let result = step.value;\n    while (!(step = iter.next()).done) {\n        const curVal = getSortable(step.value);\n        if (curVal > val) {\n            val = curVal;\n            result = step.value;\n        }\n    }\n    return Option.of(result);\n}\n\n/**\n * @hidden\n */\nexport function sumOn<T>(coll: Collection<T>, getNumber: (v:T)=>number): number {\n    return coll.foldLeft(0, (soFar,cur)=>soFar+getNumber(cur));\n}\n\n/**\n * @hidden\n */\nexport function reduce<T>(coll: Collection<T>, combine: (v1:T,v2:T)=>T): Option<T> {\n    if (coll.isEmpty()) {\n        return Option.none<T>();\n    }\n    let iter = coll[Symbol.iterator]();\n    let step = iter.next();\n    let result = step.value;\n    while (!(step = iter.next()).done) {\n        result = combine(result, step.value);\n    }\n    return Option.of(result);\n}\n\n/**\n * @hidden\n */\nexport function sliding<T>(seq: Seq<T>, count:number): Stream<Seq<T>> {\n    // in a way should get better performance with Seq.splitAt instead\n    // of Seq.take+Seq.drop, but we should be lazy and not hold another\n    // version of the sequence in memory (though for linked list it's free,\n    // it's not the case for Vector)\n    return seq.isEmpty() ?\n        Stream.empty<Seq<T>>() :\n        new ConsStream(seq.take(count), Lazy.of(() => sliding(seq.drop(count), count)));\n}\n\n/**\n * @hidden\n */\nexport function removeAll<T>(seq: Seq<T>, elts:Iterable<T&WithEquality>): Seq<T> {\n    const toRemove = HashSet.ofIterable(elts);\n    // I know T must have equality since the parameter has it and is the same type.\n    return <Seq<T>><any>(<Seq<T&WithEquality>><any>seq).filter(x => !toRemove.contains(x));\n}\n", "import { IMap } from \"./IMap.js\"\nimport {\n  areEqual,\n  getHashCode,\n  hasEquals,\n  HasEquals,\n  WithEquality\n} from \"./Comparison.js\"\nimport * as SeqHelpers from \"./SeqHelpers.js\"\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { none, None, Option } from \"./Option.js\"\nimport { HashSet } from \"./HashSet.js\"\nimport { Vector } from \"./Vector.js\"\nimport { LinkedList } from \"./LinkedList.js\"\nimport { inspect } from \"./Value.js\"\nimport { ToString } from \"./ToString.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\nimport hamt from \"./internal/hamt_plus/hamt\";\n// const hamt: any = require(\"hamt_plus\") as any\n\n// HashMap could extend Collection, conceptually. But I'm\n// not super happy of having the callbacks get a pair, for instance\n// 'HashMap.filter' takes two parameters in the current HashMap;\n// if HashMap did implement Collection, it would have to take a k,v\n// pair. There's also another trick with 'contains'. The Collection signature\n// says T&WithEquality, but here we get [K&WithEquality,V&WithEquality],\n// but arrays don't have equality so that doesn't type-check :-(\n\n/**\n * A dictionary, mapping keys to values.\n * @template K the key type\n * @template V the value type\n */\nexport class HashMap<K extends ToString, V> implements IMap<K, V> {\n  /**\n   * @hidden\n   */\n  protected constructor(private hamt: any) {}\n\n  /**\n   * The empty map.\n   * @template K the key type\n   * @template V the value type\n   */\n  static empty<K, V>(): HashMap<K, V> {\n    return <EmptyHashMap<K, V>>emptyHashMap\n  }\n\n  /**\n   * Build a HashMap from key-value pairs.\n   *\n   *     HashMap.of([1,\"a\"],[2,\"b\"])\n   *\n   */\n  static of<K, V>(...entries: Array<[K & WithEquality, V]>): HashMap<K, V> {\n    return HashMap.ofIterable<K, V>(entries)\n  }\n\n  /**\n   * Build a HashMap from an iterable containing key-value pairs.\n   *\n   *    HashMap.ofIterable(Vector.of<[number,string]>([1,\"a\"],[2,\"b\"]));\n   */\n  static ofIterable<K, V>(\n    entries: Iterable<[K & WithEquality, V]>\n  ): HashMap<K, V> {\n    // remember we must set up the hamt with the custom equality\n    const iterator = entries[Symbol.iterator]()\n    let curItem = iterator.next()\n    if (curItem.done) {\n      return new EmptyHashMap<K, V>()\n    }\n    // emptyhashmap.put sets up the custom equality+hashcode\n    let startH = new EmptyHashMap<K, V>().put(\n      curItem.value[0],\n      curItem.value[1]\n    ).hamt\n    curItem = iterator.next()\n    return new HashMap<K, V>(\n      startH.mutate((h: any) => {\n        while (!curItem.done) {\n          h.set(curItem.value[0], curItem.value[1])\n          curItem = iterator.next()\n        }\n      })\n    )\n  }\n\n  /**\n   * Build a HashMap from a javascript object literal representing\n   * a dictionary. Note that the key type must always be string,\n   * as that's the way it works in javascript.\n   * Also note that entries with undefined values will be stripped\n   * from the map.\n   *\n   *     HashMap.ofObjectDictionary<number>({a:1,b:2})\n   *     => HashMap.of([\"a\",1],[\"b\",2])\n   */\n  static ofObjectDictionary<V>(object: {\n    [index: string]: V | undefined\n  }): HashMap<string, V> {\n    // no need to bother with the proper equals & hashcode\n    // as I know the key type supports ===\n    const h: any = hamt.make().beginMutation()\n    for (let property in object) {\n      // the reason we strip entries with undefined values on\n      // import from object dictionaries are: sanity, and also\n      // partial object definitions like {[TKey in MyEnum]?:number}\n      // where typescript sees the value type as 'number|undefined'\n      // (there is a test covering that)\n      if (\n        object.hasOwnProperty(property) &&\n        typeof object[property] !== \"undefined\"\n      ) {\n        h.set(property, object[property])\n      }\n    }\n    return new HashMap<string, V>(h.endMutation())\n  }\n\n  /**\n   * Curried predicate to find out whether the HashMap is empty.\n   *\n   *     Vector.of(HashMap.of([1,2]), HashMap.empty<number,number>())\n   *         .filter(HashMap.isEmpty)\n   *     => Vector.of(HashMap.empty<number,number>())\n   */\n  static isEmpty<K, V>(v: HashMap<K, V>): boolean {\n    return v.isEmpty()\n  }\n\n  /**\n   * Curried predicate to find out whether the HashMap is empty.\n   *\n   *     Vector.of(HashMap.of([1,2]), HashMap.empty<number,number>())\n   *         .filter(HashMap.isNotEmpty)\n   *     => Vector.of(HashMap.of([1,2]))\n   */\n  static isNotEmpty<K, V>(v: HashMap<K, V>): boolean {\n    return !v.isEmpty()\n  }\n\n  /**\n   * Get the value for the key you give, if the key is present.\n   */\n  get(k: K & WithEquality): Option<V> {\n    return Option.of<V>(this.hamt.get(k))\n  }\n\n  /**\n   * Get map entries.\n   *\n   * @returns {Iterator<[K, V]>}\n   */\n  entries(): Iterator<[K, V]> {\n    return this.hamt.entries()\n  }\n\n  /**\n   * Implementation of the Iterator interface.\n   */\n  [Symbol.iterator](): Iterator<[K, V]> {\n    return this.entries()\n  }\n\n  /**\n   * @hidden\n   */\n  hasTrueEquality(): boolean {\n    // for true equality, need both key & value to have true\n    // equality. but i can't check when they're in an array,\n    // as array doesn't have true equality => extract them\n    // and check them separately.\n    return (\n      Option.of(this.hamt.entries().next().value)\n        .map((x) => x[0])\n        .hasTrueEquality() &&\n      Option.of(this.hamt.entries().next().value)\n        .map((x) => x[1])\n        .hasTrueEquality()\n    )\n  }\n\n  /**\n   * Add a new entry in the map. If there was entry with the same\n   * key, it will be overwritten.\n   * @param k the key\n   * @param v the value\n   */\n  put(k: K & WithEquality, v: V): HashMap<K, V> {\n    return new HashMap<K, V>(this.hamt.set(k, v))\n  }\n\n  /**\n   * Return a new map with the key you give removed.\n   */\n  remove(k: K & WithEquality): HashMap<K, V> {\n    return new HashMap<K, V>(this.hamt.remove(k))\n  }\n\n  /**\n   * Add a new entry in the map; in case there was already an\n   * entry with the same key, the merge function will be invoked\n   * with the old and the new value to produce the value to take\n   * into account.\n   *\n   * It is guaranteed that the merge function first parameter\n   * will be the entry from this map, and the second parameter\n   * from the map you give.\n   * @param k the key\n   * @param v the value\n   * @param merge a function to merge old and new values in case of conflict.\n   */\n  putWithMerge(\n    k: K & WithEquality,\n    v: V,\n    merge: (v1: V, v2: V) => V\n  ): HashMap<K, V> {\n    return new HashMap<K, V>(\n      this.hamt.modify(k, (curV?: V) => {\n        if (curV === undefined) {\n          return v\n        }\n        return merge(curV, v)\n      })\n    )\n  }\n\n  /**\n   * number of items in the map\n   */\n  length(): number {\n    return this.hamt.size\n  }\n\n  /**\n   * If the collection contains a single element,\n   * return Some of its value, otherwise return None.\n   */\n  single(): Option<[K, V]> {\n    return this.hamt.size === 1\n      ? Option.of(this.hamt.entries().next().value)\n      : Option.none()\n  }\n\n  /**\n   * true if the map is empty, false otherwise.\n   */\n  isEmpty(): boolean {\n    return this.hamt.size === 0\n  }\n\n  /**\n   * Get a Set containing all the keys in the map\n   */\n  keySet(): HashSet<K> {\n    return HashSet.ofIterable<K>(this.hamt.keys())\n  }\n\n  /**\n   * Get an iterable containing all the values in the map\n   * (can't return a set as we don't constrain map values\n   * to have equality in the generics type)\n   */\n  valueIterable(): Iterable<V> {\n    const hamt = this.hamt\n    return {\n      [Symbol.iterator]() {\n        return hamt.values()\n      }\n    }\n  }\n\n  /**\n   * Create a new map combining the entries of this map, and\n   * the other map you give. In case an entry from this map\n   * and the other map have the same key, the merge function\n   * will be invoked to get a combined value.\n   *\n   * It is guaranteed that the merge function first parameter\n   * will be the entry from this map, and the second parameter\n   * from the map you give.\n   * @param other another map to merge with this one\n   * @param merge a merge function to combine two values\n   *        in case two entries share the same key.\n   */\n  mergeWith(\n    elts: Iterable<[K & WithEquality, V]>,\n    merge: (v1: V, v2: V) => V\n  ): HashMap<K, V> {\n    const iterator = elts[Symbol.iterator]()\n    let map: HashMap<K, V> = this\n    let curItem = iterator.next()\n    while (!curItem.done) {\n      map = map.putWithMerge(curItem.value[0], curItem.value[1], merge)\n      curItem = iterator.next()\n    }\n    return map\n  }\n\n  /**\n   * Return a new map where each entry was transformed\n   * by the mapper function you give. You return key,value\n   * as pairs.\n   */\n  map<K2, V2>(\n    fn: (k: K & WithEquality, v: V) => [K2 & WithEquality, V2]\n  ): HashMap<K2, V2> {\n    return this.hamt.fold(\n      (acc: HashMap<K2, V2>, value: V, key: K & WithEquality) => {\n        const [newk, newv] = fn(key, value)\n        return acc.put(newk, newv)\n      },\n      HashMap.empty()\n    )\n  }\n\n  /**\n   * Return a new map where keys are the same as in this one,\n   * but values are transformed\n   * by the mapper function you give. You return key,value\n   * as pairs.\n   */\n  mapValues<V2>(fn: (v: V) => V2): HashMap<K, V2> {\n    return this.hamt.fold(\n      (acc: HashMap<K, V2>, value: V, key: K & WithEquality) =>\n        acc.put(key, fn(value)),\n      HashMap.empty()\n    )\n  }\n\n  /**\n   * Call a function for element in the collection.\n   */\n  forEach(fun: (x: [K, V]) => void): HashMap<K, V> {\n    const iterator: Iterator<[K, V]> = this.hamt.entries()\n    let curItem = iterator.next()\n    while (!curItem.done) {\n      fun(curItem.value)\n      curItem = iterator.next()\n    }\n    return this\n  }\n\n  /**\n   * Calls the function you give for each item in the map,\n   * your function returns a map, all the maps are\n   * merged.\n   */\n  flatMap<K2, V2>(\n    fn: (k: K, v: V) => Iterable<[K2 & WithEquality, V2]>\n  ): HashMap<K2, V2> {\n    return this.foldLeft(HashMap.empty<K2, V2>(), (soFar, cur) =>\n      soFar.mergeWith(fn(cur[0], cur[1]), (a, b) => b)\n    )\n  }\n\n  /**\n   * Returns true if the predicate returns true for all the\n   * elements in the collection.\n   */\n  allMatch(predicate: (k: K, v: V) => boolean): boolean {\n    const iterator: Iterator<[K, V]> = this.hamt.entries()\n    let curItem = iterator.next()\n    while (!curItem.done) {\n      if (!predicate(curItem.value[0], curItem.value[1])) {\n        return false\n      }\n      curItem = iterator.next()\n    }\n    return true\n  }\n\n  /**\n   * Returns true if there the predicate returns true for any\n   * element in the collection.\n   */\n  anyMatch(predicate: (k: K, v: V) => boolean): boolean {\n    const iterator: Iterator<[K, V]> = this.hamt.entries()\n    let curItem = iterator.next()\n    while (!curItem.done) {\n      if (predicate(curItem.value[0], curItem.value[1])) {\n        return true\n      }\n      curItem = iterator.next()\n    }\n    return false\n  }\n\n  /**\n   * Returns true if the item is in the collection,\n   * false otherwise.\n   */\n  contains(val: [K & WithEquality, V & WithEquality]): boolean {\n    return areEqual(this.hamt.get(val[0]), val[1])\n  }\n\n  /**\n   * Returns true if there is item with that key in the collection,\n   * false otherwise.\n   *\n   *     HashMap.of<number,string>([1,\"a\"],[2,\"b\"]).containsKey(1);\n   *     => true\n   *\n   *     HashMap.of<number,string>([1,\"a\"],[2,\"b\"]).containsKey(3);\n   *     => false\n   */\n  containsKey(key: K & WithEquality): boolean {\n    return this.hamt.has(key)\n  }\n\n  /**\n   * Call a predicate for each element in the collection,\n   * build a new collection holding only the elements\n   * for which the predicate returned true.\n   */\n  filter(predicate: (k: K, v: V) => boolean): HashMap<K, V> {\n    return new HashMap<K, V>(\n      hamt\n        .make({ hash: this.hamt._config.hash, keyEq: this.hamt._config.keyEq })\n        .mutate((h: any) => {\n          const iterator: Iterator<[K, V]> = this.hamt.entries()\n          let curItem = iterator.next()\n          while (!curItem.done) {\n            if (predicate(curItem.value[0], curItem.value[1])) {\n              h.set(curItem.value[0], curItem.value[1])\n            }\n            curItem = iterator.next()\n          }\n        })\n    )\n  }\n\n  /**\n   * Search for an item matching the predicate you pass,\n   * return Option.Some of that element if found,\n   * Option.None otherwise.\n   * We name the method findAny instead of find to emphasize\n   * that there is not ordering in a hashset.\n   *\n   *     HashMap.of<number,string>([1,'a'],[2,'b'],[3,'c'])\n   *         .findAny((k,v) => k>=2 && v === \"c\")\n   *     => Option.of([3,'c'])\n   *\n   *     HashMap.of<number,string>([1,'a'],[2,'b'],[3,'c'])\n   *         .findAny((k,v) => k>=3 && v === \"b\")\n   *     => Option.none<[number,string]>()\n   */\n  findAny(predicate: (k: K, v: V) => boolean): Option<[K, V]> {\n    const iterator: Iterator<[K, V]> = this.hamt.entries()\n    let curItem = iterator.next()\n    while (!curItem.done) {\n      if (predicate(curItem.value[0], curItem.value[1])) {\n        return Option.of(curItem.value)\n      }\n      curItem = iterator.next()\n    }\n    return Option.none<[K, V]>()\n  }\n\n  /**\n   * Call a predicate for each key in the collection,\n   * build a new collection holding only the elements\n   * for which the predicate returned true.\n   *\n   *     HashMap.of<number,string>([1,\"a\"],[2,\"b\"]).filterKeys(k=>k%2===0)\n   *     => HashMap.of<number,string>([2,\"b\"])\n   */\n  filterKeys<U extends K>(fn: (v: K) => v is U): HashMap<U, V>\n  filterKeys(predicate: (k: K) => boolean): HashMap<K, V>\n  filterKeys(predicate: (k: K) => boolean): HashMap<K, V> {\n    return this.filter((k, v) => predicate(k))\n  }\n\n  /**\n   * Call a predicate for each value in the collection,\n   * build a new collection holding only the elements\n   * for which the predicate returned true.\n   *\n   *     HashMap.of<number,string>([1,\"a\"],[2,\"ab\"]).filterValues(v=>v.length>1)\n   *     => HashMap.of<number,string>([2,\"ab\"])\n   */\n  filterValues<U extends V>(fn: (v: V) => v is U): HashMap<K, U>\n  filterValues(predicate: (k: V) => boolean): HashMap<K, V>\n  filterValues(predicate: (k: V) => boolean): HashMap<K, V> {\n    return this.filter((k, v) => predicate(v))\n  }\n\n  /**\n   * Reduces the collection to a single value using the\n   * associative binary function you give. Since the function\n   * is associative, order of application doesn't matter.\n   *\n   * Example:\n   *\n   *     HashMap.of<number,string>([1,\"a\"],[2,\"b\"],[3,\"c\"])\n   *      .fold([0,\"\"], ([a,b],[c,d])=>[a+c, b>d?b:d])\n   *     => [6,\"c\"]\n   */\n  fold(zero: [K, V], fn: (v1: [K, V], v2: [K, V]) => [K, V]): [K, V] {\n    return this.foldLeft(zero, fn)\n  }\n\n  /**\n   * Reduces the collection to a single value.\n   * Left-associative.\n   * No guarantees for the order of items in a hashset!\n   *\n   * Example:\n   *\n   *     HashMap.of([1,\"a\"], [2,\"bb\"], [3,\"ccc\"])\n   *     .foldLeft(0, (soFar,[item,val])=>soFar+val.length);\n   *     => 6\n   *\n   * @param zero The initial value\n   * @param fn A function taking the previous value and\n   *           the current collection item, and returning\n   *           an updated value.\n   */\n  foldLeft<U>(zero: U, fn: (soFar: U, cur: [K, V]) => U): U {\n    return this.hamt.fold(\n      (acc: U, v: V, k: K & WithEquality) => fn(acc, [k, v]),\n      zero\n    )\n  }\n\n  /**\n   * Reduces the collection to a single value.\n   * Right-associative.\n   * No guarantees for the order of items in a hashset!\n   *\n   * Example:\n   *\n   *     HashMap.of([1,\"a\"], [2,\"bb\"], [3,\"ccc\"])\n   *     .foldRight(0, ([item,value],soFar)=>soFar+value.length);\n   *     => 6\n   *\n   * @param zero The initial value\n   * @param fn A function taking the current collection item and\n   *           the previous value , and returning\n   *           an updated value.\n   */\n  foldRight<U>(zero: U, fn: (cur: [K, V], soFar: U) => U): U {\n    return this.foldLeft(zero, (cur, soFar) => fn(soFar, cur))\n  }\n\n  /**\n   * Reduces the collection to a single value by repeatedly\n   * calling the combine function.\n   * No starting value. The order in which the elements are\n   * passed to the combining function is undetermined.\n   */\n  reduce(combine: (v1: [K, V], v2: [K, V]) => [K, V]): Option<[K, V]> {\n    // not really glorious with any...\n    return <Option<[K, V]>>SeqHelpers.reduce<any>(<any>this, combine)\n  }\n\n  /**\n   * Convert to array.\n   */\n  toArray(): Array<[K, V]> {\n    return this.hamt.fold((acc: [[K, V]], value: V, key: K & WithEquality) => {\n      acc.push([key, value])\n      return acc\n    }, [])\n  }\n\n  /**\n   * Convert this map to a vector of key,value pairs.\n   * Note that Map is already an iterable of key,value pairs!\n   */\n  toVector(): Vector<[K, V]> {\n    return this.hamt.fold(\n      (acc: Vector<[K, V]>, value: V, key: K & WithEquality) =>\n        acc.append([key, value]),\n      Vector.empty()\n    )\n  }\n\n  /**\n   * Convert this map to a list of key,value pairs.\n   * Note that Map is already an iterable of key,value pairs!\n   */\n  toLinkedList(): LinkedList<[K, V]> {\n    return LinkedList.ofIterable(this)\n  }\n\n  /**\n   * Convert to a javascript object dictionary\n   * You must provide a function to convert the\n   * key to a string.\n   *\n   *     HashMap.of<string,number>([\"a\",1],[\"b\",2])\n   *         .toObjectDictionary(x=>x);\n   *     => {a:1,b:2}\n   */\n  toObjectDictionary(keyConvert: (k: K) => string = (k) => k.toString()): {\n    [index: string]: V\n  } {\n    return this.foldLeft<{ [index: string]: V }>({}, (soFar, cur) => {\n      soFar[keyConvert(cur[0])] = cur[1]\n      return soFar\n    })\n  }\n\n  /**\n   * Convert to an ES6 Map.\n   * You must provide a function to convert the\n   * key to a string, number or boolean, because\n   * with other types equality is not correctly\n   * managed by JS.\n   * https://stackoverflow.com/questions/29759480/how-to-customize-object-equality-for-javascript-set\n   * https://esdiscuss.org/topic/maps-with-object-keys\n   *\n   *     HashMap.of<string,number>([\"a\",1],[\"b\",2])\n   *         .toJsMap(x=>x);\n   *     => new Map([[\"a\",1], [\"b\",2]])\n   */\n  toJsMap(keyConvert: (k: K) => string): Map<string, V>\n  toJsMap(keyConvert: (k: K) => number): Map<number, V>\n  toJsMap(keyConvert: (k: K) => boolean): Map<boolean, V>\n  toJsMap<K2 extends number | string | boolean>(\n    keyConvert: (k: K) => K2\n  ): Map<K2, V> {\n    return this.foldLeft(new Map<K2, V>(), (soFar, cur) =>\n      soFar.set(keyConvert(cur[0]), cur[1])\n    )\n  }\n\n  /**\n   * Transform this value to another value type.\n   * Enables fluent-style programming by chaining calls.\n   */\n  transform<U>(converter: (x: HashMap<K, V>) => U): U {\n    return converter(this)\n  }\n\n  /**\n   * Two objects are equal if they represent the same value,\n   * regardless of whether they are the same object physically\n   * in memory.\n   */\n  equals(other: IMap<K & WithEquality, V & WithEquality>): boolean {\n    if (<any>other === this) {\n      return true\n    }\n    if (!other || !other.valueIterable) {\n      return false\n    }\n    contractTrueEquality(\"HashMap.equals\", this, other)\n    const sz = this.hamt.size\n    if (other.length() === 0 && sz === 0) {\n      // we could get that i'm not the empty map\n      // but my size is zero, after some filtering and such.\n      return true\n    }\n    if (sz !== other.length()) {\n      return false\n    }\n    const keys: Array<K & WithEquality> = Array.from<K & WithEquality>(\n      this.hamt.keys()\n    )\n    for (let k of keys) {\n      const myVal: V | null | undefined = this.hamt.get(k)\n      const hisVal: V | null | undefined = other.get(k).getOrUndefined()\n      if (myVal === undefined || hisVal === undefined) {\n        return false\n      }\n      if (!areEqual(myVal, hisVal)) {\n        return false\n      }\n    }\n    return true\n  }\n\n  /**\n   * Get a number for that object. Two different values\n   * may get the same number, but one value must always get\n   * the same number. The formula can impact performance.\n   */\n  hashCode(): number {\n    return this.hamt.fold(\n      (acc: number, value: V, key: K & WithEquality) =>\n        getHashCode(key) + getHashCode(value),\n      0\n    )\n  }\n\n  /*\n   * Get a human-friendly string representation of that value.\n   */\n  toString(): string {\n    return (\n      \"HashMap(\" +\n      this.hamt\n        .fold((acc: string[], value: V, key: K) => {\n          acc.push(\n            toStringHelper(key, { quoteStrings: false }) +\n              \": \" +\n              toStringHelper(value)\n          )\n          return acc\n        }, [])\n        .join(\", \") +\n      \")\"\n    )\n  }\n\n  [inspect](): string {\n    return this.toString()\n  }\n}\n\n// we need to override the empty hashmap\n// because i don't know how to get the hash & keyset\n// functions for the keys without a key value to get\n// the functions from\nclass EmptyHashMap<K, V> extends HashMap<K, V> {\n  constructor() {\n    super({}) // we must override all the functions\n  }\n\n  get(k: K & WithEquality): Option<V> {\n    return <None<V>>none\n  }\n\n  [Symbol.iterator](): Iterator<[K, V]> {\n    return { next: () => ({ done: true, value: <any>undefined }) }\n  }\n\n  put(k: K & WithEquality, v: V): HashMap<K, V> {\n    contractTrueEquality(\"Error building a HashMap\", k)\n    if (hasEquals(k)) {\n      return new HashMap<K, V>(\n        hamt\n          .make({\n            hash: (v: K & HasEquals) => v.hashCode(),\n            keyEq: (a: K & HasEquals, b: K & HasEquals) => a.equals(b)\n          })\n          .set(k, v)\n      )\n    }\n    return new HashMap<K, V>(hamt.make().set(k, v))\n  }\n\n  remove(k: K & WithEquality): HashMap<K, V> {\n    return this\n  }\n\n  hasTrueEquality(): boolean {\n    return true\n  }\n\n  putWithMerge(\n    k: K & WithEquality,\n    v: V,\n    merge: (v1: V, v2: V) => V\n  ): HashMap<K, V> {\n    return this.put(k, v)\n  }\n\n  length(): number {\n    return 0\n  }\n\n  /**\n   * If the collection contains a single element,\n   * return Some of its value, otherwise return None.\n   */\n  single(): Option<[K, V]> {\n    return Option.none<[K, V]>()\n  }\n\n  isEmpty(): boolean {\n    return true\n  }\n\n  keySet(): HashSet<K> {\n    return HashSet.empty<K>()\n  }\n\n  valueIterable(): Iterable<V> {\n    return {\n      [Symbol.iterator](): Iterator<V> {\n        return {\n          next(): IteratorResult<V> {\n            return {\n              done: true,\n              value: <any>undefined\n            }\n          }\n        }\n      }\n    }\n  }\n\n  mergeWith(\n    other: Iterable<[K & WithEquality, V]>,\n    merge: (v1: V, v2: V) => V\n  ): HashMap<K, V> {\n    return HashMap.ofIterable(other)\n  }\n\n  map<K2, V2>(\n    fn: (k: K & WithEquality, v: V) => [K2 & WithEquality, V2]\n  ): HashMap<K2, V2> {\n    return HashMap.empty<K2, V2>()\n  }\n\n  mapValues<V2>(fn: (v: V) => V2): HashMap<K, V2> {\n    return HashMap.empty<K, V2>()\n  }\n\n  forEach(fun: (x: [K, V]) => void): HashMap<K, V> {\n    return this\n  }\n\n  allMatch(predicate: (k: K, v: V) => boolean): boolean {\n    return true\n  }\n\n  anyMatch(predicate: (k: K, v: V) => boolean): boolean {\n    return false\n  }\n\n  contains(val: [K & WithEquality, V & WithEquality]): boolean {\n    return false\n  }\n\n  containsKey(key: K & WithEquality): boolean {\n    return false\n  }\n\n  filter(predicate: (k: K, v: V) => boolean): HashMap<K, V> {\n    return this\n  }\n\n  findAny(predicate: (k: K, v: V) => boolean): Option<[K, V]> {\n    return Option.none<[K, V]>()\n  }\n\n  foldLeft<U>(zero: U, fn: (soFar: U, cur: [K, V]) => U): U {\n    return zero\n  }\n\n  toArray(): Array<[K, V]> {\n    return []\n  }\n\n  toVector(): Vector<[K, V]> {\n    return Vector.empty<[K, V]>()\n  }\n\n  toLinkedList(): LinkedList<[K, V]> {\n    return LinkedList.empty<[K, V]>()\n  }\n\n  equals(other: IMap<K & WithEquality, V & WithEquality>): boolean {\n    if (!other || !other.valueIterable) {\n      return false\n    }\n    return <any>other === emptyHashMap || other.length() === 0\n  }\n\n  hashCode(): number {\n    return 0\n  }\n\n  toString(): string {\n    return \"HashMap()\"\n  }\n}\n\nconst emptyHashMap = new EmptyHashMap<any, any>()\n\nexport const hashMapOf = HashMap.of\nexport const hashMapOfIterable = HashMap.ofIterable\nexport const hashMapOfObject = HashMap.ofObjectDictionary\n", "import { inspect } from \"./Value.js\"\nimport { Option } from \"./Option.js\"\nimport { HashMap } from \"./HashMap.js\"\nimport { HashSet } from \"./HashSet.js\"\nimport { Stream } from \"./Stream.js\"\nimport { IterableArray, Seq } from \"./Seq.js\"\nimport {\n  areEqual, getHashCode, Ordering, ToOrderable, WithEquality\n} from \"./Comparison.js\"\nimport * as SeqHelpers from \"./SeqHelpers.js\"\nimport * as L from \"list\"\nimport { ToString } from \"./ToString.js\"\nimport { Bind } from \"./decorators/index.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * A general-purpose list class with all-around good performance.\n * quasi-O(1) (actually O(log32(n))) access, append, replace.\n * It's backed by a bit-mapped vector trie.\n * @param T the item type\n */\nexport class Vector<T extends ToString> implements Seq<T> {\n\n    /**\n     * @hidden\n     */\n    // _contents will be undefined only if length===0\n    protected constructor(private _list: L.List<T>) {}\n\n    /**\n     * The empty vector.\n     * @param T the item type\n     */\n    static empty<T extends ToString>(): Vector<T> {\n        return new Vector(L.empty());\n    }\n\n    /**\n     * Build a vector from a series of items (any number, as parameters)\n     * @param data: T[]\n     * @return {Vector<T>}\n     */\n    static of<T extends ToString>(...data: T[]): Vector<T> {\n        return Vector.ofIterable(data);\n    }\n\n    /**\n     * Build a vector from any iterable, which means also\n     * an array for instance.\n     *\n     * @param elts: Iterable<T> the item type\n     * @return {Vector<T>}\n     */\n    static ofIterable<T extends ToString>(elts: Iterable<T>): Vector<T> {\n        return new Vector(L.from(elts));\n    }\n\n    /**\n     * Curried predicate to find out whether the vector is empty.\n     *\n     *     LinkedList.of(Vector.of(1), Vector.empty<number>())\n     *         .filter(Vector.isEmpty)\n     *     => LinkedList.of(Vector.empty<number>())\n     */\n    static isEmpty<T extends ToString>(v: Vector<T>): boolean {\n        return v.isEmpty();\n    }\n\n    /**\n     * Curried predicate to find out whether the vector is empty.\n     *\n     *     LinkedList.of(Vector.of(1), Vector.empty<number>())\n     *         .filter(Vector.isNotEmpty)\n     *     => LinkedList.of(Vector.of(1))\n     */\n    static isNotEmpty<T extends ToString>(v: Vector<T>): boolean {\n        return !v.isEmpty();\n    }\n\n    /**\n     * Get the length of the collection.\n     */\n    @Bind()\n    length(): number {\n        return L.length(this._list);\n    }\n\n    /**\n     * true if the collection is empty, false otherwise.\n     */\n    isEmpty(): boolean {\n        return L.length(this._list) === 0;\n    }\n    \n    /**\n     * Pluck value from object / array\n     *\n     *     Vector.of([1,2,3],[2, 3, 4, 2]).pluck(1)\n     *     => Vector.of(2,3)\n     *\n     */\n    pluck<K extends keyof T>(key:K): Seq<T[K]> {\n        return SeqHelpers.pluck(this,key);\n    }\n    \n    /**\n     * Dual to the foldRight function. Build a collection from a seed.\n     * Takes a starting element and a function.\n     * It applies the function on the starting element; if the\n     * function returns None, it stops building the list, if it\n     * returns Some of a pair, it adds the first element to the result\n     * and takes the second element as a seed to keep going.\n     *\n     *     Vector.unfoldRight(\n     *          10, x=>Option.of(x)\n     *              .filter(x => x!==0)\n     *              .map<[number,number]>(x => [x,x-1]))\n     *     => Vector.of(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)\n     */\n    static unfoldRight<T,U>(seed: T, fn: (x:T)=>Option<[U,T]>): Vector<U> {\n        let nextVal = fn(seed);\n        let r = L.empty();\n        while (nextVal.isSome()) {\n            r = L.append(nextVal.get()[0], r);\n            nextVal = fn(nextVal.get()[1]);\n        }\n        return new Vector(r);\n    }\n\n    /**\n     * Retrieve the element at index idx.\n     * Returns an option because the collection may\n     * contain less elements than the index.\n     */\n    get(index: number): Option<T> {\n        return Option.of(L.nth(index, this._list));\n    }\n\n    /**\n     * If the collection contains a single element,\n     * return Some of its value, otherwise return None.\n     */\n    single(): Option<T> {\n        return L.length(this._list) === 1 ?\n            this.head() :\n            Option.none<T>();\n    }\n\n    /**\n     * Replace the value of element at the index you give.\n     * Will throw if the index is out of bounds!\n     */\n    replace(index: number, val: T): Vector<T> {\n        if (index >= this.length() || index < 0) {\n            throw new Error('Vector.replace: index is out of range: ' + index);\n        }\n        return new Vector(L.update(index, val, this._list));\n    }\n\n    /**\n     * Replace the first occurence (if any) of the element you give by\n     * the new value you give.\n     *\n     *     Vector.of(1, 2, 3, 4, 2).replaceFirst(2, 5)\n     *     => Vector.of(1, 5, 3, 4, 2)\n     *\n     */\n    replaceFirst(element: T&WithEquality, newVal: T&WithEquality): Vector<T> {\n        // it's a little annoying that areEqual will check whether the element\n        // has an equals function for each element in the list, but then\n        // what if the list allows null or undefined and the newVal is null or\n        // undefined? With type erasure then I don't know what equality to use\n        // on the next elements\n        const index = L.findIndex(v => areEqual(v, element), this._list);\n        return (index >= 0)\n            ? new Vector(L.update(index, newVal, this._list))\n            : this;\n    }\n\n    /**\n     * Replace all occurences of the element you give by\n     * the new value you give.\n     *\n     *     Vector.of(1, 2, 3, 4, 2).replaceAll(2, 5)\n     *     => Vector.of(1, 5, 3, 4, 5)\n     *\n     */\n    replaceAll(element: T&WithEquality, newVal: T&WithEquality): Vector<T> {\n        // if we're going to update many elements, then append in a loop\n        // would give better perf (not copying multiple times the same slice).\n        // if we won't update that many, update in a loop would give better perf...\n        // assuming it's the latter case.\n        let idx = 0;\n        return this.foldLeft(\n            this as Vector<T>,\n            (sofar, cur) => {\n                const r = areEqual(cur, element)\n                    ? new Vector(L.update(idx, newVal, sofar._list))\n                    : sofar;\n                ++idx;\n                return r;\n            });\n    }\n\n    /**\n     * Append an element at the end of the collection.\n     */\n    append(val:T): Vector<T> {\n        return new Vector(L.append(val, this._list));\n    }\n\n    /**\n     * Append multiple elements at the end of the collection.\n     * Note that arrays are also iterables.\n     */\n    appendAll(elts: Iterable<T>): Vector<T> {\n        if ((<any>elts)._list && (<any>elts).replace) {\n            // elts is a vector too\n            return new Vector(L.concat(this._list, (<Vector<T>>elts)._list));\n        }\n        return new Vector(L.concat(this._list, L.from(elts)));\n    }\n\n    /**\n     * Remove multiple elements from a vector\n     *\n     *     Vector.of(1,2,3,4,3,2,1).removeAll([2,4])\n     *     => Vector.of(1,3,3,1)\n     */\n    removeAll(elts:Iterable<T&WithEquality>): Vector<T> {\n        return <Vector<T>><any>SeqHelpers.removeAll(this, elts);\n    }\n\n    /**\n     * Get the first value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    head(): Option<T> {\n        return this.get(0);\n    }\n\n    /**\n     * Get the last value of the collection, if any.\n     * returns Option.Some if the collection is not empty,\n     * Option.None if it's empty.\n     */\n    last(): Option<T> {\n        return Option.of(L.last(this._list));\n    }\n\n    /**\n     * Return a new vector containing all the elements in this\n     * vector except the last one, or the empty vector if this\n     * is the empty vector.\n     *\n     *     Vector.of(1,2,3).init()\n     *     => Vector.of(1,2)\n     */\n    init(): Vector<T> {\n        return new Vector(L.pop(this._list));\n    }\n\n    /**\n     * Returns a new collection, discarding the first elements\n     * until one element fails the predicate. All elements\n     * after that point are retained.\n     */\n    dropWhile(predicate:(x:T)=>boolean): Vector<T> {\n        return new Vector(L.dropWhile(predicate, this._list));\n    }\n\n    /**\n     * Search for the first item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    find(predicate:(v:T)=>boolean): Option<T> {\n        return Option.of(L.find(predicate, this._list));\n    }\n\n    /**\n     * Search for the last item matching the predicate you pass,\n     * return Option.Some of that element if found,\n     * Option.None otherwise.\n     */\n    findLast(predicate:(v:T)=>boolean): Option<T> {\n        return Option.of(L.findLast(predicate, this._list));\n    }\n\n    /**\n     * Search for the first item matching the predicate you pass,\n     * returning its index in the form of Option.Some if found,\n     * Option.None otherwise.\n     */\n    findIndex(predicate:(v:T)=>boolean): Option<number> {\n        return Option.of(L.findIndex(predicate, this._list)).filter(i => i != -1);\n    }\n\n    /**\n     * Returns true if the predicate returns true for all the\n     * elements in the collection.\n     */\n    allMatch(predicate:(v:T)=>boolean): boolean {\n        return L.every(predicate, this._list);\n    }\n\n    /**\n     * Returns true if there the predicate returns true for any\n     * element in the collection.\n     */\n    anyMatch(predicate:(v:T)=>boolean): boolean {\n        return L.some(predicate, this._list);\n    }\n\n    /**\n     * Returns a pair of two collections; the first one\n     * will only contain the items from this collection for\n     * which the predicate you give returns true, the second\n     * will only contain the items from this collection where\n     * the predicate returns false.\n     *\n     *     Vector.of(1,2,3,4).partition(x => x%2===0)\n     *     => [Vector.of(2,4),Vector.of(1,3)]\n     */\n    partition<U extends T>(predicate:(v:T)=>v is U): [Vector<U>,Vector<Exclude<T,U>>];\n    partition(predicate:(x:T)=>boolean): [Vector<T>,Vector<T>];\n    partition(predicate:(v:T)=>boolean): [Vector<T>,Vector<T>] {\n        return <[Vector<T>,Vector<T>]>L.partition(predicate, this._list)\n            .map(x => new Vector(x));\n    }\n\n    /**\n     * Returns true if the item is in the collection,\n     * false otherwise.\n     */\n    contains(v:T&WithEquality): boolean {\n        return this.find(x => areEqual(x,v)).isSome();\n    }\n\n    /**\n     * Group elements in the collection using a classifier function.\n     * Elements are then organized in a map. The key is the value of\n     * the classifier, and in value we get the list of elements\n     * matching that value.\n     *\n     * also see [[Vector.arrangeBy]]\n     */\n    groupBy<C>(classifier: (v:T)=>C & WithEquality): HashMap<C,Vector<T>> {\n        return this.foldLeft(\n            HashMap.empty<C,Vector<T>>(),\n            (acc: HashMap<C,Vector<T>>, v:T) =>\n                acc.putWithMerge(\n                    classifier(v), Vector.of(v), // !!! DOUBLE CHECK THIS\n                    (v1:Vector<T>,v2:Vector<T>) => v1.append(<T>L.nth(0, v2._list))));\n    }\n\n    /**\n     * Matches each element with a unique key that you extract from it.\n     * If the same key is present twice, the function will return None.\n     *\n     * also see [[Vector.groupBy]]\n     */\n    arrangeBy<K>(getKey: (v:T)=>K&WithEquality): Option<HashMap<K,T>> {\n        return SeqHelpers.arrangeBy<T,K>(this, getKey);\n    }\n\n    /**\n     * Remove duplicate items; elements are mapped to keys, those\n     * get compared.\n     *\n     *     Vector.of(1,1,2,3,2,3,1).distinctBy(x => x);\n     *     => Vector.of(1,2,3)\n     */\n    distinctBy<U>(keyExtractor: (x:T)=>U&WithEquality): Vector<T> {\n        return <Vector<T>>SeqHelpers.distinctBy(this, keyExtractor);\n    }\n\n    [Symbol.iterator](): Iterator<T> {\n        return this._list[Symbol.iterator]();\n    }\n\n    /**\n     * Call a function for element in the collection.\n     */\n    forEach(fun:(x:T)=>void):Vector<T> {\n        L.forEach(fun, this._list);\n        return this;\n    }\n\n    /**\n     * Return a new collection where each element was transformed\n     * by the mapper function you give.\n     */\n    map<U>(fun:(x:T)=>U): Vector<U> {\n        return new Vector(L.map(fun, this._list));\n    }\n\n    /**\n     * Call a predicate for each element in the collection,\n     * build a new collection holding only the elements\n     * for which the predicate returned true.\n     */\n    filter<U extends T>(fun:(v:T)=>v is U): Vector<U>;\n    filter(fun:(v:T)=>boolean): Vector<T>;\n    filter(fun:(v:T)=>boolean): Vector<T> {\n        return new Vector(L.filter(fun, this._list));\n    }\n\n    /**\n     * Apply the mapper function on every element of this collection.\n     * The mapper function returns an Option; if the Option is a Some,\n     * the value it contains is added to the result Collection, if it's\n     * a None, the value is discarded.\n     *\n     *     Vector.of(1,2,6).mapOption(x => x%2===0 ?\n     *         Option.of(x+1) : Option.none<number>())\n     *     => Vector.of(3, 7)\n     */\n    mapOption<U>(mapper:(v:T)=>Option<U>): Vector<U> {\n        let vec = L.empty();\n        for (let i = 0; i < this.length(); i++) {\n            const v = mapper(<T>L.nth(i, this._list));\n            if (v.isSome()) {\n                vec = L.append(v.get(), vec);\n            }\n        }\n        return new Vector(vec);\n    }\n\n    /**\n     * Calls the function you give for each item in the collection,\n     * your function returns a collection, all the collections are\n     * concatenated.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper:(v:T)=>Vector<U>): Vector<U> {\n        return new Vector(L.chain(x => mapper(x)._list, this._list));\n    }\n\n    /**\n     * Reduces the collection to a single value using the\n     * associative binary function you give. Since the function\n     * is associative, order of application doesn't matter.\n     *\n     * Example:\n     *\n     *     Vector.of(1,2,3).fold(0, (a,b) => a + b);\n     *     => 6\n     */\n    fold(zero:T, fn:(v1:T,v2:T)=>T): T {\n        return this.foldLeft(zero, fn);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Left-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldLeft(\"!\", (xs,x) => x+xs);\n     *     => \"cba!\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the previous value and\n     *           the current collection item, and returning\n     *           an updated value.\n     */\n    foldLeft<U>(zero:U, fn:(soFar:U,cur:T)=>U):U {\n        return L.foldl(fn, zero, this._list);\n    }\n\n    /**\n     * Reduces the collection to a single value.\n     * Right-associative.\n     *\n     * Example:\n     *\n     *     Vector.of(\"a\", \"b\", \"c\").foldRight(\"!\", (x,xs) => xs+x);\n     *     => \"!cba\"\n     *\n     * @param zero The initial value\n     * @param fn A function taking the current collection item and\n     *           the previous value , and returning\n     *           an updated value.\n     */\n    foldRight<U>(zero: U, fn:(cur:T, soFar:U)=>U): U {\n        return L.foldr(fn, zero, this._list);\n    }\n\n\n    /**\n     * Returns the index of the first occurence of the value you give, if\n     * present\n     *\n     *     Vector.of(1, 2, 3, 4, 3).indexOf(3)\n     *     => Option.of(2)\n     */\n    indexOf(element: T & WithEquality): Option<number> {\n        return Option.of(L.findIndex(v => areEqual(v, element), this._list))\n            .filter(i => i >= 0);\n    }\n\n    /**\n     * Randomly reorder the elements of the collection.\n     */\n    shuffle(): Vector<T> {\n        return Vector.ofIterable(SeqHelpers.shuffle(this.toArray()));\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:Vector<T>)=>U): U {\n        return converter(this);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other:Vector<T&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if (!other || (!other._list) || (!L.isList(other._list))) {\n            return false;\n        }\n        if (this.length() !== other.length()) return false;\n        for (let i = 0; i < this.length(); i++) {\n            const myVal: T & WithEquality|null|undefined = <T&WithEquality>L.nth(i, this._list);\n            const hisVal: T & WithEquality|null|undefined = L.nth(i, other._list);\n            if ((myVal === undefined) !== (hisVal === undefined)) {\n                return false;\n            }\n            if (myVal === undefined || hisVal === undefined) {\n                // they are both undefined, the || is for TS's flow analysis\n                // so he realizes none of them is undefined after this.\n                continue;\n            }\n            if (!areEqual(myVal, hisVal)) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        let hash = 1;\n        for (let i=0;i<this.length();i++) {\n            hash = 31 * hash + getHashCode(L.nth(i, this._list));\n        }\n        return hash;\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     *\n     * Also see [[Vector.mkString]]\n     */\n    toString(): string {\n        let r = \"Vector(\";\n        for (let i=0;i<this.length();i++) {\n            if (i>0) {\n                r += \", \";\n            }\n            r += toStringHelper(L.nth(i, this._list));\n        }\n        return r + \")\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     * Most of the time should be the same as toString()\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n\n    /**\n     * Joins elements of the collection by a separator.\n     * Example:\n     *\n     *     Vector.of(1,2,3).mkString(\", \")\n     *     => \"1, 2, 3\"\n     */\n    mkString(separator: string): string {\n        let r = \"\";\n        for (let i=0;i<this.length();i++) {\n            if (i>0) {\n                r += separator;\n            }\n            r += toStringHelper(<T>L.nth(i, this._list), {quoteStrings:false});\n        }\n        return r;\n    }\n\n    /**\n     * Returns a new collection with elements\n     * sorted according to the comparator you give.\n     *\n     * also see [[Vector.sortOn]]\n     */\n    sortBy(compare: (v1:T,v2:T)=>Ordering): Vector<T> {\n        return Vector.ofIterable<T>(this.toArray().sort(compare));\n    }\n\n    /**\n     * Give a function associating a number or a string with\n     * elements from the collection, and the elements\n     * are sorted according to that value.\n     *\n     *     Vector.of({a:3,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a)\n     *     => Vector.of({a:1,b:\"test\"},{a:2,b:\"a\"},{a:3,b:\"b\"})\n     *\n     * You can also sort by multiple criteria, and request 'descending'\n     * sorting:\n     *\n     *     Vector.of({a:1,b:\"b\"},{a:1,b:\"test\"},{a:2,b:\"a\"}).sortOn(elt=>elt.a,{desc:elt=>elt.b})\n     *     => Vector.of({a:1,b:\"test\"},{a:1,b:\"b\"},{a:2,b:\"a\"})\n     *\n     * also see [[Vector.sortBy]]\n     */\n    sortOn(...getKeys: Array<ToOrderable<T>|{desc:ToOrderable<T>}>): Vector<T> {\n        return <Vector<T>>SeqHelpers.sortOn<T>(this, getKeys);\n    }\n\n    /**\n     * Convert this collection to a map. You give a function which\n     * for each element in the collection returns a pair. The\n     * key of the pair will be used as a key in the map, the value,\n     * as a value in the map. If several values get the same key,\n     * entries will be lost.\n     *\n     *     Vector.of(1,2,3).toMap(x=>[x.toString(), x])\n     *     => HashMap.of([\"1\",1], [\"2\",2], [\"3\",3])\n     */\n    toMap<K,V>(converter:(x:T)=>[K & WithEquality,V]): HashMap<K,V> {\n        return this.foldLeft(HashMap.empty<K,V>(), (acc,cur) => {\n            const converted = converter(cur);\n            return acc.put(converted[0], converted[1]);\n        });\n    }\n\n    /**\n     * Convert this collection to a set. Since the elements of the\n     * Seq may not support equality, you must pass a function returning\n     * a value supporting equality.\n     *\n     *     Vector.of(1,2,3,3,4).toSet(x=>x)\n     *     => HashSet.of(1,2,3,4)\n     */\n    toSet<K>(converter:(x:T)=>K&WithEquality): HashSet<K> {\n        return this.foldLeft(HashSet.empty<K>(), (acc,cur) => {\n            return acc.add(converter(cur));\n        });\n    }\n\n    /**\n     * Convert to array.\n     */\n    toArray(): T[] {\n        return L.toArray(this._list);\n    };\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return SeqHelpers.seqHasTrueEquality<T>(this);\n    }\n\n    /**\n     * Combine any number of iterables you give in as\n     * parameters to produce a new collection which combines all,\n     * in tuples. For instance:\n     *\n     *     Vector.zip(Vector.of(1,2,3), [\"a\",\"b\",\"c\"], LinkedList.of(8,9,10))\n     *     => Vector.of([1,\"a\",8], [2,\"b\",9], [3,\"c\",10])\n     *\n     * The result collection will have the length of the shorter\n     * of the input iterables. Extra elements will be discarded.\n     *\n     * Also see [the non-static version](#zip), which only combines two\n     * collections.\n     * @param A A is the type of the tuple that'll be generated\n     *          (`[number,string,number]` for the code sample)\n     */\n    static zip<A extends any[]>(...iterables: IterableArray<A>): Vector<A> {\n        let r = <L.List<A>>L.empty();\n        const iterators = iterables.map(i => i[Symbol.iterator]());\n        let items = iterators.map(i => i.next());\n\n        while (!items.some(item => item.done)) {\n            r = L.append<A>(<any>items.map(item => item.value), r);\n            items = iterators.map(i => i.next());\n        }\n        return new Vector(r);\n    }\n\n    /**\n     * Combine this collection with the collection you give in\n     * parameter to produce a new collection which combines both,\n     * in pairs. For instance:\n     *\n     *     Vector.of(1,2,3).zip([\"a\",\"b\",\"c\"])\n     *     => Vector.of([1,\"a\"], [2,\"b\"], [3,\"c\"])\n     *\n     * The result collection will have the length of the shorter\n     * of both collections. Extra elements will be discarded.\n     *\n     * Also see [[Vector.zip]] (static version which can more than two\n     * iterables)\n     */\n    zip<U>(other: Iterable<U>): Vector<[T,U]> {\n        let r = <L.List<[T,U]>>L.empty();\n        const thisIterator = this[Symbol.iterator]();\n        const otherIterator = other[Symbol.iterator]();\n        let thisCurItem = thisIterator.next();\n        let otherCurItem = otherIterator.next();\n\n        while (!thisCurItem.done && !otherCurItem.done) {\n            r = L.append<[T,U]>([thisCurItem.value, otherCurItem.value], r);\n            thisCurItem = thisIterator.next();\n            otherCurItem = otherIterator.next();\n        }\n        return new Vector(r);\n    }\n\n    /**\n     * Reverse the collection. For instance:\n     *\n     *     Vector.of(1,2,3).reverse();\n     *     => Vector.of(3,2,1)\n     */\n    reverse(): Vector<T> {\n        return new Vector(L.reverse(this._list));\n    }\n\n    /**\n     * Combine this collection with the index of the elements\n     * in it. Handy if you need the index when you map on\n     * the collection for instance:\n     *\n     *     Vector.of(\"a\",\"b\").zipWithIndex().map(([v,idx]) => v+idx)\n     *     => Vector.of(\"a0\", \"b1\")\n     */\n    zipWithIndex(): Vector<[T,number]> {\n        return <Vector<[T,number]>>SeqHelpers.zipWithIndex<T>(this);\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate.\n     */\n    takeWhile(predicate:(x:T)=>boolean): Vector<T> {\n        return new Vector(L.takeWhile(predicate, this._list));\n    }\n\n    /**\n     * Returns a new collection, discarding the elements\n     * after the first element which fails the predicate,\n     * but starting from the end of the collection.\n     *\n     *     Vector.of(1,2,3,4).takeRightWhile(x => x > 2)\n     *     => Vector.of(3,4)\n     */\n    takeRightWhile(predicate:(x:T)=>boolean): Vector<T> {\n        return new Vector(L.takeLastWhile(predicate, this._list));\n    }\n\n    /**\n     * Split the collection at a specific index.\n     *\n     *     Vector.of(1,2,3,4,5).splitAt(3)\n     *     => [Vector.of(1,2,3), Vector.of(4,5)]\n     */\n    splitAt(index:number): [Vector<T>,Vector<T>] {\n        if (index < 0) {\n            return [Vector.empty<T>(), this];\n        }\n        return <[Vector<T>,Vector<T>]>L.splitAt(index, this._list).map(x => new Vector(x));\n    }\n\n    /**\n     * Takes a predicate; returns a pair of collections.\n     * The first one is the longest prefix of this collection\n     * which satisfies the predicate, and the second collection\n     * is the remainder of the collection.\n     *\n     *    Vector.of(1,2,3,4,5,6).span(x => x <3)\n     *    => [Vector.of(1,2), Vector.of(3,4,5,6)]\n     */\n    span(predicate:(x:T)=>boolean): [Vector<T>,Vector<T>] {\n        // could be potentially faster using splitAt.\n        const first = this.takeWhile(predicate);\n        return [first, this.drop(first.length())];\n    }\n\n    /**\n     * Returns a new collection with the first\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    drop(n:number): Vector<T> {\n        return new Vector(L.drop(n, this._list));\n    }\n\n    /**\n     * Return a new collection containing the first n\n     * elements from this collection\n     *\n     *     Vector.of(1,2,3,4).take(2)\n     *     => Vector.of(1,2)\n     */\n    take(n:number): Vector<T> {\n        if (n<0) {\n            return Vector.empty<T>();\n        }\n        return new Vector(L.take(n, this._list));\n    }\n\n    /**\n     * Prepend an element at the beginning of the collection.\n     */\n    prepend(elt: T): Vector<T> {\n        return new Vector(L.prepend(elt, this._list));\n    }\n\n    /**\n     * Prepend multiple elements at the beginning of the collection.\n     */\n    prependAll(elts: Iterable<T>): Vector<T> {\n        return Vector.ofIterable(elts).appendAll(this);\n    }\n\n    /**\n     * Removes the first element matching the predicate\n     * (use [[Seq.filter]] to remove all elements matching a predicate)\n     */\n    removeFirst(predicate: (v:T)=>boolean): Vector<T> {\n        const v1 = this.takeWhile(x => !predicate(x));\n        return v1.appendAll(this.drop(v1.length()+1));\n    }\n\n    /**\n     * Returns a new collection with the last\n     * n elements discarded.\n     * If the collection has less than n elements,\n     * returns the empty collection.\n     */\n    dropRight(n:number): Vector<T> {\n        if (n>=this.length()) {\n            return Vector.empty<T>();\n        }\n        return new Vector(L.dropLast(n, this._list));\n    }\n\n    /**\n     * Returns a new collection, discarding the last elements\n     * until one element fails the predicate. All elements\n     * before that point are retained.\n     */\n    dropRightWhile(predicate:(x:T)=>boolean): Vector<T> {\n        let i=this.length()-1;\n        for (;i>=0;i--) {\n            if (!predicate(<T>L.nth(i, this._list))) {\n                return this.take(i+1);\n            }\n        }\n        return Vector.empty<T>();\n    }\n\n    /**\n     * Get all the elements in the collection but the first one.\n     * If the collection is empty, return None.\n     */\n    tail(): Option<Vector<T>> {\n        if (this.isEmpty()) {\n            return Option.none<Vector<T>>();\n        }\n        return Option.of(new Vector(L.tail(this._list)));\n    }\n\n    /**\n     * Reduces the collection to a single value by repeatedly\n     * calling the combine function.\n     * No starting value. The order in which the elements are\n     * passed to the combining function is undetermined.\n     */\n    reduce(combine: (v1:T,v2:T)=>T): Option<T> {\n        return SeqHelpers.reduce(this, combine);\n    }\n\n    /**\n     * Compare values in the collection and return the smallest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[Vector.minOn]]\n     */\n    minBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.minBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the smallest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Vector.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).minOn(x=>x.age)\n     *     => Option.of({name:\"Paula\", age:6})\n     *\n     * also see [[Vector.minBy]]\n     */\n    minOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.minOn(this, getOrderable);\n    }\n\n    /**\n     * Compare values in the collection and return the largest element.\n     * Returns Option.none if the collection is empty.\n     *\n     * also see [[Vector.maxOn]]\n     */\n    maxBy(compare: (v1:T,v2:T)=>Ordering): Option<T> {\n        return SeqHelpers.maxBy(this, compare);\n    }\n\n    /**\n     * Call the function you give for each value in the collection\n     * and return the element for which the result was the largest.\n     * Returns Option.none if the collection is empty.\n     *\n     *     Vector.of({name:\"Joe\", age:12}, {name:\"Paula\",\n     * age:6}).maxOn(x=>x.age)\n     *     => Option.of({name:\"Joe\", age:12})\n     *\n     * also see [[Vector.maxBy]]\n     */\n    maxOn(getOrderable: ToOrderable<T>): Option<T> {\n        return SeqHelpers.maxOn(this, getOrderable);\n    }\n\n    /**\n     * Call the function you give for each element in the collection\n     * and sum all the numbers, return that sum.\n     * Will return 0 if the collection is empty.\n     *\n     *     Vector.of(1,2,3).sumOn(x=>x)\n     *     => 6\n     */\n    sumOn(getNumber: (v:T)=>number): number {\n        return SeqHelpers.sumOn(this, getNumber);\n    }\n\n    /**\n     * Slides a window of a specific size over the sequence.\n     * Returns a lazy stream so memory use is not prohibitive.\n     *\n     *     Vector.of(1,2,3,4,5,6,7,8).sliding(3)\n     *     => Stream.of(Vector.of(1,2,3), Vector.of(4,5,6), Vector.of(7,8))\n     */\n    sliding(count:number): Stream<Vector<T>> {\n        return <Stream<Vector<T>>>SeqHelpers.sliding(this, count);\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The last element of the result is the final cumulative result.\n     *\n     *     Vector.of(1,2,3).scanLeft(0, (soFar,cur)=>soFar+cur)\n     *     => Vector.of(0,1,3,6)\n     */\n    scanLeft<U>(init:U, fn:(soFar:U,cur:T)=>U): Vector<U> {\n        return new Vector(L.scan(fn, init, this._list));\n    }\n\n    /**\n     * Apply the function you give to all elements of the sequence\n     * in turn, keeping the intermediate results and returning them\n     * along with the final result in a list.\n     * The first element of the result is the final cumulative result.\n     *\n     *     Vector.of(1,2,3).scanRight(0, (cur,soFar)=>soFar+cur)\n     *     => Vector.of(6,5,3,0)\n     */\n    scanRight<U>(init:U, fn:(cur:T,soFar:U)=>U): Vector<U> {\n        const r:U[] = [];\n        r.unshift(init);\n        let cur = init;\n        for (let i = this.length()-1; i>=0; i--) {\n            cur = fn(<T>L.nth(i, this._list), cur);\n            r.unshift(cur);\n        }\n        return Vector.ofIterable(r);\n    }\n}\n\n\nexport const vectorOf = Vector.of\n\nexport const vectorOfIterable = Vector.ofIterable\n", "export function Bind(): MethodDecorator {\n  return function <T>(\n    target: Object,\n    propertyKey: string | symbol,\n    descriptor: TypedPropertyDescriptor<T>\n  ) {\n    const fn = descriptor.value\n\n    return {\n      configurable: true,\n      get() {\n        return (fn as any).bind(this)\n      }\n    } as TypedPropertyDescriptor<T>\n  }\n}\n", "/**\n * The [[Either]] type represents an alternative between two value types.\n * A \"left\" value which is also conceptually tied to a failure,\n * or a \"right\" value which is conceptually tied to success.\n *\n * The code is organized through the class [[Left]], the class [[Right]],\n * and the type alias [[Either]] (Left or Right).\n *\n * Finally, \"static\" functions on Option are arranged in the class\n * [[EitherStatic]] and are accessed through the global constant Either.\n *\n * Examples:\n *\n *     Either.right<number,number>(5);\n *     Either.left<number,number>(2);\n *     Either.right<number,number>(5).map(x => x*2);\n *\n * Left has the extra [[Left.getLeft]] method that [[Right]] doesn't have.\n * Right has the extra [[Right.get]] method that [[Left]] doesn't have.\n */\n\nimport { Value, inspect } from \"./Value.js\"\nimport { Option } from \"./Option.js\"\nimport { LinkedList } from \"./LinkedList.js\"\nimport { Vector } from \"./Vector.js\"\nimport { WithEquality, areEqual,\n         hasTrueEquality, getHashCode } from \"./Comparison.js\";\nimport { contractTrueEquality} from \"./Contract.js\"\n\n/**\n * Holds the \"static methods\" for [[Either]]\n */\nexport class EitherStatic {\n    /**\n     * Constructs an Either containing a left value which you give.\n     */\n    left<L,R>(val: L): Either<L,R> {\n        return new Left<L,R>(val);\n    }\n\n    /**\n     * Constructs an Either containing a right value which you give.\n     */\n    right<L,R>(val: R): Either<L,R> {\n        return new Right<L,R>(val);\n    }\n\n    /**\n     * Curried type guard for Either\n     * Sometimes needed also due to https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Either.right<number,number>(2), Either.left<number,number>(1))\n     *         .filter(Either.isLeft)\n     *         .map(o => o.getLeft())\n     *     => Vector.of(1)\n     */\n    isLeft<L,R>(e: Either<L,R>): e is Left<L,R> {\n        return e.isLeft();\n    }\n\n    /**\n     * Curried type guard for Either\n     * Sometimes needed also due to https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Either.right<number,number>(2), Either.left<number,number>(1))\n     *         .filter(Either.isRight)\n     *         .map(o => o.get())\n     *     => Vector.of(2)\n     */\n    isRight<L,R>(e: Either<L,R>): e is Right<L,R> {\n        return e.isRight();\n    }\n\n    /**\n     * Turns a list of eithers in an either containing a list of items.\n     * Useful in many contexts.\n     *\n     *     Either.sequence(Vector.of(\n     *         Either.right<number,number>(1),\n     *         Either.right<number,number>(2)));\n     *     => Either.right(Vector.of(1,2))\n     *\n     * But if a single element is Left, everything is discarded:\n     *\n     *     Either.sequence(Vector.of(\n     *           Either.right<number,number>(1),\n     *           Either.left<number,number>(2),\n     *           Either.left<number,number>(3)));\n     *     => Either.left(2)\n     *\n     * Also see [[EitherStatic.traverse]]\n     */\n    sequence<L,R>(elts:Iterable<Either<L,R>>): Either<L,Vector<R>> {\n        return Either.traverse(elts, x=>x);\n    }\n\n    /**\n     * Takes a list, a function that can transform list elements\n     * to eithers, then return an either containing a list of\n     * the transformed elements.\n     *\n     *     const getUserById: (x:number)=>Either<string,string> = x => x > 0 ?\n     *         Either.right(\"user\" + x.toString()) : Either.left(\"invalid id!\");\n     *     Either.traverse([4, 3, 2], getUserById);\n     *     => Either.right(Vector.of(\"user4\", \"user3\", \"user2\"))\n     *\n     * But if a single element results in Left, everything is discarded:\n     *\n     *     const getUserById: (x:number)=>Either<string,string> = x => x > 0 ?\n     *         Either.right(\"user\" + x.toString()) : Either.left(\"invalid id!\");\n     *     Either.traverse([4, -3, 2], getUserById);\n     *     => Either.left(\"invalid id!\")\n     *\n     * Also see [[EitherStatic.sequence]]\n     */\n    traverse<T,L,R>(elts:Iterable<T>, fn: (x:T)=>Either<L,R>): Either<L,Vector<R>> {\n        let r = Vector.empty<R>();\n        const iterator = elts[Symbol.iterator]();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            const v = fn(curItem.value);\n            if (v.isLeft()) {\n                return <any>v;\n            }\n            r = r.append(v.get());\n            curItem = iterator.next();\n        }\n        return Either.right<L,Vector<R>>(r);\n    }\n\n    /**\n     * Turns a list of eithers in an either containing a list of items.\n     * Compared to [[EitherStatic.sequence]], sequenceAcc 'accumulates'\n     * the errors, instead of short-circuiting on the first error.\n     *\n     *     Either.sequenceAcc(Vector.of(\n     *         Either.right<number,number>(1),\n     *         Either.right<number,number>(2)));\n     *     => Either.right(Vector.of(1,2))\n     *\n     * But if a single element is Left, you get all the lefts:\n     *\n     *     Either.sequenceAcc(Vector.of(\n     *           Either.right<number,number>(1),\n     *           Either.left<number,number>(2),\n     *           Either.left<number,number>(3)));\n     *     => Either.left(Vector.of(2,3))\n     */\n    sequenceAcc<L,R>(elts:Iterable<Either<L,R>>): Either<Vector<L>,Vector<R>> {\n        const [lefts,rights] = Vector.ofIterable(elts).partition(Either.isLeft);\n        if (lefts.isEmpty()) {\n            return Either.right<Vector<L>,Vector<R>>(rights.map(r => r.getOrThrow()));\n        }\n        return Either.left<Vector<L>,Vector<R>>(lefts.map(l => l.getLeft()));\n    }\n\n    /**\n     * Applicative lifting for Either.\n     * Takes a function which operates on basic values, and turns it\n     * in a function that operates on eithers of these values ('lifts'\n     * the function). The 2 is because it works on functions taking two\n     * parameters.\n     *\n     *     const lifted = Either.liftA2(\n     *         (x:number,y:number) => x+y, {} as string);\n     *     lifted(\n     *         Either.right<string,number>(5),\n     *         Either.right<string,number>(6));\n     *     => Either.right(11)\n     *\n     *     const lifted = Either.liftA2(\n     *         (x:number,y:number) => x+y, {} as string);\n     *     lifted(\n     *         Either.right<string,number>(5),\n     *         Either.left<string,number>(\"bad\"));\n     *     => Either.left(\"bad\")\n     *\n     * @param R1 the first right type\n     * @param R2 the second right type\n     * @param L the left type\n     * @param V the new right type as returned by the combining function.\n     */\n    liftA2<R1,R2,L,V>(fn:(v1:R1,v2:R2)=>V, leftWitness?: L) : (p1:Either<L,R1>, p2:Either<L,R2>) => Either<L,V> {\n        return (p1,p2) => p1.flatMap(a1 => p2.map(a2 => fn(a1,a2)));\n    }\n\n    /**\n     * Applicative lifting for Either. 'p' stands for 'properties'.\n     *\n     * Takes a function which operates on a simple JS object, and turns it\n     * in a function that operates on the same JS object type except which each field\n     * wrapped in an Either ('lifts' the function).\n     * It's an alternative to [[EitherStatic.liftA2]] when the number of parameters\n     * is not two.\n     *\n     *     const fn = (x:{a:number,b:number,c:number}) => x.a+x.b+x.c;\n     *     const lifted = Either.liftAp(fn, {} as number);\n     *     lifted({\n     *         a: Either.right<number,number>(5),\n     *         b: Either.right<number,number>(6),\n     *         c: Either.right<number,number>(3)});\n     *     => Either.right(14)\n     *\n     *     const lifted = Either.liftAp<number,{a:number,b:number},number>(\n     *         x => x.a+x.b);\n     *     lifted({\n     *         a: Either.right<number,number>(5),\n     *         b: Either.left<number,number>(2)});\n     *     => Either.left(2)\n     *\n     * @param L the left type\n     * @param A the object property type specifying the parameters for your function\n     * @param B the type returned by your function, returned wrapped in an either by liftAp.\n     */\n    liftAp<L,A,B>(fn:(x:A)=>B, leftWitness?: L): (x: {[K in keyof A]: Either<L,A[K]>;}) => Either<L,B> {\n        return x => {\n            const copy:A = <any>{};\n            for (let p in x) {\n                if (x[p].isLeft()) {\n                    return <Either<L,B>><any>x[p];\n                }\n                copy[p] = x[p].getOrThrow();\n            }\n            return Either.right<L,B>(fn(copy));\n        }\n    }\n\n    /**\n     * Applicative lifting for Either. 'p' stands for 'properties'.\n     * Compared to [[EitherStatic.liftAp]], liftApAcc 'accumulates'\n     * the errors, instead of short-circuiting on the first error.\n     *\n     * Takes a function which operates on a simple JS object, and turns it\n     * in a function that operates on the same JS object type except which each field\n     * wrapped in an Either ('lifts' the function).\n     * It's an alternative to [[EitherStatic.liftA2]] when the number of parameters\n     * is not two.\n     *\n     *     const fn = (x:{a:number,b:number,c:number}) => x.a+x.b+x.c;\n     *     const lifted = Either.liftApAcc(fn, {} as number);\n     *     lifted({\n     *         a: Either.right<number,number>(5),\n     *         b: Either.right<number,number>(6),\n     *         c:Either.right<number,number>(3)});\n     *     => Either.right(14)\n     *\n     *     const fn = (x:{a:number,b:number,c:number}) => x.a+x.b+x.c;\n     *     const lifted = Either.liftApAcc(fn, {} as number);\n     *     lifted({\n     *         a: Either.right<number,number>(5),\n     *         b: Either.left<number,number>(2),\n     *         c: Either.left<number,number>(6)});\n     *     => Either.left(Vector.of(2, 6))\n     *\n     * @param L the left type\n     * @param A the object property type specifying the parameters for your function\n     * @param B the type returned by your function, returned wrapped in an either by liftAp.\n     */\n    liftApAcc<L,A,B>(fn:((x:A)=>B), leftWitness?: L): (x: {[K in keyof A]: Either<L,A[K]>;}) => Either<Vector<L>,B> {\n        const leftErrs: L[] = [];\n        return x => {\n            const copy:A = <any>{};\n            for (let p in x) {\n                const field = x[p];\n                if (field.isLeft()) {\n                    leftErrs.push(field.getLeft());\n                } else {\n                    copy[p] = x[p].getOrThrow();\n                }\n            }\n            if (leftErrs.length === 0) {\n                return Either.right<Vector<L>,B>(fn(copy));\n            } else {\n                return Either.left<Vector<L>,B>(Vector.ofIterable(leftErrs));\n            }\n        }\n    }\n\n    /**\n     * Take a partial function (may return undefined or throw),\n     * and lift it to return an [[Either]] instead.\n     *\n     * Note that unlike the [[OptionStatic.lift]] version, if\n     * the function returns undefined, the Either.lift version will throw\n     * (the Option.lift version returns None()): if you want to do\n     * pure side-effects which may throw, you're better off just using\n     * javascript try blocks.\n     *\n     * When using typescript, to help the compiler infer the left type,\n     * you can either pass a second parameter like `{} as <type>`, or\n     * call with `lift<L,R>(...)`.\n     *\n     *     const add = Either.lift((x:number,y:number) => x+y, {} as string);\n     *     add(1,2);\n     *     => Either.right(3)\n     *\n     *     const undef = Either.lift((x:number,y:number,z:number) => undefined);\n     *     undef(1,2,3);\n     *     => throws\n     *\n     *     const throws = Either.lift(() => {throw \"x\"});\n     *     throws();\n     *     => Either.left(\"x\")\n     */\n    lift<T extends any[],L,U>(fn: (...args: T)=>U, witness?: L): ((...args:T)=>Either<L,U>) {\n        return ((...args:T) => {\n            try {\n                const r = fn(...args);\n                if (r !== undefined) {\n                    return Either.right(r);\n                }\n            } catch (err) {\n                return Either.left(err);\n            }\n            throw new Error(\"liftEither got undefined!\");\n        }) as ((...args:T)=>Either<L,U>)\n    }\n\n    /**\n     * Take a no-parameter partial function (may return undefined or throw),\n     * call it, and return an [[Either]] instead.\n     *\n     * Note that unlike the [[OptionStatic.try_]] version, if\n     * the function returns undefined, this function will throw\n     * (the Option.try_ version returns None()): if you want to do\n     * pure side-effects which may throw, you're better off just using\n     * javascript try blocks.\n     *\n     * When using typescript, to help the compiler infer the left type,\n     * you can either pass a second parameter like `{} as <type>`, or\n     * call with `try<L,R>(...)`.\n     *\n     *     Either.try(Math.random, {} as string);\n     *     => Either.right(0.49884723907769635)\n     *\n     *     Either.try(() => undefined);\n     *     => throws\n     *\n     *     Either.try(() => {throw \"x\"});\n     *     => Either.left(\"x\")\n     *\n     * Also see [[EitherStatic.lift]], [[OptionStatic.try_]],\n     * [[OptionStatic.tryNullable]]\n     */\n    try<L,T>(fn:()=>T, witness: L): Either<L,T>\n    try<T, Err extends Error = Error>(fn:()=>T): Either<Err,T>\n    try(fn:()=>any, witness:any = undefined) {\n        return Either.lift(fn)();\n    }\n}\n\n/**\n * The Either constant allows to call the either \"static\" methods\n */\nexport const Either = new EitherStatic();\n\n/**\n * Either represents an alternative between two value types.\n * A \"left\" value which is also conceptually tied to a failure,\n * or a \"right\" value which is conceptually tied to success.\n * \"static methods\" available through [[EitherStatic]]\n */\nexport type Either<L,R> = Left<L,R> | Right<L,R>;\n\n/**\n * Represents an [[Either]] containing a left value,\n * conceptually tied to a failure.\n * \"static methods\" available through [[EitherStatic]]\n * @param L the \"left\" item type 'failure'\n * @param R the \"right\" item type 'success'\n */\nexport class Left<L,R> implements Value {\n    constructor(private value: L) {}\n\n    /**\n     * @hidden\n     */\n    readonly className: \"Left\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * Returns true since this is a Left\n     */\n    isLeft(): this is Left<L,R> {\n        return true;\n    }\n\n    /**\n     * Returns false since this is a Left\n     */\n    isRight(): this is Right<L,R> {\n        return false;\n    }\n\n    /**\n     * Returns true if this is either is a right and contains the value you give.\n     */\n    contains(val: R&WithEquality): boolean {\n        return false;\n    }\n\n    /**\n     * If this either is a right, applies the function you give\n     * to its contents and build a new right either, otherwise return this.\n     */\n    map<U>(fn: (x:R)=>U): Either<L,U> {\n        return <any>this;\n    }\n\n    /**\n     * If this either is a right, call the function you give with\n     * the contents, and return what the function returns, else\n     * returns this.\n     * This is the monadic bind.\n     */\n    flatMap<U>(fn: (x:R)=>Either<L,U>): Either<L,U> {\n        return <any>this;\n    }\n\n    /**\n     * If this either is a left, call the function you give with\n     * the left value and return a new either left with the result\n     * of the function, else return this.\n     */\n    mapLeft<U>(fn: (x:L)=>U): Either<U,R> {\n        return new Left<U,R>(fn(this.value));\n    }\n\n    /**\n     * Map the either: you give a function to apply to the value,\n     * a function in case it's a left, a function in case it's a right.\n     */\n    bimap<S,T>(fnL: (x:L)=>S,fnR: (x:R)=>T): Either<S,T> {\n        return new Left<S,T>(fnL(this.value));\n    }\n\n    /**\n     * \"filter\" the either. If it was a Left, it stays a Left.\n     * If it was a Right and the predicate you pass returns\n     * true for its value, return the either unchanged.\n     * But if it was a left and the predicate returns false,\n     * return a Left with the value returned by the function\n     * passed as second parameter.\n     *\n     *     Either.right<string,number>(-3)\n     *         .filter(x => x >= 0, v => \"got negative value: \" + v);\n     *     => Either.left<string,number>(\"got negative value: -3\")\n     */\n    filter(p: (x:R)=>boolean, filterVal: (x:R)=>L): Either<L,R> {\n        return this;\n    }\n\n    /**\n     * Combines two eithers. If this either is a right, returns it.\n     * If it's a left, returns the other one.\n     */\n    orElse(other: Either<L,R>): Either<L,R> {\n        return other;\n    }\n\n    /**\n     * Has no effect if this Either is a right. If it's a left however,\n     * the function you give will be called, receiving as parameter\n     * the left contents, and an Either equivalent to the one your\n     * function returns will be returned.\n     */\n    recoverWith(recoveryFn: (left:L)=>Either<L, R>): Either<L, R> {\n        return recoveryFn(this.value);\n    }\n\n    /**\n     * Execute a side-effecting function if the either\n     * is a right; returns the either.\n     */\n    ifRight(fn: (x:R)=>void): Either<L,R> {\n        return this;\n    }\n\n    /**\n     * Execute a side-effecting function if the either\n     * is a left; returns the either.\n     */\n    ifLeft(fn: (x:L)=>void): Either<L,R> {\n        fn(this.value);\n        return this;\n    }\n\n    /**\n     * Handle both branches of the either and return a value\n     * (can also be used for side-effects).\n     * This is the catamorphism for either.\n     *\n     *     Either.right<string,number>(5).match({\n     *         Left:  x => \"left \" + x,\n     *         Right: x => \"right \" + x\n     *     });\n     *     => \"right 5\"\n     */\n    match<U>(cases: {Left: (v:L)=>U, Right: (v:R)=>U}): U {\n        return cases.Left(this.value);\n    }\n\n    /**\n     * If this either is a right, return its value, else throw\n     * an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message, or an Error object.\n     */\n    getOrThrow(errorInfo?: Error|string): R {\n        if (typeof errorInfo === 'string') {\n            throw new Error(errorInfo || \"Left.getOrThrow called!\");\n        }\n        throw errorInfo || new Error(\"Left.getOrThrow called!\");\n    }\n\n    /**\n     * If this either is a right, return its value, else return\n     * the value you give.\n     */\n    getOrElse(other: R): R {\n        return other;\n    }\n    \n    /**\n     * If this is a right, return its value, else call `fn`\n     *\n     * @param fn\n     */\n    getOrCall(fn: () => R): R {\n        return fn()\n    }\n    \n    /**\n     * Get the value contained in this left.\n     * NOTE: we know it's there, since this method\n     * belongs to Left, not Either.\n     */\n    getLeft(): L {\n        return this.value;\n    }\n\n    /**\n     * If this either is a left, return its value, else throw\n     * an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message.\n     */\n    getLeftOrThrow(message?: string): L {\n        return this.value;\n    }\n\n    /**\n     * If this either is a left, return its value, else return\n     * the value you give.\n     */\n    getLeftOrElse(other: L): L {\n        return this.value;\n    }\n    \n    /**\n     * If this is a left, return its value, else call `fn`\n     *\n     * @param fn\n     */\n    getLeftOrCall(fn: () => L): L {\n        return this.value\n    }\n\n    /**\n     * Convert this either to an option, conceptually dropping\n     * the left (failing) value.\n     */\n    toOption(): Option<R> {\n        return Option.none<R>();\n    }\n\n    /**\n     * Convert to a vector. If it's a left, it's the empty\n     * vector, if it's a right, it's a one-element vector with\n     * the contents of the either.\n     */\n    toVector(): Vector<R> {\n        return Vector.empty<R>();\n    }\n\n    /**\n     * Convert to a list. If it's a left, it's the empty\n     * list, if it's a right, it's a one-element list with\n     * the contents of the either.\n     */\n    toLinkedList(): LinkedList<R> {\n        return LinkedList.empty<R>();\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:Either<L,R>)=>U): U {\n        return converter(this);\n    }\n\n    hasTrueEquality(): boolean {\n        return (this.value && (<any>this.value).hasTrueEquality) ?\n            (<any>this.value).hasTrueEquality() :\n            hasTrueEquality(this.value).getOrElse(false);\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return getHashCode(this.value);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Either<L&WithEquality,R&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if ((!other) || (!other.isRight) || other.isRight()) {\n            return false;\n        }\n        const leftOther = <Left<L&WithEquality,R&WithEquality>>other;\n        contractTrueEquality(\"Either.equals\", this, leftOther);\n        return areEqual(this.value, leftOther.value);\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return \"Left(\" + this.value + \")\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n\n/**\n * Represents an [[Either]] containing a success value,\n * conceptually tied to a success.\n * \"static methods\" available through [[EitherStatic]]\n * @param L the \"left\" item type 'failure'\n * @param R the \"right\" item type 'success'\n */\nexport class Right<L,R> implements Value {\n    constructor(private value: R) {}\n\n    /**\n     * @hidden\n     */\n    readonly className: \"Right\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * Returns false since this is a Right\n     */\n    isLeft(): this is Left<L,R> {\n        return false;\n    }\n\n    /**\n     * Returns true since this is a Right\n     */\n    isRight(): this is Right<L,R> {\n        return true;\n    }\n\n    /**\n     * Returns true if this is either is a right and contains the value you give.\n     */\n    contains(val: R&WithEquality): boolean {\n        return areEqual(this.value, val);\n    }\n\n    /**\n     * If this either is a right, applies the function you give\n     * to its contents and build a new right either, otherwise return this.\n     */\n    map<U>(fn: (x:R)=>U): Either<L,U> {\n        return new Right<L,U>(fn(this.value));\n    }\n\n    /**\n     * If this either is a right, call the function you give with\n     * the contents, and return what the function returns, else\n     * returns this.\n     * This is the monadic bind.\n     */\n    flatMap<U>(fn: (x:R)=>Either<L,U>): Either<L,U> {\n        return fn(this.value);\n    }\n\n    /**\n     * If this either is a left, call the function you give with\n     * the left value and return a new either left with the result\n     * of the function, else return this.\n     */\n    mapLeft<U>(fn: (x:L)=>U): Either<U,R> {\n        return <any>this;\n    }\n\n    /**\n     * Map the either: you give a function to apply to the value,\n     * a function in case it's a left, a function in case it's a right.\n     */\n    bimap<S,T>(fnL: (x:L)=>S,fnR: (x:R)=>T): Either<S,T> {\n        return new Right<S,T>(fnR(this.value));\n    }\n\n    /**\n     * \"filter\" the either. If it was a Left, it stays a Left.\n     * If it was a Right and the predicate you pass returns\n     * true for its value, return the either unchanged.\n     * But if it was a left and the predicate returns false,\n     * return a Left with the value returned by the function\n     * passed as second parameter.\n     *\n     *     Either.right<string,number>(-3)\n     *         .filter(x => x >= 0, v => \"got negative value: \" + v);\n     *     => Either.left<string,number>(\"got negative value: -3\")\n     */\n    filter(p: (x:R)=>boolean, filterVal: (x:R)=>L): Either<L,R> {\n        if (p(this.value)) {\n            return this;\n        }\n        return new Left(filterVal(this.value));\n    }\n\n    /**\n     * Combines two eithers. If this either is a right, returns it.\n     * If it's a left, returns the other one.\n     */\n    orElse(other: Either<L,R>): Either<L,R> {\n        return this;\n    }\n    \n    /**\n     * Has no effect if this Either is a right. If it's a left however,\n     * the function you give will be called, receiving as parameter\n     * the left contents, and an Either equivalent to the one your\n     * function returns will be returned.\n     */\n    recoverWith(recoveryFn: (left:L)=>Either<L, R>): Either<L, R> {\n        return this;\n    }\n\n    /**\n     * Execute a side-effecting function if the either\n     * is a right; returns the either.\n     */\n    ifRight(fn: (x:R)=>void): Either<L,R> {\n        fn(this.value);\n        return this;\n    }\n\n    /**\n     * Execute a side-effecting function if the either\n     * is a left; returns the either.\n     */\n    ifLeft(fn: (x:L)=>void): Either<L,R> {\n        return this;\n    }\n\n    /**\n     * Handle both branches of the either and return a value\n     * (can also be used for side-effects).\n     * This is the catamorphism for either.\n     *\n     *     Either.right<string,number>(5).match({\n     *         Left:  x => \"left \" + x,\n     *         Right: x => \"right \" + x\n     *     });\n     *     => \"right 5\"\n     */\n    match<U>(cases: {Left: (v:L)=>U, Right: (v:R)=>U}): U {\n        return cases.Right(this.value);\n    }\n\n    /**\n     * Get the value contained in this right.\n     * NOTE: we know it's there, since this method\n     * belongs to Right, not Either.\n     */\n    get(): R {\n        return this.value;\n    }\n\n    /**\n     * If this either is a right, return its value, else throw\n     * an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message, or an Error object.\n     */\n    getOrThrow(errorInfo?: Error|string): R {\n        return this.value;\n    }\n\n    /**\n     * If this either is a right, return its value, else return\n     * the value you give.\n     */\n    getOrElse(other: R): R {\n        return this.value;\n    }\n    \n    /**\n     * If this is a right, return its value, else call `fn`\n     *\n     * @param fn\n     */\n    getOrCall(fn: () => R): R {\n        return this.value\n    }\n\n    /**\n     * If this either is a left, return its value, else throw\n     * an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message.\n     */\n    getLeftOrThrow(message?: string): L {\n        throw message || \"Left.getOrThrow called!\";\n    }\n\n    /**\n     * If this either is a left, return its value, else return\n     * the value you give.\n     */\n    getLeftOrElse(other: L): L {\n        return other;\n    }\n    \n    /**\n     * If this is a left, return its value, else call `fn`\n     *\n     * @param fn\n     */\n    getLeftOrCall(fn: () => L): L {\n        return fn()\n    }\n    \n\n    /**\n     * Convert this either to an option, conceptually dropping\n     * the left (failing) value.\n     */\n    toOption(): Option<R> {\n        return Option.of(this.value);\n    }\n\n    /**\n     * Convert to a vector. If it's a left, it's the empty\n     * vector, if it's a right, it's a one-element vector with\n     * the contents of the either.\n     */\n    toVector(): Vector<R> {\n        return Vector.of(this.value);\n    }\n\n    /**\n     * Convert to a list. If it's a left, it's the empty\n     * list, if it's a right, it's a one-element list with\n     * the contents of the either.\n     */\n    toLinkedList(): LinkedList<R> {\n        return LinkedList.of(this.value);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter:(x:Either<L,R>)=>U): U {\n        return converter(this);\n    }\n\n    hasTrueEquality(): boolean {\n        return (this.value && (<any>this.value).hasTrueEquality) ?\n            (<any>this.value).hasTrueEquality() :\n            hasTrueEquality(this.value).getOrElse(false);\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return getHashCode(this.value);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Either<L&WithEquality,R&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if ((!other) || (!other.isRight) || (!other.isRight())) {\n            return false;\n        }\n        const rightOther = <Right<L&WithEquality,R&WithEquality>>other;\n        contractTrueEquality(\"Either.equals\", this, rightOther);\n        return areEqual(this.value, rightOther.value);\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return \"Right(\" + this.value + \")\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n", "import _isNil from 'lodash/isNil.js'\nimport _isObject from 'lodash/isObject.js'\nimport _isString from 'lodash/isString.js'\nimport _isNumber from 'lodash/isNumber.js'\nimport _isFunction from 'lodash/isFunction.js'\nimport { applyTypeGuardExtras } from \"../applyTypeGuardExtras.js\"\n\n\nexport type UndefinedOrNull = undefined|null\n\n\n\nexport function isNil(o:any):o is UndefinedOrNull {\n\treturn _isNil(o)\n}\n\n/**\n * O is a valid object\n *\n * @param o\n */\nexport function isDefined<T>(o:any):o is Exclude<T, UndefinedOrNull>\nexport function isDefined(o:any):o is Exclude<any,UndefinedOrNull>\nexport function isDefined(o:any) {\n\treturn !isNil(o)\n}\n\nexport function isObject(o:any):o is Object {\n\treturn !isNil(o) && _isObject(o)\n}\n\nexport function isPromise(o:any):o is Promise<any> {\n\treturn !isNil(o) && isObject(o) && (o instanceof Promise || isFunction(o.then))\n}\n\n\nexport function isObjectType<T>(o:any,type:{new():T}):o is T {\n\treturn !isNil(o) && (o instanceof type || o.$$clazz === type.name)\n}\n\nexport function isString(o:any):o is string {\n\treturn !isNil(o) && _isString(o)\n}\n\nexport function isNumber(o:any):o is number {\n\treturn !isNil(o) && _isNumber(o) && !isNaN(o)\n}\n\nexport const isFunction = applyTypeGuardExtras<Function>(function isFunction(o:any):o is Function {\n\treturn !isNil(o) && _isFunction(o)\n})\n\nexport function isSymbol(o:any):o is Symbol {\n\treturn !isNil(o) && typeof o === 'symbol'\n}\n\nexport function isBoolean(o: any): o is boolean {\n\treturn typeof o === \"boolean\"\n}\n\nexport function isDate(o: any): o is Date {\n\treturn o instanceof Date\n}\n\nexport type Primitive = boolean | string | number\n\nexport type PrimitiveProducer<P extends Primitive = Primitive> = (...args: any[]) => P\n\nexport const PrimitiveProducers = Array<PrimitiveProducer>(String, Number, Boolean)\n\nexport function isPrimitiveProducer<P extends Primitive = Primitive>(o:any): o is PrimitiveProducer<P> {\n\treturn PrimitiveProducers.includes(o)\n}\n\nexport function isPrimitive(o:any): o is Primitive {\n\treturn isBoolean(o) || isString(o) || isNumber(o)\n}", "import type { TypeGuard, TypeGuardExtras } from \"./guards\"\n\nexport function applyTypeGuardExtras<T>(fn:TypeGuard<T>):TypeGuardExtras<T> {\n  (\n    fn as TypeGuardExtras<T>\n  ).lift = (o:any) => () => fn(o)\n  return fn as TypeGuardExtras<T>\n}", "import { isFunction, isString } from \"./primitive.js\"\n\nexport interface AssertOptions {\n  logErrorsToConsole: boolean\n}\n\nexport const DefaultAssertOptions:AssertOptions = {\n  logErrorsToConsole: false\n}\n\nlet assertOptions:AssertOptions = {...DefaultAssertOptions}\n\nexport function getAssertOptions() {\n  return {...assertOptions}\n}\n\nexport function setGlobalAssertOptions(options: AssertOptions) {\n  assertOptions = {...assertOptions, ...options}\n}\n\nexport class AssertError extends Error {\n  \n  \n  \n  constructor(message: string,  public readonly cause?: Error) {\n    super(message)\n  }\n}\n\n\nconst assertLift:AssertLift = <T>(test: (value:T) => boolean, messageProvider: string | ((value: T) => string)) => {\n  return (nextValue: T) => {\n    const ok = test(nextValue)\n    if (!ok) {\n      const message = isFunction(messageProvider) ? messageProvider(nextValue) : messageProvider ?? \"no message\"\n      throw new AssertError(message)\n    }\n  }\n}\n\nexport type AssertLift = <T>(test: (value:T) => boolean, message: string | ((value: T) => string)) =>\n  (nextValue: T) => void | never\n\nexport interface Assert {\n  (\n    test: (() => boolean) | boolean,\n    msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,\n    overrideOptions?: Partial<AssertOptions>\n  ): void | never\n  \n  lift: AssertLift\n}\n\n\nexport const assert: Assert = Object.assign((\n  test: (() => boolean) | boolean,\n  msg?: null | ((err?: Error) => Error | string) | Error | string | undefined,\n  overrideOptions: Partial<AssertOptions> = {}\n): void | never => {\n  const options = {...assertOptions, ...overrideOptions}\n  let result: boolean = false\n  let error: Error = undefined\n  \n  try {\n    result = isFunction(test) ? test() : test\n  } catch (err) {\n    error = err\n    if (options.logErrorsToConsole) {\n      console.error(`Assert failed: \"${test}\"`, err)\n    }\n  }\n  \n  if (!result || !!error) {\n    const errOut = !msg ? (error?.message ?? \"unknown\") :\n      isFunction(msg) ? msg(error) :\n        msg\n    throw isString(errOut) ? new AssertError(errOut, error) : errOut\n  }\n}, {\n  lift: assertLift\n})\n\n\n", "import { isNil, isPromise } from \"./guards/primitive.js\"\nimport type { ErrorHandler } from \"./types\"\n\nexport type GuardErrorHandler = (err:Error) => void\n\nlet globalErrorHandler:GuardErrorHandler | null\n\nexport function setGuardErrorHandler(errorHandler:GuardErrorHandler | null = null) {\n\tglobalErrorHandler = errorHandler\n}\n\nexport type ReturnTypeOrAny<Fn extends () => any> = (ReturnType<Fn> extends never ? unknown : ReturnType<Fn>)\n\n\n/**\n * Get a value in a guarded fashion\n * ensuring no exception\n *\n * @param fn\n * @param defaultValue\n * @returns {any}\n * @param errorHandler\n */\nexport function getValue<Fn extends () => any, T extends ReturnType<Fn> >(\n\tfn:Fn,\n\tdefaultValue: T = undefined,\n\terrorHandler: ErrorHandler = globalErrorHandler\n):T extends Promise<infer T2> ? Promise<T2> : T {\n\t\n\tlet result = null\n\n\ttry {\n\t\tresult = fn()\n\t\tif (isPromise(result))\n\t\t\treturn result\n\t\t\t\t.catch(err => {\n\t\t\t\t\tif (errorHandler)\n\t\t\t\t\t\terrorHandler(err)\n\n\t\t\t\t\treturn defaultValue\n\t\t\t\t})\n\t\t\t\t.then(value => isNil(value) ? defaultValue : value) as any\n\t} catch (err) {\n\t\tif (errorHandler)\n\t\t\terrorHandler(err)\n\t}\n\n\treturn isNil(result) ?\n\t\tdefaultValue : result\n}\n\n\nexport type GuardFn = <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler?: GuardErrorHandler | null) => (void | Promise<void>)\nexport type GuardTool = GuardFn & {\n\tlift: <T>(fn:() => T, localErrorHandler?: GuardErrorHandler | null) => ((fn:() => T, localErrorHandler?: GuardErrorHandler | null) => (void | Promise<void>))\n}\n\n\n\n/**\n * Execute a function guarded from exception\n *\n * @param fn\n * @param localErrorHandler\n * @returns {(fn:()=>any)=>(fn:()=>any)=>any}\n */\nconst guardFn:GuardFn = <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler: ((err: Error) => void) | null = null):void | Promise<void> => {\n\tconst value = getValue<Fn,T>(fn, undefined, localErrorHandler)\n\tif (isPromise(value))\n\t\treturn value.then(() => undefined as void)\n\t\n}\n\nexport const guard: GuardTool = Object.assign(guardFn, {\n\tlift: <Fn extends () => any, T extends ReturnType<Fn> >(fn:Fn, localErrorHandler?: GuardErrorHandler | null) =>\n\t\t(fn:Fn, localErrorHandler?: GuardErrorHandler | null): (void | Promise<void>) =>\n\t\t\tguardFn<Fn,T>(fn,localErrorHandler)\n})\n", "/**\n * The [[Option]] type expresses that a value may be present or not.\n * The code is organized through the class [[None]] (value not\n * present), the class [[Some]] (value present), and the type alias\n * [[Option]] (Some or None).\n *\n * Finally, \"static\" functions on Option are arranged in the class\n * [[OptionStatic]] and are accessed through the global constant Option.\n *\n * Examples:\n *\n *     Option.of(5);\n *     Option.none<number>();\n *     Option.of(5).map(x => x*2);\n *\n * To get the value out of an option, you can use [[Some.getOrThrow]],\n * or [[Some.get]]. The latter is available if you've checked that you\n * indeed have a some, for example:\n *\n *     const opt = Option.of(5);\n *     if (opt.isSome()) {\n *         opt.get();\n *     }\n *\n * You also have other options like [[Some.getOrElse]], [[Some.getOrUndefined]]\n * and so on. [[Some]] and [[None]] have the same methods, except that\n * Some has the extra [[Some.get]] method that [[None]] doesn't have.\n */\n\nimport { Value, inspect } from \"./Value.js\"\nimport { Vector } from \"./Vector.js\"\nimport { Either } from \"./Either.js\"\nimport {\n    WithEquality, areEqual, hasTrueEquality,\n    getHashCode,\n} from \"./Comparison.js\";\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { isBoolean, isFunction } from \"@3fv/guard\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * An Option is either [[Some]] or [[None]]\n * \"static methods\" available through [[OptionStatic]]\n * @param T the item type\n */\nexport type Option<T> = Some<T> | None<T>;\n\n\n/**\n * Holds the \"static methods\" for [[Option]]\n */\nexport class OptionStatic {\n\n    /**\n     * Builds an optional value.\n     * * T is wrapped in a [[Some]]\n     * * undefined becomes a [[None]]\n     * * null becomes a [[Some]].\n     *\n     *     Option.of(5).isSome()\n     *     => true\n     *\n     *     Option.of(undefined).isSome()\n     *     => false\n     *\n     *     Option.of(null).isSome()\n     *     => true\n     *\n     * Also see [[OptionStatic.some]], [[OptionStatic.ofNullable]]\n     */\n    of<T>(v: T | undefined): Option<T> {\n        return (v === undefined) ? <None<T>>none : new Some(v);\n    }\n\n    /**\n     * Build an optional value from a nullable.\n     * * T is wrapped in a [[Some]]\n     * * undefined becomes a [[None]]\n     * * null becomes a [[None]].\n     *\n     *     Option.ofNullable(5).isSome()\n     *     => true\n     *\n     *     Option.ofNullable(undefined).isSome()\n     *     => false\n     *\n     *     Option.ofNullable(null).isSome()\n     *     => false\n     *\n     * Also see [[OptionStatic.some]], [[OptionStatic.of]]\n     */\n    ofNullable<T>(v: T | undefined | null): Option<T> {\n        return (v !== undefined && v !== null) ? new Some(v) : <None<T>>none;\n    }\n\n    /**\n     * If value is `truthy`, is NOT in [null, undefined,false,0,NaN]\n     * the `Some` otherwise `None`\n     *\n     *     Option.ofTruthy(5).isSome()\n     *     => true\n     *\n     *     Option.ofTruthy(undefined).isSome()\n     *     => false\n     *\n     *     Option.ofTruthy(0).isSome()\n     *     => false\n     *\n     *     Option.ofTruthy(NaN).isSome()\n     *     => false\n     * @param v\n     */\n    ofTruthy<T>(v: T): Option<T> {\n      return [false, null, undefined, 0, NaN].includes(v as any) ?\n        <None<T>>none :\n        new Some(v)\n    }\n\n    /**\n     * Build a [[Some]], unlike [[OptionStatic.of]], which may build a [[Some]]\n     * or a [[None]].\n     * Will throw if given undefined.\n     *\n     *     Option.some(5).isSome()\n     *     => true\n     *\n     *     Option.some(undefined).isSome()\n     *     => throws\n     *\n     *     Option.some(null).isSome()\n     *     => true\n     *\n     * Also see [[OptionStatic.of]], [[OptionStatic.ofNullable]]\n     */\n    some<T>(v: T): Some<T> {\n        // the reason I decided to add a some in addition to 'of'\n        // instead of making 'of' smarter (which is possible in\n        // typescript, see https://github.com/bcherny/tsoption)\n        // is that sometimes you really want an Option, not a Some.\n        // for instance you can't mix an a Some and an Option in a list\n        // if you put the Some first, without calling asOption().\n        if (typeof v === \"undefined\") {\n            throw \"Option.some got undefined!\";\n        }\n        return new Some(v);\n    }\n\n    /**\n     * The optional value expressing a missing value.\n     */\n    none<T>(): Option<T> {\n        return <None<T>>none;\n    }\n\n    /**\n     * Curried type guard for Option\n     * Sometimes needed also due to https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Option.of(2), Option.none<number>())\n     *         .filter(Option.isSome)\n     *         .map(o => o.get())\n     *     => Vector.of(2)\n     */\n    isSome<T>(o: Option<T>): o is Some<T> {\n        return o.isSome();\n    }\n\n    /**\n     * Curried type guard for Option\n     * Sometimes needed also due to https://github.com/Microsoft/TypeScript/issues/20218\n     *\n     *     Vector.of(Option.of(2), Option.none<number>())\n     *         .filter(Option.isNone)\n     *     => Vector.of(Option.none<number>())\n     */\n    isNone<T>(o: Option<T>): o is None<T> {\n        return o.isNone();\n    }\n\n    /**\n     * Turns a list of options in an option containing a list of items.\n     * Useful in many contexts.\n     *\n     *     Option.sequence(Vector.of(Option.of(1),Option.of(2)))\n     *     => Option.of(Vector.of(1,2))\n     *\n     * But if a single element is None, everything is discarded:\n     *\n     *     Option.sequence(Vector.of(Option.of(1), Option.none()))\n     *     => Option.none()\n     *\n     * Also see [[OptionStatic.traverse]]\n     */\n    sequence<T>(elts: Iterable<Option<T>>): Option<Vector<T>> {\n        return Option.traverse(elts, x => x);\n    }\n\n    /**\n     * Takes a list, a function that can transform list elements\n     * to options, then return an option containing a list of\n     * the transformed elements.\n     *\n     *     const getUserById: (x:number)=>Option<string> = x => x > 0 ?\n     *         Option.of(\"user\" + x.toString()) : Option.none();\n     *     Option.traverse([4, 3, 2], getUserById);\n     *     => Option.of(Vector.of(\"user4\", \"user3\", \"user2\"))\n     *\n     * But if a single element results in None, everything is discarded:\n     *\n     *     const getUserById: (x:number)=>Option<string> = x => x > 0 ?\n     *         Option.of(\"user\" + x.toString()) : Option.none();\n     *     Option.traverse([4, -3, 2], getUserById);\n     *     => Option.none()\n     *\n     * Also see [[OptionStatic.sequence]]\n     */\n    traverse<T, U>(elts: Iterable<T>, fn: (x: T) => Option<U>): Option<Vector<U>> {\n        let r = Vector.empty<U>();\n        const iterator = elts[Symbol.iterator]();\n        let curItem = iterator.next();\n        while (!curItem.done) {\n            const v = fn(curItem.value);\n            if (v.isNone()) {\n                return <None<Vector<U>>>none;\n            }\n            r = r.append(v.get());\n            curItem = iterator.next();\n        }\n        return Option.of(r);\n    }\n\n    /**\n     * Applicative lifting for Option.\n     * Takes a function which operates on basic values, and turns it\n     * in a function that operates on options of these values ('lifts'\n     * the function). The 2 is because it works on functions taking two\n     * parameters.\n     *\n     *     const lifted = Option.liftA2((x:number,y:number) => x+y);\n     *     lifted(Option.of(5), Option.of(6));\n     *     => Option.of(11)\n     *\n     *     const lifted2 = Option.liftA2((x:number,y:number) => x+y);\n     *     lifted2(Option.of(5), Option.none<number>());\n     *     => Option.none()\n     *\n     * @param T the first option type\n     * @param U the second option type\n     * @param V the new type as returned by the combining function.\n     */\n    liftA2<T, U, V>(fn: (v1: T, v2: U) => V): (p1: Option<T>, p2: Option<U>) => Option<V> {\n        return (p1, p2) => p1.flatMap(a1 => p2.map(a2 => fn(a1, a2)));\n    }\n\n    /**\n     * Applicative lifting for Option. 'p' stands for 'properties'.\n     *\n     * Takes a function which operates on a simple JS object, and turns it\n     * in a function that operates on the same JS object type except which each field\n     * wrapped in an Option ('lifts' the function).\n     * It's an alternative to [[OptionStatic.liftA2]] when the number of parameters\n     * is not two.\n     *\n     *     const lifted = Option.liftAp((x:{a:number,b:number,c:number}) => x.a+x.b+x.c);\n     *     lifted({a:Option.of(5), b:Option.of(6), c:Option.of(3)});\n     *     => Option.of(14)\n     *\n     *     const lifted = Option.liftAp((x:{a:number,b:number}) => x.a+x.b);\n     *     lifted({a:Option.of(5), b:Option.none<number>()});\n     *     => Option.none()\n     *\n     * @param A the object property type specifying the parameters for your function\n     * @param B the type returned by your function, returned wrapped in an option by liftAp.\n     */\n    liftAp<A, B>(fn: (x: A) => B): (x: { [K in keyof A]: Option<A[K]>; }) => Option<B> {\n        return x => {\n            const copy: A = <any>{};\n            for (let p in x) {\n                if (x[p].isNone()) {\n                    return Option.none<B>();\n                }\n                copy[p] = x[p].getOrThrow();\n            }\n            return Option.of(fn(copy));\n        }\n    }\n\n    /**\n     * Take a partial function (may return undefined or throw),\n     * and lift it to return an [[Option]] instead.\n     * undefined becomes a [[None]], everything else a [[Some]]\n     *\n     *     const plus = Option.lift((x:number,y:number)=>x+y);\n     *     plus(1,2);\n     *     => Option.of(3)\n     *\n     *     const undef = Option.lift((x:number)=>undefined);\n     *     undef(1);\n     *     => Option.none()\n     *\n     *     const nl = Option.lift((x:number,y:number,z:number)=>null);\n     *     nl(1,2,3);\n     *     => Option.some(null)\n     *\n     *     const throws = Option.lift((x:number,y:number)=>{throw \"x\"});\n     *     throws(1,2);\n     *     => Option.none()\n     */\n    lift<T extends any[], U>(fn: (...args: T) => U | undefined): (...args: T) => Option<U> {\n        return (...args: T) => {\n            try {\n                return Option.of(fn(...args));\n            } catch {\n                return Option.none<U>();\n            }\n        };\n    }\n\n    /**\n     * Take a partial function (may return undefined or throw),\n     * and lift it to return an [[Option]] instead.\n     * null and undefined become a [[None]], everything else a [[Some]]\n     *\n     *     const plus = Option.liftNullable((x:number,y:number)=>x+y);\n     *     plus(1,2);\n     *     => Option.of(3)\n     *\n     *     const undef = Option.liftNullable((x:number,y:number,z:string)=>undefined);\n     *     undef(1,2,\"\");\n     *     => Option.none()\n     *\n     *     const nl = Option.liftNullable((x:number)=>null);\n     *     nl(1);\n     *     => Option.none()\n     *\n     *     const throws = Option.liftNullable((x:number,y:number)=>{throw \"x\"});\n     *     throws(1,2);\n     *     => Option.none()\n     */\n    liftNullable<T extends any[], U>(fn: (...args: T) => U | null | undefined): (...args: T) => Option<U> {\n        return (...args: T) => {\n            try {\n                return Option.ofNullable(fn(...args));\n            } catch {\n                return Option.none<U>();\n            }\n        };\n    }\n\n    /**\n     * Take a no-parameter partial function (may return undefined or throw),\n     * and call it, return an [[Option]] instead.\n     * undefined becomes a [[None]], everything else a [[Some]]\n     *\n     *     Option.try(Math.random);\n     *     => Option.of(0.49884723907769635)\n     *\n     *     Option.try(()=>undefined);\n     *     => Option.none()\n     *\n     *     Option.try(()=>null);\n     *     => Option.of(null)\n     *\n     *     Option.try(()=>{throw \"x\"});\n     *     => Option.none()\n     *\n     * Also see [[OptionStatic.tryNullable]], [[OptionStatic.lift]],\n     * [[OptionStatic.liftNullable]], [[EitherStatic.try_]].\n     */\n    try<T>(fn: () => T | undefined): Option<T> {\n        return Option.lift(fn)();\n    }\n\n    /**\n     * Take a no-parameter partial function (may return null, undefined or throw),\n     * and call it, return an [[Option]] instead.\n     * null and undefined become a [[None]], everything else a [[Some]]\n     *\n     *     Option.tryNullable(Math.random);\n     *     => Option.of(0.49884723907769635)\n     *\n     *     Option.tryNullable(()=>undefined);\n     *     => Option.none()\n     *\n     *     Option.tryNullable(()=>null);\n     *     => Option.none()\n     *\n     *     Option.tryNullable(()=>{throw \"x\"});\n     *     => Option.none()\n     *\n     * Also see [[OptionStatic.try_]], [[OptionStatic.liftNullable]],\n     * [[OptionStatic.lift]], [[EitherStatic.try_]].\n     */\n    tryNullable<T>(fn: () => T | null | undefined): Option<T> {\n        return Option.liftNullable(fn)();\n    }\n    \n    \n}\n\n/**\n * The Option constant allows to call the option \"static\" methods\n */\nexport const Option = new OptionStatic();\n\nfunction optionHasTrueEquality<T>(opt: Option<T>): boolean {\n    return opt.flatMap(\n        x => (x && (<any>x).hasTrueEquality) ?\n            Option.of((<any>x).hasTrueEquality()) :\n            hasTrueEquality(x))\n        .getOrElse(true);\n}\n\n/**\n * Some represents an [[Option]] with a value.\n * \"static methods\" available through [[OptionStatic]]\n *\n * [[Some]] and [[None]] have the same methods, except that\n * Some has the extra [[Some.get]] method that [[None]] doesn't have.\n * @param T the item type\n */\nexport class Some<T> implements Value {\n    /**\n     * @hidden\n     */\n    constructor(private value: T) { }\n\n    /**\n     * @hidden\n     */\n    readonly className: \"Some\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * Returns true since this is a Some (contains a value)\n     */\n    isSome(): this is Some<T> {\n        return true;\n    }\n\n    /**\n     * Returns false since this is a Some (contains a value)\n     */\n    isNone(): this is None<T> {\n        return false;\n    }\n\n    /**\n     * View this Some a as Option. Useful to help typescript type\n     * inference sometimes.\n     */\n    asOption(): Option<T> {\n        return this;\n    }\n\n    /**\n     * Get the value contained in this option.\n     * NOTE: we know it's there, since this method\n     * belongs to Some, not Option.\n     */\n    get(): T\n    get(orElse: T): T\n    get(orElse?: T | undefined): T {\n        return this.value\n    }\n\n    /**\n     * Combines two options. If this option is a Some, returns it.\n     * If it's a None, returns the other one.\n     */\n    orElse(other: Option<T> | (() => Option<T>)): Option<T> {\n        return this;\n    }\n\n    /**\n     * Get the value from this option if it's a Some, otherwise\n     * throw an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message.\n     */\n    getOrThrow(errorInfo?: Error | string): T {\n        return this.value;\n    }\n\n    /**\n     * Returns true if the option is a Some and contains the\n     * value you give, false otherwise.\n     */\n    contains(v: T & WithEquality): boolean {\n        return v === this.value;\n    }\n\n    /**\n     * Get the value contained in the option if it's a Some,\n     * return undefined if it's a None.\n     *\n     *     Option.of(5).getOrUndefined()\n     *     => 5\n     *\n     *     Option.none<number>().getOrUndefined()\n     *     => undefined\n     */\n    getOrUndefined(): T | undefined {\n        return this.value;\n    }\n\n    /**\n     * Get the value contained in the option if it's a Some,\n     * return null if it's a None.\n     *\n     *     Option.of(5).getOrNull()\n     *     => 5\n     *\n     *     Option.none<number>().getOrNull()\n     *     => null\n     */\n    getOrNull(): T | null {\n        return this.value;\n    }\n\n    /**\n     * Get the value from this option; if it's a None (no value\n     * present), then return the default value that you give.\n     */\n    getOrElse(alt: T): T {\n        return this.value;\n    }\n\n    /**\n     * Get the value from this option; if it's a None (no value\n     * present), then return the value returned by the function that you give.\n     *\n     *     Option.of(5).getOrCall(() => 6)\n     *     => 5\n     *\n     *     Option.none<number>().getOrCall(() => 6)\n     *     => 6\n     */\n    getOrCall(fn: () => T): T {\n        return this.value;\n    }\n\n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the option was None it'll stay None.\n     *\n     *     Option.of(5).map(x => x*2)\n     *     => Option.of(10)\n     *\n     *     Option.of(5).map(x => null)\n     *     => Option.of(null)\n     *\n     * Also see [[Some.mapNullable]], [[Some.flatMap]]\n     */\n    map<U>(fn: (v: T) => U): Option<U> {\n        return Option.of(fn(this.value));\n    }\n    \n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the option was None it'll stay None.\n     *\n     *     Option.of(5).mapIf(x => x <=4, (x:number) => x*2)\n     *     => Option.of(5)\n     *\n     *     Option.of(5).mapIf(x => x <=10, (x:number) => x*2)\n     *     => Option.of(10)\n     *\n     *\n     * Also see [[Some.mapNullable]], [[Some.flatMap]]\n     */\n    mapIf<U>(predicate: (v: T) => boolean, fn: (v: T) => U): Option<U | T> {\n        return !predicate(this.value) ? this : this.map(fn)\n    }\n    \n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     *     Option.of(5).tap(x => x*2)\n     *     => Option.of(5)\n     *\n     *     Option.of({ a: 1 }).tap(o => {\n     *       o.a++\n     *     })\n     *     => Option.of({ a: 2 })\n     *\n     * @param fn\n     * @return {this}\n     */\n    tap(fn: (v: T) => any): Option<T> {\n        return this.ifSome(fn)\n    }\n    \n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     *\n     *      Option.of({ a: 1 }).tapIf(false, o => {\n     *         o.a++\n     *      })\n     *      => Option.of({ a: 1 })\n     *\n     *     Option.of({ a: 1 }).tapIf(true, o => {\n     *       o.a++\n     *     })\n     *     => Option.of({ a: 2 })\n     *\n     *     Option.of({ a: 1 }).tapIf(\n     *      o => o.a !== 1,\n     *      o => {\n     *          o.a++\n     *      }\n     *     )\n     *     => Option.of({ a: 1 })\n     *\n     * @param fn\n     * @param predicate\n     * @return {this}\n     */\n    tapIf(predicate: boolean | ((v: T) => boolean), fn: (v: T) => any): Option<T> {\n        const isTrue = isBoolean(predicate) ? predicate === true : isFunction(predicate) ? predicate(this.value) : false\n        return isTrue ? this : this.tap(fn)\n    }\n\n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the mapped value is `null` or\n     * `undefined`, then a Some will turn into a None.\n     * If the option was None it'll stay None.\n     *\n     *     Option.of(5).mapNullable(x => x*2)\n     *     => Option.of(10)\n     *\n     *     Option.of(5).mapNullable(x => null)\n     *     => Option.none()\n     *\n     * Also see [[Some.map]], [[Some.flatMap]]\n     */\n    mapNullable<U>(fn: (v: T) => U | null | undefined): Option<U> {\n        return Option.ofNullable(fn(this.value));\n    }\n\n    /**\n     * If this is a Some, calls the function you give on\n     * the item in the option and return its result.\n     * If the option is a None, return none.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper: (v: T) => Option<U>): Option<U> {\n        return mapper(this.value);\n    }\n\n    /**\n     * If this is None, will return None. If it's a Some,\n     * and the contents match your predicate, return the option.\n     * If the contents don't match the predicate, return None.\n     */\n    filter<U extends T>(fn: (v: T) => v is U): Option<U>;\n    filter(fn: (v: T) => boolean): Option<T>;\n    filter(fn: (v: T) => boolean): Option<T> {\n        return fn(this.value) ? this : Option.none<T>();\n    }\n\n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     */\n    ifSome(fn: (v: T) => void): Option<T> {\n        fn(this.value);\n        return this;\n    }\n\n    /**\n     * Execute a side-effecting function if the option\n     * is a None; returns the option.\n     */\n    ifNone(fn: () => void): Option<T> {\n        return this;\n    }\n\n    /**\n     * Handle both branches of the option and return a value\n     * (can also be used for side-effects).\n     * This is the catamorphism for option.\n     *\n     *     Option.of(5).match({\n     *         Some: x  => \"got \" + x,\n     *         None: () => \"got nothing!\"\n     *     });\n     *     => \"got 5\"\n     */\n    match<U>(cases: { Some: (v: T) => U, None: () => U }): U {\n        return cases.Some(this.value);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter: (x: Option<T>) => U): U {\n        return converter(this);\n    }\n\n    /**\n     * Convert to a vector. If it's a None, it's the empty\n     * vector, if it's a Some, it's a one-element vector with\n     * the contents of the option.\n     */\n    toVector(): Vector<T> {\n        return Vector.of(this.value);\n    }\n\n    /**\n     * Convert to an either. You must provide a left value\n     * in case this is a None.\n     */\n    toEither<L>(left: L): Either<L, T> {\n        return Either.right<L, T>(this.value);\n    }\n\n    /**\n     * If this is a Some, return this object.\n     * If this is a None, return the result of the function.\n     */\n    orCall(_: () => Option<T>): Option<T> {\n      return this;\n    }\n\n    hasTrueEquality<T>(): boolean {\n        return optionHasTrueEquality(this);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Option<T & WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        // the .isSome doesn't test if it's a Some, but\n        // if the object has a field called isSome.\n        if (other === <None<T>>none || !other || !(<any>other).isSome) {\n            return false;\n        }\n\n        const someOther = <Some<T & WithEquality>>other;\n        contractTrueEquality(\"Option.equals\", this, someOther);\n        return areEqual(this.value, someOther.value);\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return getHashCode(this.value);\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return \"Some(\" + toStringHelper(this.value) + \")\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n\n/**\n * None represents an [[Option]] without value.\n * \"static methods\" available through [[OptionStatic]]\n *\n * [[Some]] and [[None]] have the same methods, except that\n * Some has the extra [[Some.get]] method that [[None]] doesn't have.\n * @param T the item type\n */\nexport class None<T> implements Value {\n\n    /**\n     * @hidden\n     */\n    readonly className: \"None\" = <any>undefined;  // https://stackoverflow.com/a/47841595/516188\n\n    /**\n     * Returns false since this is a None (doesn'tcontains a value)\n     */\n    isSome(): this is Some<T> {\n        return false;\n    }\n\n    /**\n     * Returns true since this is a None (doesn'tcontains a value)\n     */\n    isNone(): this is None<T> {\n        return true;\n    }\n\n    /**\n     * View this Some a as Option. Useful to help typescript type\n     * inference sometimes.\n     */\n    asOption(): Option<T> {\n        return this;\n    }\n\n    /**\n     * Combines two options. If this option is a Some, returns it.\n     * If it's a None, returns the other one.\n     */\n    orElse(other: Option<T> | (() => Option<T>)): Option<T> {\n        return typeof other === \"function\" ? other() : other\n    }\n\n\n    /**\n     * Get the value from this option if it's a Some, otherwise\n     * throw an exception.\n     * You can optionally pass a message that'll be used as the\n     * exception message, or an Error object.\n     */\n    getOrThrow(errorInfo?: Error | string): T & WithEquality {\n        if (typeof errorInfo === 'string') {\n            throw new Error(errorInfo || \"getOrThrow called on none!\");\n        }\n        throw errorInfo || new Error(\"getOrThrow called on none!\");\n    }\n\n    /**\n     * Returns true if the option is a Some and contains the\n     * value you give, false otherwise.\n     */\n    contains(v: T & WithEquality): boolean {\n        return false;\n    }\n\n    /**\n     * Shortcut for getOrElse() & getOrThrow\n     *\n     * Option.of(undefined)\n     *  .get() -> throws\n     *\n     * Option.of(undefined)\n     *  .get(\"value\") -> value\n     *\n     *\n     * @param orElse\n     */\n    get(): T\n    get(orElse: T): T\n    get(orElse?: T | undefined): T {\n        return typeof orElse !== \"boolean\" && !orElse ? this.getOrThrow() : this.getOrElse(orElse)\n    }\n\n    /**\n     * Get the value contained in the option if it's a Some,\n     * return undefined if it's a None.\n     *\n     *     Option.of(5).getOrUndefined()\n     *     => 5\n     *\n     *     Option.none<number>().getOrUndefined()\n     *     => undefined\n     */\n    getOrUndefined(): T | undefined {\n        return undefined;\n    }\n\n    /**\n     * Get the value contained in the option if it's a Some,\n     * return null if it's a None.\n     *\n     *     Option.of(5).getOrNull()\n     *     => 5\n     *\n     *     Option.none<number>().getOrNull()\n     *     => null\n     */\n    getOrNull(): T | null {\n        return null;\n    }\n\n    /**\n     * Get the value from this option; if it's a None (no value\n     * present), then return the default value that you give.\n     */\n    getOrElse(alt: T): T {\n        return alt;\n    }\n\n    /**\n     * Get the value from this option; if it's a None (no value\n     * present), then return the value returned by the function that you give.\n     *\n     *     Option.of(5).getOrCall(() => 6)\n     *     => 5\n     *\n     *     Option.none<number>().getOrCall(() => 6)\n     *     => 6\n     */\n    getOrCall(fn: () => T): T {\n        return fn();\n    }\n\n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the option was None it'll stay None.\n     *\n     *     Option.of(5).map(x => x*2)\n     *     => Option.of(10)\n     *\n     *     Option.of(5).map(x => null)\n     *     => Option.of(null)\n     *\n     * Also see [[None.mapNullable]], [[None.flatMap]]\n     */\n    map<U>(fn: (v: T) => U): Option<U> {\n        return <None<U>>none;\n    }\n    \n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the option was None it'll stay None.\n     *\n     *\n     * @param fn\n     * @param predicate\n     * @return {this}\n     */\n    mapIf(predicate: (v: T) => boolean, fn: (v: T) => any): Option<T> {\n        return this;\n    }\n    \n    /**\n     * Return a new option where the element (if present) was transformed\n     * by the mapper function you give. If the mapped value is `null` or\n     * `undefined`, then a Some will turn into a None.\n     * If the option was None it'll stay None.\n     *\n     *     Option.of(5).mapNullable(x => x*2)\n     *     => Option.of(10)\n     *\n     *     Option.of(5).mapNullable(x => null)\n     *     => Option.none()\n     *\n     * Also see [[None.map]], [[None.flatMap]]\n     */\n    mapNullable<U>(fn: (v: T) => U | null | undefined): Option<U> {\n        return <None<U>>none;\n    }\n\n    /**\n     * If this is a Some, calls the function you give on\n     * the item in the option and return its result.\n     * If the option is a None, return none.\n     * This is the monadic bind.\n     */\n    flatMap<U>(mapper: (v: T) => Option<U>): Option<U> {\n        return <None<U>>none;\n    }\n\n    /**\n     * If this is None, will return None. If it's a Some,\n     * and the contents match your predicate, return the option.\n     * If the contents don't match the predicate, return None.\n     */\n    filter<U extends T>(fn: (v: T) => v is U): Option<U>;\n    filter(fn: (v: T) => boolean): Option<T>;\n    filter(fn: (v: T) => boolean): Option<T> {\n        return <None<T>>none;\n    }\n\n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     */\n    ifSome(fn: (v: T) => void): Option<T> {\n        return this;\n    }\n\n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     */\n    ifNone(fn: () => void): Option<T> {\n        fn();\n        return this;\n    }\n    \n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     * @param fn\n     * @return {this}\n     */\n    tap(fn: (v: T) => any): Option<T> {\n        return this;\n    }\n    \n    /**\n     * Execute a side-effecting function if the option\n     * is a Some; returns the option.\n     *\n     *\n     * @param fn\n     * @param predicate\n     * @return {this}\n     */\n    tapIf(predicate: boolean | ((v: T) => boolean), fn: (v: T) => any): Option<T> {\n        return this;\n    }\n    \n    /**\n     * Handle both branches of the option and return a value\n     * (can also be used for side-effects).\n     * This is the catamorphism for option.\n     *\n     *     Option.of(5).match({\n     *         Some: x  => \"got \" + x,\n     *         None: () => \"got nothing!\"\n     *     });\n     *     => \"got 5\"\n     */\n    match<U>(cases: { Some: (v: T) => U, None: () => U }): U {\n        return cases.None();\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<U>(converter: (x: Option<T>) => U): U {\n        return converter(this);\n    }\n\n    /**\n     * Convert to a vector. If it's a None, it's the empty\n     * vector, if it's a Some, it's a one-element vector with\n     * the contents of the option.\n     */\n    toVector(): Vector<T> {\n        return Vector.empty<T>();\n    }\n\n    /**\n     * Convert to an either. You must provide a left value\n     * in case this is a None.\n     */\n    toEither<L>(left: L): Either<L, T> {\n        return Either.left<L, T>(left);\n    }\n\n    /**\n     * If this is a Some, return this object.\n     * If this is a None, return the result of the function.\n     */\n    orCall(fn: () => Option<T>): Option<T> {\n      return fn();\n    }\n\n    hasTrueEquality<T>(): boolean {\n        return optionHasTrueEquality(this);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Option<T & WithEquality>): boolean {\n        return other === <None<T>>none;\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return 1;\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return \"None()\";\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n\n/**\n * @hidden\n */\nexport const none = new None<any>();\n\n/**\n * Simpler shortcut to `Option.ofNullable`\n *\n * @param {T} o\n * @returns {Option<T>}\n */\nexport function asOption<T>(o?:T): Option<T> {\n    return Option.ofNullable(o)\n}\n", "import { Value, inspect } from \"./Value.js\"\nimport { Option } from \"./Option.js\"\nimport { Vector } from \"./Vector.js\"\nimport { LinkedList, ConsLinkedList } from \"./LinkedList.js\"\nimport { WithEquality, areEqual, getHashCode } from \"./Comparison.js\"\nimport { contractTrueEquality } from \"./Contract.js\"\nimport { toStringHelper } from \"./toStringHelper.js\"\n\n/**\n * Contains a pair of two values, which may or may not have the same type.\n * Compared to the builtin typescript [T,U] type, we get equality semantics\n * and helper functions (like mapping and so on).\n * @param T the first item type\n * @param U the second item type\n */\nexport class Tuple2<T,U> implements Value {\n\n    private constructor(private _fst: T,\n                        private _snd: U) {}\n\n    /**\n     * Build a pair of value from both values.\n     */\n    static of<T,U>(fst: T, snd: U) {\n        return new Tuple2(fst,snd);\n    }\n\n    /**\n     * Build a tuple2 from javascript array. Compared to [[Tuple2.ofPair]],\n     * it checks the length of the array and will return [[None]] in case\n     * the length isn't two. However the types of the elements aren't checked.\n     */\n    static ofArray<T,U>(pair: Array<T|U>): Option<Tuple2<T,U>> {\n        if (pair && pair.length === 2) {\n            return Option.of(new Tuple2<T,U>(<T>pair[0], <U>pair[1]));\n        }\n        return Option.none<Tuple2<T,U>>();\n    }\n\n    /**\n     * Build a tuple2 from javascript pair.\n     * Also see [[Tuple2.ofArray]]\n     */\n    static ofPair<T,U>(pair: [T, U]): Tuple2<T,U> {\n        return new Tuple2(pair[0], pair[1]);\n    }\n\n    /**\n     * @hidden\n     */\n    hasTrueEquality(): boolean {\n        return Option.of(this.fst()).hasTrueEquality() &&\n            Option.of(this.snd()).hasTrueEquality();\n    }\n\n    /**\n     * Extract the first value from the pair\n     */\n    fst(): T {\n        return this._fst;\n    }\n\n    /**\n     * Extract the second value from the pair\n     */\n    snd(): U {\n        return this._snd;\n    }\n\n    /**\n     * Maps the first component of this tuple to a new value.\n     */\n    map1<V>(fn: (v:T)=>V): Tuple2<V,U> {\n        return new Tuple2(fn(this._fst), this._snd);\n    }\n\n    /**\n     * Maps the second component of this tuple to a new value.\n     */\n    map2<V>(fn: (v:U)=>V): Tuple2<T,V> {\n        return new Tuple2(this._fst, fn(this._snd));\n    }\n\n    /**\n     * Make a new tuple by mapping both values inside this one.\n     */\n    map<T1,U1>(fn: (a:T,b:U)=> Tuple2<T1,U1>): Tuple2<T1,U1> {\n        return fn(this._fst, this._snd);\n    }\n\n    /**\n     * Transform this value to another value type.\n     * Enables fluent-style programming by chaining calls.\n     */\n    transform<V>(converter:(x:Tuple2<T,U>)=>V): V {\n        return converter(this);\n    }\n\n    /**\n     * Two objects are equal if they represent the same value,\n     * regardless of whether they are the same object physically\n     * in memory.\n     */\n    equals(other: Tuple2<T&WithEquality,U&WithEquality>): boolean {\n        if (<any>other === this) {\n            return true;\n        }\n        if (!other || !other._fst) {\n            return false;\n        }\n        contractTrueEquality(\"Tuple2.equals\", this, other);\n        return areEqual(this._fst, other._fst) &&\n            areEqual(this._snd, other._snd);\n    }\n\n    /**\n     * Get a number for that object. Two different values\n     * may get the same number, but one value must always get\n     * the same number. The formula can impact performance.\n     */\n    hashCode(): number {\n        return getHashCode(this._fst)*53 + getHashCode(this._snd);\n    }\n\n    /**\n     * Convert the tuple to a javascript pair.\n     * Compared to [[Tuple2.toArray]], it behaves the\n     * same at runtime, the only difference is the\n     * typescript type definition.\n     */\n    toPair(): [T,U] {\n        return [this._fst, this._snd];\n    }\n\n    /**\n     * Convert the tuple to a javascript array.\n     * Compared to [[Tuple2.toPair]], it behaves the\n     * same at runtime, the only difference is the\n     * typescript type definition.\n     */\n    toArray(): Array<T|U> {\n        return [this._fst, this._snd];\n    }\n\n    /**\n     * Convert the tuple to a vector.\n     */\n    toVector(): Vector<T|U> {\n        return Vector.of<T|U>(this._fst, this._snd);\n    }\n\n    /**\n     * Convert the tuple to a linked list.\n     */\n    toLinkedList(): ConsLinkedList<T|U> {\n        return LinkedList.of<T|U>(this._fst, this._snd);\n    }\n\n    /**\n     * Get a human-friendly string representation of that value.\n     */\n    toString(): string {\n        return `Tuple2(${toStringHelper(this._fst)}, ${toStringHelper(this._snd)})`;\n    }\n\n    /**\n     * Used by the node REPL to display values.\n     * Most of the time should be the same as toString()\n     */\n    [inspect](): string {\n        return this.toString();\n    }\n}\n", "/**\n * A predicate is a function taking one parameter and returning a boolean.\n * In other words the predicate checks whether some proposition holds for the parameter.\n *\n * The Predicate interface offers normal function-calling, to make sure that the\n * predicate holds (just call predicate(x)), but also some helper methods to\n * deal with logical operations between propositions.\n *\n * You can build predicates using [[PredicateStatic]] through the\n * 'Predicate' global constant.\n *\n * Examples:\n *\n *     const check = Predicate.of((x: number) => x > 10).and(x => x < 20);\n *     check(12); // => true\n *     check(21);\n *     => false\n *\n *     Vector.of(1,2,3,4,5).filter(\n *         Predicate.isIn([2,3]).negate())\n *     => Vector.of(1, 4, 5)\n */\nimport { WithEquality, areEqual } from \"./Comparison.js\"\nimport { Vector } from \"./Vector.js\"\n\n/**\n * A predicate is a function taking one parameter and returning a boolean.\n * In other words the predicate checks whether some proposition holds for the parameter.\n *\n * The Predicate interface offers normal function-calling, to make sure that the\n * predicate holds (just call predicate(x)), but also some helper methods to\n * deal with logical operations between propositions.\n *\n * You can build predicates using [[PredicateStatic]] through the\n * 'Predicate' global constant.\n */\nexport interface Predicate<T> {\n\n    /**\n     * Does the predicate hold for the value you give?\n     * Returns true or false\n     */\n    (x:T): boolean;\n\n    /**\n     * Combines two predicates with the 'and' logical operation.\n     * For instance:\n     *\n     *     Predicate.of((x: number) => x > 10).and(x => x < 20)\n     */\n    and(fn:(x:T)=>boolean): Predicate<T>;\n\n    /**\n     * Combines two predicates with the 'or' logical operation.\n     * For instance:\n     *\n     *     Predicate.of((x: number) => x < 5).or(x => x > 10)\n     */\n    or(fn:(x:T)=>boolean): Predicate<T>;\n\n    /**\n     * Unary operation to negate the predicate.\n     */\n    negate(): Predicate<T>;\n}\n\n/**\n * The Predicates class offers some helper functions to deal\n * with [[Predicate]] including the ability to build [[Predicate]]\n * from functions using [[PredicateStatic.of]], some builtin predicates\n * like [[PredicateStatic.isIn]], and the ability to combine to combine\n * Predicates like with [[PredicateStatic.allOf]].\n */\nexport class PredicateStatic {\n\n    /**\n     * Take a predicate function and of it to become a [[Predicate]]\n     * (enabling you to call [[Predicate.and]], and other logic operations on it)\n     */\n    of<T>(fn: (x:T)=>boolean): Predicate<T> {\n        const r = <Predicate<T>>fn;\n        r.and = (other:(x:T)=>boolean) => Predicate.of((x:T) => r(x) && other(x));\n        r.or = (other:(x:T)=>boolean) => Predicate.of((x:T) => r(x) || other(x));\n        r.negate = () => Predicate.of((x:T) => !fn(x));\n        return r;\n    }\n\n    /**\n     * Return a [[Predicate]] checking whether a value is equal to the\n     * value you give as parameter.\n     */\n    equals<T>(other: T&WithEquality): Predicate<T&WithEquality> {\n        return Predicate.of(x => areEqual(other, x));\n    }\n\n    /**\n     * Return a [[Predicate]] checking whether a value is contained in the\n     * list of values you give as parameter.\n     */\n    isIn<T>(others: Iterable<T&WithEquality>): Predicate<T&WithEquality> {\n        return Predicate.of<T&WithEquality>(x => Vector.ofIterable(others).contains(x));\n    }\n\n    /**\n     * Return a [[Predicate]] checking whether all of the predicate functions given hold\n     */\n    allOf<T>(...predicates: Array<(x:T)=>boolean>): Predicate<T> {\n        return Predicate.of<T>(x => Vector.ofIterable(predicates).allMatch(p=>p(x)));\n    }\n\n    /**\n     * Return a [[Predicate]] checking whether any of the predicate functions given hold\n     */\n    anyOf<T>(...predicates: Array<(x:T)=>boolean>): Predicate<T> {\n        return Predicate.of<T>(x => Vector.ofIterable(predicates).anyMatch(p=>p(x)));\n    }\n\n    /**\n     * Return a [[Predicate]] checking whether none of the predicate functions given hold\n     */\n    noneOf<T>(...predicates: Array<(x:T)=>boolean>): Predicate<T> {\n        return Predicate.of<T>(x => !Vector.ofIterable(predicates).anyMatch(p=>p(x)));\n    }\n}\n\n/**\n * The Predicate constant allows to call the [[Predicate]] \"static\" methods.\n */\nexport const Predicate = new PredicateStatic();\n", "/**\n * Rich functions with helpers such as [[Function1.andThen]],\n * [[Function2.apply1]] and so on.\n *\n * We support functions of arities up to 5. For each arity, we have\n * the interface ([[Function1]], [[Function2]], ...), builders are on functions\n * on [[Function1Static]], [[Function2Static]]... accessible on constants\n * named Function1, Function2,...\n *\n * Examples:\n *\n *     const combined = Function1.of((x:number)=>x+2).andThen(x=>x*3);\n *     combined(6);\n *     => 24\n *\n *     const plus5 = Function2.of((x:number,y:number)=>x+y).apply1(5);\n *     plus5(1);\n *     => 6\n */\n\n/**\n * Function0 encapsulates a parameterless function\n * which returns a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T the parameter type\n * @param U the result type\n */\nexport interface Function0<R> {\n\n    /**\n     * Invoke the function\n     */\n    (): R;\n\n    /**\n     * Returns a new composed function which first calls the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:R)=>V): Function0<V>;\n}\n\n/**\n * Function1 encapsulates a function taking a single parameter\n * and returning a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T the parameter type\n * @param U the result type\n */\nexport interface Function1<T,U> {\n\n    /**\n     * Invoke the function\n     */\n    (x:T): U;\n\n    /**\n     * Returns a new composed function which first applies the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:U)=>V): Function1<T,V>;\n\n    /**\n     *\n     */\n    compose<S>(fn:(x:S)=>T): Function1<S,U>;\n}\n\n/**\n * Function2 encapsulates a function taking two parameters\n * and returning a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T1 the first parameter type\n * @param T2 the second parameter type\n * @param R the result type\n */\nexport interface Function2<T1,T2,R> {\n\n    /**\n     * Invoke the function\n     */\n    (x:T1,y:T2): R;\n\n    /**\n     * Returns a new composed function which first applies the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:R)=>V): Function2<T1,T2,V>;\n\n    /**\n     * Returns a curried version of this function, for example:\n     *\n     *     const plus5 = Function2.of(\n     *         (x:number,y:number)=>x+y)\n     *            .curried()(5);\n     *     assert.equal(6, plus5(1));\n     */\n    curried(): Function1<T1,Function1<T2,R>>;\n\n    /**\n     * Returns a version of this function which takes a tuple\n     * instead of individual parameters. Useful in combination\n     * with [[Vector.zip]] for instance.\n     */\n    tupled(): Function1<[T1,T2],R>;\n\n    /**\n     * Returns a version of this function taking its parameters\n     * in the reverse order.\n     */\n    flipped(): Function2<T2,T1,R>;\n\n    /**\n     * Applies this function partially to one argument.\n     *\n     *     const plus5 = Function2.of(\n     *         (x:number,y:number)=>x+y)\n     *            .apply1(5);\n     *     assert.equal(6, plus5(1));\n     */\n    apply1(param1:T1): Function1<T2,R>;\n}\n\n/**\n * Function3 encapsulates a function taking three parameters\n * and returning a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T1 the first parameter type\n * @param T2 the second parameter type\n * @param T3 the third parameter type\n * @param R the result type\n */\nexport interface Function3<T1,T2,T3,R> {\n\n    /**\n     * Invoke the function\n     */\n    (x:T1,y:T2,z:T3): R;\n\n    /**\n     * Returns a new composed function which first applies the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:R)=>V): Function3<T1,T2,T3,V>;\n\n    /**\n     * Returns a curried version of this function, for example:\n     * See [[Function2.curried]]\n     */\n    curried(): Function1<T1,Function1<T2,Function1<T3,R>>>;\n\n    /**\n     * Returns a version of this function which takes a tuple\n     * instead of individual parameters.\n     */\n    tupled(): Function1<[T1,T2,T3],R>;\n\n    /**\n     * Returns a version of this function taking its parameters\n     * in the reverse order.\n     */\n    flipped(): Function3<T3,T2,T1,R>;\n\n    /**\n     * Applies this function partially to one argument.\n     *\n     *     const plus5 = Function3.of(\n     *         (x:number,y:number,z:number)=>x+y+z)\n     *            .apply1(5);\n     *     assert.equal(8, plus5(1,2));\n     */\n    apply1(param1:T1): Function2<T2,T3,R>;\n\n    /**\n     * Applies this function partially to two arguments.\n     *\n     *     const plus54 = Function3.of(\n     *         (x:number,y:number,z:number)=>x+y+z)\n     *            .apply2(5,4);\n     *     assert.equal(12, plus54(3));\n     */\n    apply2(param1:T1, param2: T2): Function1<T3,R>;\n}\n\n/**\n * Function4 encapsulates a function taking four parameters\n * and returning a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T1 the first parameter type\n * @param T2 the second parameter type\n * @param T3 the third parameter type\n * @param T4 the fourth parameter type\n * @param R the result type\n */\nexport interface Function4<T1,T2,T3,T4,R> {\n\n    /**\n     * Invoke the function\n     */\n    (x:T1,y:T2,z:T3,a:T4): R;\n\n    /**\n     * Returns a new composed function which first applies the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:R)=>V): Function4<T1,T2,T3,T4,V>;\n\n    /**\n     * Returns a curried version of this function, for example:\n     * See [[Function2.curried]]\n     */\n    curried(): Function1<T1,Function1<T2,Function1<T3,Function1<T4,R>>>>;\n\n    /**\n     * Returns a version of this function which takes a tuple\n     * instead of individual parameters.\n     */\n    tupled(): Function1<[T1,T2,T3,T4],R>;\n\n    /**\n     * Returns a version of this function taking its parameters\n     * in the reverse order.\n     */\n    flipped(): Function4<T4,T3,T2,T1,R>;\n\n    /**\n     * Applies this function partially to one argument.\n     *\n     *     const plus5 = Function4.of(\n     *         (x:number,y:number,z:number,a:number)=>x+y+z+a)\n     *            .apply1(5);\n     *     assert.equal(11, plus5(1,2,3));\n     */\n    apply1(param1:T1): Function3<T2,T3,T4,R>;\n\n    /**\n     * Applies this function partially to two arguments.\n     *\n     *     const plus51 = Function4.of(\n     *         (x:number,y:number,z:number,a:number)=>x+y+z+a)\n     *            .apply2(5,1);\n     *     assert.equal(11, plus51(2,3));\n     */\n    apply2(param1:T1, param2: T2): Function2<T3,T4,R>;\n\n    /**\n     * Applies this function partially to three arguments.\n     *\n     *     const plus512 = Function4.of(\n     *         (x:number,y:number,z:number,a:number)=>x+y+z+a)\n     *            .apply3(5,1,2);\n     *     assert.equal(11, plus512(3));\n     */\n    apply3(param1:T1, param2: T2, param3: T3): Function1<T4,R>;\n}\n\n/**\n * Function5 encapsulates a function taking give parameters\n * and returning a value. It adds some useful functions\n * to combine or transform functions.\n *\n * @param T1 the first parameter type\n * @param T2 the second parameter type\n * @param T3 the third parameter type\n * @param T4 the fourth parameter type\n * @param T5 the fifth parameter type\n * @param R the result type\n */\nexport interface Function5<T1,T2,T3,T4,T5,R> {\n\n    /**\n     * Invoke the function\n     */\n    (x:T1,y:T2,z:T3,a:T4,b:T5): R;\n\n    /**\n     * Returns a new composed function which first applies the current\n     * function and then the one you pass as parameter.\n     */\n    andThen<V>(fn:(x:R)=>V): Function5<T1,T2,T3,T4,T5,V>;\n\n    /**\n     * Returns a curried version of this function, for example:\n     * See [[Function2.curried]]\n     */\n    curried(): Function1<T1,Function1<T2,Function1<T3,Function1<T4,Function1<T5,R>>>>>;\n\n    /**\n     * Returns a version of this function which takes a tuple\n     * instead of individual parameters.\n     */\n    tupled(): Function1<[T1,T2,T3,T4,T5],R>;\n\n    /**\n     * Returns a version of this function taking its parameters\n     * in the reverse order.\n     */\n    flipped(): Function5<T5,T4,T3,T2,T1,R>;\n\n    /**\n     * Applies this function partially to one argument.\n     *\n     *     const plus5 = Function5.of(\n     *         (x:number,y:number,z:number,a:number,b:number)=>x+y+z+a+b)\n     *            .apply1(5);\n     *     assert.equal(15, plus5(1,2,3,4));\n     */\n    apply1(param1:T1): Function4<T2,T3,T4,T5,R>;\n\n    /**\n     * Applies this function partially to two arguments.\n     *\n     *     const plus51 = Function5.of(\n     *         (x:number,y:number,z:number,a:number,b:number)=>x+y+z+a+b)\n     *            .apply2(5,1);\n     *     assert.equal(15, plus51(2,3,4));\n     */\n    apply2(param1:T1, param2: T2): Function3<T3,T4,T5,R>;\n\n    /**\n     * Applies this function partially to three arguments.\n     *\n     *     const plus512 = Function5.of(\n     *         (x:number,y:number,z:number,a:number,b:number)=>x+y+z+a+b)\n     *            .apply3(5,1,2);\n     *     assert.equal(15, plus512(3,4));\n     */\n    apply3(param1:T1, param2: T2, param3: T3): Function2<T4,T5,R>;\n\n    /**\n     * Applies this function partially to four arguments.\n     *\n     *     const plus5123 = Function5.of(\n     *         (x:number,y:number,z:number,a:number,b:number)=>x+y+z+a+b)\n     *            .apply4(5,1,2,3);\n     *     assert.equal(15, plus5123(4));\n     */\n    apply4(param1:T1, param2: T2, param3: T3, param4: T4): Function1<T5,R>;\n}\n\n/**\n * This is the type of the Function0 constant, which\n * offers some helper functions to deal\n * with [[Function0]] including\n * the ability to build [[Function0]]\n * from functions using [[Function0Static.of]].\n * It also offers some builtin functions like [[Function0Static.constant]].\n */\nexport class Function0Static {\n\n    /**\n     * The constant function of one parameter:\n     * will always return the value you give, no\n     * matter the parameter it's given.\n     */\n    constant<R>(val:R): Function0<R> {\n        return Function0.of(()=>val);\n    }\n\n    /**\n     * Take a one-parameter function and lift it to become a [[Function1Static]],\n     * enabling you to call [[Function1.andThen]] and other such methods on it.\n     */\n    of<R>(fn:()=>R): Function0<R> {\n        const r = <Function0<R>>(() => fn());\n        r.andThen = <V>(fn2:(x:R)=>V) => Function0.of(() => fn2(r()));\n        return r;\n    }\n}\n\n/**\n * The Function1 constant allows to call the [[Function0]] \"static\" methods.\n */\nexport const Function0 = new Function0Static();\n\n/**\n * This is the type of the Function1 constant, which\n * offers some helper functions to deal\n * with [[Function1]] including\n * the ability to build [[Function1]]\n * from functions using [[Function1Static.of]].\n * It also offers some builtin functions like [[Function1Static.constant]].\n */\nexport class Function1Static {\n\n    /**\n     * The identity function.\n     */\n    id<T>(): Function1<T,T> {\n        return Function1.of((x:T)=>x);\n    }\n\n    /**\n     * The constant function of one parameter:\n     * will always return the value you give, no\n     * matter the parameter it's given.\n     */\n    constant<U,T>(val:T): Function1<U,T> {\n        return Function1.of((x:U)=>val);\n    }\n\n    /**\n     * Take a one-parameter function and lift it to become a [[Function1Static]],\n     * enabling you to call [[Function1.andThen]] and other such methods on it.\n     */\n    of<T,U>(fn:(x:T)=>U): Function1<T,U> {\n        const r = <Function1<T,U>>(x => fn(x));\n        r.andThen = <V>(fn2:(x:U)=>V) => Function1.of((x:T) => fn2(r(x)));\n        r.compose = <S>(fn2:(x:S)=>T) => Function1.of((x:S) => r(fn2(x)));\n        return r;\n    }\n}\n\n/**\n * The Function1 constant allows to call the [[Function1]] \"static\" methods.\n */\nexport const Function1 = new Function1Static();\n\n/**\n * This is the type of the Function2 constant, which\n * offers some helper functions to deal\n * with [[Function2]] including\n * the ability to build [[Function2]]\n * from functions using [[Function2Static.of]].\n * It also offers some builtin functions like [[Function2Static.constant]].\n */\nexport class Function2Static {\n    /**\n     * The constant function of two parameters:\n     * will always return the value you give, no\n     * matter the parameters it's given.\n     */\n    constant<T1,T2,R>(val:R): Function2<T1,T2,R> {\n        return Function2.of((x:T1,y:T2)=>val);\n    }\n\n    /**\n     * Take a two-parameter function and lift it to become a [[Function2]],\n     * enabling you to call [[Function2.andThen]] and other such methods on it.\n     */\n    of<T1,T2,R>(fn:(x:T1,y:T2)=>R): Function2<T1,T2,R> {\n        const r = <Function2<T1,T2,R>>((x,y)=>fn(x,y));\n        r.andThen = <V>(fn2:(x:R)=>V) => Function2.of((x:T1,y:T2) => fn2(r(x,y)));\n        r.curried = () => Function1.of((x:T1) => Function1.of((y:T2) => r(x,y)));\n        r.tupled = () => Function1.of((pair:[T1,T2]) => r(pair[0],pair[1]));\n        r.flipped = () => Function2.of((x:T2,y:T1) => r(y,x));\n        r.apply1 = (x:T1) => Function1.of((y:T2) => r(x,y));\n        return r;\n    }\n}\n\n/**\n * The Function2 constant allows to call the [[Function2]] \"static\" methods.\n */\nexport const Function2 = new Function2Static();\n\n/**\n * This is the type of the Function3 constant, which\n * offers some helper functions to deal\n * with [[Function3]] including\n * the ability to build [[Function3]]\n * from functions using [[Function3Static.of]].\n * It also offers some builtin functions like [[Function3Static.constant]].\n */\nexport class Function3Static {\n    /**\n     * The constant function of three parameters:\n     * will always return the value you give, no\n     * matter the parameters it's given.\n     */\n    constant<T1,T2,T3,R>(val:R): Function3<T1,T2,T3,R> {\n        return Function3.of((x:T1,y:T2,z:T3)=>val);\n    }\n\n    /**\n     * Take a three-parameter function and lift it to become a [[Function3]],\n     * enabling you to call [[Function3.andThen]] and other such methods on it.\n     */\n    of<T1,T2,T3,R>(fn:(x:T1,y:T2,z:T3)=>R): Function3<T1,T2,T3,R> {\n        const r = <Function3<T1,T2,T3,R>>((x,y,z)=>fn(x,y,z));\n        r.andThen = <V>(fn2:(x:R)=>V) => Function3.of((x:T1,y:T2,z:T3) => fn2(r(x,y,z)));\n        r.curried = () => Function1.of((x:T1) => Function1.of((y:T2) => Function1.of((z:T3) => r(x,y,z))));\n        r.tupled = () => Function1.of((tuple:[T1,T2,T3]) => r(tuple[0],tuple[1],tuple[2]));\n        r.flipped = () => Function3.of((x:T3,y:T2,z:T1) => r(z,y,x));\n        r.apply1 = (x:T1) => Function2.of((y:T2,z:T3) => r(x,y,z));\n        r.apply2 = (x:T1,y:T2) => Function1.of((z:T3) => r(x,y,z));\n        return r;\n    }\n}\n\n/**\n * The Function3 constant allows to call the [[Function3]] \"static\" methods.\n */\nexport const Function3 = new Function3Static();\n\n/**\n * This is the type of the Function4 constant, which\n * offers some helper functions to deal\n * with [[Function4]] including\n * the ability to build [[Function4]]\n * from functions using [[Function4Static.of]].\n * It also offers some builtin functions like [[Function4Static.constant]].\n */\nexport class Function4Static {\n\n    /**\n     * The constant function of four parameters:\n     * will always return the value you give, no\n     * matter the parameters it's given.\n     */\n    constant<T1,T2,T3,T4,R>(val:R): Function4<T1,T2,T3,T4,R> {\n        return Function4.of((x:T1,y:T2,z:T3,a:T4)=>val);\n    }\n\n    /**\n     * Take a four-parameter function and lift it to become a [[Function4]],\n     * enabling you to call [[Function4.andThen]] and other such methods on it.\n     */\n    of<T1,T2,T3,T4,R>(fn:(x:T1,y:T2,z:T3,a:T4)=>R): Function4<T1,T2,T3,T4,R> {\n        const r = <Function4<T1,T2,T3,T4,R>>((x,y,z,a)=>fn(x,y,z,a));\n        r.andThen = <V>(fn2:(x:R)=>V) => Function4.of((x:T1,y:T2,z:T3,a:T4) => fn2(r(x,y,z,a)));\n        r.curried = () => Function1.of((x:T1) => Function1.of(\n            (y:T2) => Function1.of((z:T3) => Function1.of((a:T4)=>r(x,y,z,a)))));\n        r.tupled = () => Function1.of((tuple:[T1,T2,T3,T4]) => r(tuple[0],tuple[1],tuple[2],tuple[3]));\n        r.flipped = () => Function4.of((x:T4,y:T3,z:T2,a:T1) => r(a,z,y,x));\n        r.apply1 = (x:T1) => Function3.of((y:T2,z:T3,a:T4) => r(x,y,z,a));\n        r.apply2 = (x:T1,y:T2) => Function2.of((z:T3,a:T4) => r(x,y,z,a));\n        r.apply3 = (x:T1,y:T2,z:T3) => Function1.of((a:T4) => r(x,y,z,a));\n        return r;\n    }\n\n};\n\n/**\n * The Function4 constant allows to call the [[Function4]] \"static\" methods.\n */\nexport const Function4 = new Function4Static();\n\n/**\n * This is the type of the Function5 constant, which\n * offers some helper functions to deal\n * with [[Function5]] including\n * the ability to build [[Function5]]\n * from functions using [[Function5Static.of]].\n * It also offers some builtin functions like [[Function5Static.constant]].\n */\nexport class Function5Static {\n    /**\n     * The constant function of five parameters:\n     * will always return the value you give, no\n     * matter the parameters it's given.\n     */\n    constant<T1,T2,T3,T4,T5,R>(val:R): Function5<T1,T2,T3,T4,T5,R> {\n        return Function5.of((x:T1,y:T2,z:T3,a:T4,b:T5)=>val);\n    }\n\n    /**\n     * Take a five-parameter function and lift it to become a [[Function5]],\n     * enabling you to call [[Function5.andThen]] and other such methods on it.\n     */\n    of<T1,T2,T3,T4,T5,R>(fn:(x:T1,y:T2,z:T3,a:T4,b:T5)=>R): Function5<T1,T2,T3,T4,T5,R> {\n        const r = <Function5<T1,T2,T3,T4,T5,R>>((x,y,z,a,b)=>fn(x,y,z,a,b));\n        r.andThen = <V>(fn2:(x:R)=>V) => Function5.of((x:T1,y:T2,z:T3,a:T4,b:T5) => fn2(r(x,y,z,a,b)));\n        r.curried = () => Function1.of((x:T1) => Function1.of(\n            (y:T2) => Function1.of((z:T3) => Function1.of((a:T4)=>Function1.of((b:T5) => r(x,y,z,a,b))))));\n        r.tupled = () => Function1.of((tuple:[T1,T2,T3,T4,T5]) => r(tuple[0],tuple[1],tuple[2],tuple[3],tuple[4]));\n        r.flipped = () => Function5.of((x:T5,y:T4,z:T3,a:T2,b:T1) => r(b,a,z,y,x));\n        r.apply1 = (x:T1) => Function4.of((y:T2,z:T3,a:T4,b:T5) => r(x,y,z,a,b));\n        r.apply2 = (x:T1,y:T2) => Function3.of((z:T3,a:T4,b:T5) => r(x,y,z,a,b));\n        r.apply3 = (x:T1,y:T2,z:T3) => Function2.of((a:T4,b:T5) => r(x,y,z,a,b));\n        r.apply4 = (x:T1,y:T2,z:T3,a:T4) => Function1.of((b:T5) => r(x,y,z,a,b));\n        return r;\n    }\n}\n\n/**\n * The Function5 constant allows to call the [[Function5]] \"static\" methods.\n */\nexport const Function5 = new Function5Static();\n", "import {\n  assert,\n  getValue,\n  isObject,\n  isString,\n  isDefined,\n  isFunction,\n  isNumber\n} from \"../guards/index.js\"\nimport { Option } from \"@3fv/prelude-ts\"\nimport { pick } from \"lodash\"\nimport { LevelKind, LevelThresholds } from \"./Level.js\"\nimport type { LoggingManager } from \"./LoggingManager.js\"\nimport type { LogMetadata, LogRecord } from \"./LogRecord.js\"\nimport { isLogLevelKind } from \"./util.js\"\nimport type { Appender } from \"./Appender.js\"\n\nexport interface LoggerOptions {\n  categoryInterpolator: CategoryInterpolator\n  overrideAppenders: Array<Appender<LogRecord>>\n}\n\nexport type CategoryInterpolator = (\n  inCategory: string,\n  options?: LoggerOptions\n) => string\n\nexport const filenameCategoryInterpolator: CategoryInterpolator = (\n  filename: string\n) => {\n  const allParts = filename.replaceAll(\"\\\\\", \"/\").split(\"/\")\n  const rootIndex = Math.max(\n    ...[\"src\", \"lib\"].map(name => allParts.indexOf(name))\n  )\n  const parts =\n    rootIndex === -1 ? [allParts.pop()] : allParts.slice(rootIndex + 1)\n  const category = Option.of(parts.join(\":\"))\n    .flatMap(cat =>\n      Option.of(cat.lastIndexOf(\".\")).map(index =>\n        index === -1 ? cat : cat.slice(0, index)\n      )\n    )\n    .getOrElse(\"unknown\")\n  return category\n}\n\nexport const defaultLoggerOptions: LoggerOptions = {\n  categoryInterpolator: filenameCategoryInterpolator,\n  overrideAppenders: []\n}\n\nexport function toLogRecord(\n  logger: Logger,\n  levelOrRecord: LevelKind | LogRecord,\n  args: any[]\n) {\n  const globalMetadata = logger.manager.globalMetadata\n  let metadata: LogMetadata = {\n    ...globalMetadata\n  }\n  if (isString(levelOrRecord) && isObject(args[0])) {\n    metadata = { ...metadata, ...args.shift() }\n  }\n\n  if (globalMetadata?.data)\n    metadata.data = {\n      ...globalMetadata.data,\n      ...metadata.data\n    }\n\n  const errRecord = Option.ofNullable(\n    args.find(\n      arg => (isString(arg?.message) && !!arg.stack) || arg instanceof Error\n    )\n  ).match({\n    Some: err => ({\n      errorMessage: getValue(() => err.message),\n      errorStack: getValue(() => err.stack)\n    }),\n    None: () => ({})\n  })\n\n  const recordBase = isString(levelOrRecord)\n    ? ({\n        ...pick(logger, [\"category\"]),\n        timestamp: Date.now(),\n        message: args[0],\n        level: levelOrRecord,\n        args: args.slice(1)\n      } as LogRecord)\n    : levelOrRecord\n\n  const record = {\n    ...recordBase,\n    ...errRecord,\n    ...metadata,\n    timestamp:\n      isNumber(recordBase.timestamp) && recordBase.timestamp > 0\n        ? recordBase.timestamp\n        : Date.now()\n  }\n\n  if (metadata.data) {\n    record.data = {\n      ...metadata.data,\n      ...(recordBase.data ?? {})\n    }\n  }\n\n  return record\n}\n\nexport interface LoggerState {\n  overrideLevel?: LevelKind\n}\n\nexport class Logger {\n  readonly state: LoggerState = {\n    overrideLevel: null\n  }\n\n  get overrideLevel(): LevelKind {\n    return Option.ofNullable(this.state.overrideLevel)\n      .filter(isLogLevelKind) //Predicate.of<LevelKind>(isString).and(isLogLevelKind))\n      .getOrNull()\n  }\n\n  get overrideThreshold() {\n    return Option.ofNullable(this.overrideLevel)\n      .map(level => LevelThresholds[level])\n      .getOrNull()\n  }\n\n  setOverrideLevel(inOverrideLevel: LevelKind) {\n    const overrideLevel = (\n      !inOverrideLevel ? null : inOverrideLevel.toLocaleLowerCase()\n    ) as LevelKind\n\n    assert(\n      !isDefined(overrideLevel) || isLogLevelKind(overrideLevel),\n      `Invalid override level, must be a log level, all lower case`\n    )\n\n    Object.assign(this.state, {\n      overrideLevel\n    })\n\n    return this\n  }\n\n  /**\n   * Base logging function\n   *\n   * @param record\n   */\n  log(record: LogRecord): void\n  log(level: LevelKind, message: string, ...args: any[]): void\n  log(\n    level: LevelKind,\n    metadata: LogMetadata,\n    message: string,\n    ...args: any[]\n  ): void\n  log(levelOrRecord: LevelKind | LogRecord, ...args: any[]) {\n    const record = toLogRecord(this, levelOrRecord, args)\n    if (this.options.overrideAppenders.length) {\n      this.options.overrideAppenders.forEach(appender =>\n        appender.append(record)\n      )\n    } else {\n      this.manager.fire(record)\n    }\n  }\n\n  /**\n   * Factory for the log\n   * level functions\n   *\n   * @param {LevelKind} level\n   * @returns {(message: string, ...args: any[]) => void}\n   * @private\n   */\n  private createLevelLogger(\n    level: LevelKind\n  ): (message: string, ...args: any[]) => void {\n    const isEnabled = this.createLevelEnabled(level)\n    return (message: string, ...args: any[]) => {\n      if (isEnabled()) {\n        this.log(level, message, ...args)\n      }\n    }\n  }\n\n  /**\n   * Factory for is<Level>Enabled\n   *\n   * @param {LevelKind} level\n   * @returns {() => boolean}\n   * @private\n   */\n  private createLevelEnabled(level: LevelKind): () => boolean {\n    return () => {\n      const { rootThreshold } = this.manager\n\n      const globalOverrideThreshold = this.manager.determineThresholdOverride(\n        this.category\n      )\n      const categoryThresholds = isNumber(this.overrideThreshold)\n        ? [this.overrideThreshold]\n        : [globalOverrideThreshold, rootThreshold].filter(isNumber)\n\n      const categoryThreshold = Math.min(...categoryThresholds)\n\n      const recordThreshold = LevelThresholds[level]\n\n      return recordThreshold >= categoryThreshold\n    }\n  }\n\n  readonly trace = this.createLevelLogger(\"trace\")\n  readonly debug = this.createLevelLogger(\"debug\")\n  readonly info = this.createLevelLogger(\"info\")\n  readonly warn = this.createLevelLogger(\"warn\")\n  readonly error = this.createLevelLogger(\"error\")\n  readonly fatal = this.createLevelLogger(\"fatal\")\n\n  readonly isTraceEnabled = this.createLevelEnabled(\"trace\")\n  readonly isDebugEnabled = this.createLevelEnabled(\"debug\")\n  readonly isInfoEnabled = this.createLevelEnabled(\"info\")\n  readonly isWarnEnabled = this.createLevelEnabled(\"warn\")\n  readonly isErrorEnabled = this.createLevelEnabled(\"error\")\n  readonly isFatalEnabled = this.createLevelEnabled(\"fatal\")\n\n  assert(test: boolean | (() => boolean), message: string, ...args: any[]) {\n    const isTruthy = isFunction(test) ? test() : test\n    if (isTruthy) {\n      return\n    }\n\n    this.error(message, ...args)\n  }\n\n  assertFatal(\n    test: boolean | (() => boolean),\n    message: string,\n    exitCode: number = 1\n  ) {\n    const isTruthy = isFunction(test) ? test() : test\n    if (isTruthy) {\n      return\n    }\n\n    this.fatal(\"FATAL ASSERTION: \", message)\n    if (typeof process !== \"undefined\") {\n      process.exit(exitCode)\n    } else {\n      console.error(\n        \"FATAL ASSERTION: `process` is not defined, probably in a web browser\"\n      )\n    }\n  }\n\n  constructor(\n    readonly manager: LoggingManager,\n    readonly category: string,\n    readonly options: LoggerOptions\n  ) {}\n\n  static hydrateOptions(options: Partial<LoggerOptions> = {}): LoggerOptions {\n    return {\n      ...defaultLoggerOptions,\n      ...options\n    }\n  }\n\n  static interoplateCategory(category: string, options: LoggerOptions) {\n    options = {\n      ...defaultLoggerOptions,\n      ...options\n    }\n    return options.categoryInterpolator(category, options)\n  }\n}\n", "import { isString } from \"../guards/primitive.js\"\nimport { LevelKind, LevelNames } from \"./Level.js\"\n\nexport function isLogLevelKind(o: any): o is LevelKind {\n  return isString(o) && LevelNames.includes(o?.toLowerCase?.() as any)\n}\n", "import { isNumber, isObject, isString } from \"../guards/index.js\"\nimport { Option } from \"@3fv/prelude-ts\"\nimport { flatten, isEmpty, min, negate } from \"lodash\"\nimport type { Appender } from \"./Appender.js\"\nimport { ConsoleAppender } from \"./appenders/ConsoleAppender.js\"\nimport { Level, LevelKind, LevelThresholds } from \"./Level.js\"\nimport { Logger, LoggerOptions } from \"./Logger.js\"\nimport type { LogMetadata, LogRecord } from \"./LogRecord.js\"\nimport { LogContext, LogContextContainer } from \"./context/index.js\"\nimport { flow, get, nth } from \"lodash/fp.js\"\n\nexport type CategoryMatch = RegExp | string\n\nexport type ThresholdOverride = [match: CategoryMatch, level: LevelKind]\n\nexport interface LoggingManagerState<Record extends LogRecord> {\n  rootLevel: LevelKind\n  globalMetadata?: LogMetadata\n  appenders: Array<Appender<Record>>\n  thresholdOverrides: Array<ThresholdOverride>\n}\n\nexport type LoggingManagerOptions<Record extends LogRecord> = Partial<\n  LoggingManagerState<Record>\n>\n\nfunction parseThresholdOverridePatterns(\n  value: string,\n  level: LevelKind = \"debug\"\n): ThresholdOverride[] {\n  return value.split(\",\").map(s => [new RegExp(s), level] as ThresholdOverride)\n}\n\nexport const kEnvThresholdOverrides = Option.ofNullable(\n  typeof process !== \"undefined\" && process.env.DEBUG_PATTERNS\n)\n  .filter(negate(isEmpty))\n  .map(parseThresholdOverridePatterns)\n  .getOrElse([])\n\n/**\n * Logging manager\n */\nexport class LoggingManager<Record extends LogRecord = any> {\n  private readonly loggers = new Map<string, Logger>()\n\n  private readonly state: LoggingManagerState<Record> = {\n    appenders: [],\n    globalMetadata: {},\n    rootLevel: Level.info,\n    thresholdOverrides: kEnvThresholdOverrides\n  }\n\n  get rootLevel() {\n    return this.state.rootLevel\n  }\n\n  get globalMetadata() {\n    return this.state.globalMetadata\n  }\n\n  set globalMetadata(newMetadata: LogMetadata) {\n    this.state.globalMetadata = newMetadata ?? {}\n  }\n\n  set rootLevel(newRootLevel: LevelKind) {\n    this.state.rootLevel = newRootLevel\n  }\n\n  get rootThreshold() {\n    return LevelThresholds[this.rootLevel]\n  }\n\n  /**\n   * Get the current handler\n   *\n   * @returns {Appender<Record>}\n   */\n  get appenders(): Array<Appender<Record>> {\n    return Option.ofNullable(this.state.appenders)\n      .filter(appenders => appenders.length > 0)\n      .getOrCall(() => {\n        this.state.appenders.push(new ConsoleAppender())\n        return this.state.appenders\n      })\n  }\n\n  /**\n   * Global threshold overrides\n   */\n  get thresholdOverrides() {\n    return this.state.thresholdOverrides\n  }\n\n  /**\n   * Update the overrides\n   *\n   * @param newOverrides\n   */\n  set thresholdOverrides(newOverrides: ThresholdOverride[]) {\n    this.state.thresholdOverrides = newOverrides\n  }\n\n  /**\n   * Set global appenders\n   *\n   * @param {Array<Appender<Record>>} newAppenders\n   */\n  setAppenders(...newAppenders: Array<Appender<Record> | Appender<Record>[]>) {\n    // WE MUTATE DO TO THE LIKELIHOOD OF SOMEONE HOLDING A REF TO THE ARRAY,\n    // CONVERT TO OBSERVABLE AT SOME POINT\n    const persistentAppenders = this.state.appenders\n    persistentAppenders.length = 0\n    persistentAppenders.push(...flatten(newAppenders))\n\n    return this\n  }\n\n  /**\n   * Add one or more appenders to existing appender set\n   *\n   * @param {Appender<Record> | Appender<Record>[]} newAppenders\n   * @returns {this<Record>}\n   */\n  addAppenders(\n    ...newAppenders: Array<Appender<Record> | Appender<Record>[]>\n  ): this {\n    this.state.appenders.push(...flatten(newAppenders))\n    return this\n  }\n\n  /**\n   * Clear threshold overrides\n   *\n   * @returns {this<Record>}\n   */\n  clearThresholdOverrides(): this {\n    this.state.thresholdOverrides.length = 0\n    return this\n  }\n\n  setThresholdOverrides(...overrides: Array<ThresholdOverride>) {\n    this.state.thresholdOverrides.length = 0\n    this.state.thresholdOverrides.push(...overrides)\n    return this\n  }\n\n  addThresholdOverrides(...overrides: Array<ThresholdOverride>) {\n    this.state.thresholdOverrides.push(...overrides)\n    return this\n  }\n\n  /**\n   * Get applicable current contexts\n   *\n   * @param {string} category\n   * @returns {LogContext[]}\n   */\n  getApplicableCurrentContexts(category: string): LogContext[] {\n    return LogContextContainer.currentContext().filter(\n      ({ pattern }) => !pattern || pattern.test(category)\n    )\n  }\n\n  /**\n   * Check for any matching threshold overrides\n   *\n   * @param category\n   */\n  determineThresholdOverride(category: string): number {\n    const contexts = this.getApplicableCurrentContexts(category),\n      // FIND CONFIGURED OVERRIDE LEVEL\n      overrideThreshold = Option.ofNullable(\n        this.thresholdOverrides.find(([match]) =>\n          isString(match)\n            ? match === category\n            : (match as RegExp).test(category)\n        )\n      )\n        .map(nth(1))\n        .map(level => LevelThresholds[level as Level])\n        .getOrNull(),\n      // FIND `LogContext` OVERRIDE LEVEL\n      contextThresholds = contexts\n        .filter(flow(get(\"thresholdLevel\"), isString))\n        .map(({ thresholdLevel }) => LevelThresholds[thresholdLevel]),\n      // IF ANY OVERRIDES, GET THE MOST VERBOSE LEVEL\n      override = Option.ofNullable(\n        [...contextThresholds, overrideThreshold].filter(isNumber)\n      )\n        .filter(negate(isEmpty))\n        .map(min)\n        .getOrNull()\n\n    return override as number\n  }\n\n  /**\n   * Set the root logging level\n   *\n   * @param {LevelKind} newLevel\n   * @returns {this<Record>}\n   */\n  setRootLevel(newLevel: LevelKind): this {\n    this.state.rootLevel = newLevel\n    return this\n  }\n\n  /**\n   * Fire a log event, eventually\n   * invert this by making `Logger` an\n   * `EventEmitter3` and having the `LoggingManager`\n   * subscribe to `record` event\n   *\n   * @param {LogRecord<Record>} record\n   * @internal\n   */\n  fire(record: LogRecord<Record>) {\n    const { category } = record,\n      contexts = this.getApplicableCurrentContexts(category),\n      contextAppenders = contexts.flatMap(get(\"appenders\")),\n      appenders = [...this.appenders, ...contextAppenders]\n\n    appenders.forEach(appender => appender.append(record as Record))\n  }\n\n  /**\n   * Get a logger from cache, if the category\n   * does not have an existing logger, then create one.\n   *\n   * @param {string} categoryOrFilename\n   * @param {Partial<LoggerOptions>} inOptions\n   * @returns {Logger}\n   */\n  getLogger(\n    categoryOrFilename: string,\n    inOptions: Partial<LoggerOptions> = {}\n  ): Logger {\n    const options = Logger.hydrateOptions(inOptions)\n    const category = Logger.interoplateCategory(categoryOrFilename, options)\n\n    return Option.ofNullable(category)\n      .map(category => this.loggers.get(category))\n      .getOrCall(() => {\n        const logger = new Logger(this, category, options)\n        this.loggers.set(category, logger)\n        return logger\n      })\n  }\n\n  /**\n   * Configure the logging manager,\n   * this function is additive, so simply calling\n   * `configure` with a single option `rootLevel`,\n   * will not affect other options like `appenders`   *\n   *\n   * @param {LoggingManagerOptions<any>} options\n   * @returns {this<Record>}\n   */\n  configure(options: LoggingManagerOptions<any>): this {\n    if (Level[options?.rootLevel]) {\n      this.setRootLevel(options.rootLevel)\n    }\n\n    if (options?.appenders) {\n      this.setAppenders(options.appenders)\n    }\n\n    if (options?.thresholdOverrides) {\n      this.addThresholdOverrides(...options.thresholdOverrides)\n    }\n\n    return this\n  }\n\n  private constructor() {\n    this.configure({})\n  }\n\n  /**\n   * Singleton instance\n   *\n   * @type {LoggingManager}\n   * @private\n   */\n  private static manager: LoggingManager\n\n  /**\n   * Get logging manager and optionally provided\n   * configuration options\n   *\n   * @param {LoggingManagerOptions<Record>} options\n   * @returns {LoggingManager<Record>}\n   */\n  static get<Record extends LogRecord = any>(\n    options: LoggingManagerOptions<Record> = null\n  ): LoggingManager<Record> {\n    if (!this.manager) {\n      this.manager = new LoggingManager<Record>()\n    }\n\n    if (options) {\n      this.manager.configure(options)\n    }\n\n    return this.manager\n  }\n}\n\nexport function getLoggingManager(): LoggingManager {\n  return LoggingManager.get()\n}\n\nif (Option.try(() => process.env.NODE_ENV === \"development\").getOrElse(false)) {\n  ;[\n    typeof window !== \"undefined\" && window,\n    typeof global !== \"undefined\" && global\n  ]\n    .filter(isObject)\n    .map(target =>\n      Object.assign(target, {\n        loggingManager: getLoggingManager()\n      })\n    )\n}\n", "import type { LogRecord } from \"../LogRecord.js\"\nimport type { Appender } from \"../Appender.js\"\nimport { Option } from \"@3fv/prelude-ts\"\nimport type { LevelKind } from \"../Level.js\"\nimport type { Formatter } from \"../Formatter.js\"\n\nconst consoleLogBindings = new Map<LevelKind, (...args: any[]) => any>()\n\nfunction getBoundConsoleFn(level: LevelKind) {\n  return (console[level] ?? console.log).bind(console)\n}\n\n/**\n * Get a cached console bound log function\n *\n * @param {LevelKind} level\n * @returns {(...args: any[]) => any}\n */\nexport function getConsoleLogBinding(level: LevelKind) {\n  if (!consoleLogBindings.has(level)) {\n    consoleLogBindings.set(level, getBoundConsoleFn(level))\n  }\n\n  return consoleLogBindings.get(level)\n}\n\n/**\n * ConsoleAppender Configuration\n */\nexport interface ConsoleAppenderConfig<Record extends LogRecord = any> {\n  cacheEnabled: boolean\n  prettyPrint: boolean\n  formatter?: Formatter<string | Array<any>>\n}\n\n/**\n * Partial of config, used for shortening instead of Partial<...>\n */\nexport type ConsoleAppenderOptions<Record extends LogRecord> = Partial<\n  ConsoleAppenderConfig<Record>\n>\n\nexport const consoleFormatter: Formatter<Array<any>> = ({\n  level,\n  message,\n  data,\n  args,\n  category,\n  timestamp\n}) => [\n  `[${category}]  (${level})  ${message}`,\n  ...(Array.isArray(args) ? args : [args])\n]\n\n/**\n * Default console config\n * @type {ConsoleAppenderConfig}\n */\nexport const kDefaultConsoleAppenderConfig: ConsoleAppenderConfig = {\n  cacheEnabled: true,\n  prettyPrint: true,\n  formatter: consoleFormatter\n}\n\n/**\n * Console appender, the simple default appender used\n * everywhere OOB\n */\nexport class ConsoleAppender<\n  Record extends LogRecord\n> implements Appender<Record> {\n  readonly config: ConsoleAppenderConfig\n\n  /**\n   * Handle log records, transform, push to ES\n   *\n   * @param record\n   */\n  append(record: Record): void {\n    const { level, message, data, args, category, timestamp } = record\n    const { formatter = consoleFormatter } = this.config\n    Option.ofNullable(formatter(record)).map(result => {\n      const args = Array.isArray(result) ? result : [result]\n      this.write(level, ...args)\n    })\n  }\n\n  /**\n   * Write args to console\n   *\n   * @param level\n   * @param args\n   */\n  protected write(level: LevelKind, ...args: any[]) {\n    Option.ofNullable(console[level])\n      .orCall(() => Option.ofNullable(console.log))\n      .map((fn: Function) => fn.apply(console, args))\n  }\n\n  /**\n   *\n   * @param {Partial<ConsoleAppenderOptions<Record>>} options\n   */\n  constructor(options: Partial<ConsoleAppenderOptions<Record>> = {}) {\n    this.config = {\n      ...kDefaultConsoleAppenderConfig,\n      ...options\n    }\n  }\n}\n", "// noinspection JSValidateJSDoc\n\nimport type { LogContext } from \"./LogContext.js\"\n\n\n\nexport interface LogContextProvider {\n  \n  /**\n   * Get current context stack\n   *\n   * @returns {any[]}\n   */\n  currentContext(): Array<LogContext>\n  \n  /**\n   * Run in context\n   *\n   * @param {LogContext} context\n   * @param {() => Promise<T>} fn\n   * @returns {Promise<T>}\n   */\n  runInContext<T = unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>\n}\n\n\n/**\n * Dummy/Noop context provider\n *\n * @type {{currentContext(): Array<LogContext>, runInContext<T=unknown>(context: LogContext, fn: () => Promise<T>): Promise<T>}}\n */\nexport const DefaultLogContextProvider:LogContextProvider = {\n  currentContext(): Array<LogContext> {\n    return []\n  },\n  runInContext<T = unknown>(context: LogContext, fn: () => Promise<T>): Promise<T> {\n    if (process.env.NODE_ENV === \"development\") {\n      console.warn(`Attempting to use LogContext without any installed provider`)\n    }\n  \n    return fn()\n  }\n}\n", "import { LogContext } from \"./LogContext.js\"\nimport { DefaultLogContextProvider, LogContextProvider } from \"./LogContextProvider.js\"\n\nconst state = {\n  provider: DefaultLogContextProvider as LogContextProvider\n}\n\n\nexport namespace LogContextContainer  {\n  \n  export function setProvider(provider: LogContextProvider) {\n    state.provider = provider ?? DefaultLogContextProvider\n  }\n  \n  export function getProvider():LogContextProvider {\n    return state.provider ?? DefaultLogContextProvider\n  }\n  \n  export function currentContext(): Array<LogContext> {\n    return getProvider().currentContext?.() ?? []\n  }\n  \n  export function runInContext<T = unknown>(context: LogContext, fn: () => Promise<T>): Promise<T> {\n    const provider = getProvider()\n    return provider.runInContext(context,fn)\n  }\n  \n}\n", "import { ConsoleAppender } from \"./appenders/ConsoleAppender.js\"\nimport { Level, LevelKind } from \"./Level.js\"\nimport type { Logger, LoggerOptions } from \"./Logger.js\"\nimport { getLoggingManager } from \"./LoggingManager.js\"\n\nconst INTERNAL_CATEGORY = \"INTERNAL\"\n\nlet internalLogger: Logger = null\n\nexport function getInternalLogger(): Logger {\n  if (!internalLogger) {\n    internalLogger = getLoggingManager().getLogger(INTERNAL_CATEGORY, {\n      categoryInterpolator: (\n        inCategory: string,\n        options?: LoggerOptions\n      ) => INTERNAL_CATEGORY,\n      overrideAppenders: [new ConsoleAppender()]\n    })\n    internalLogger.setOverrideLevel(Level.fatal)\n  }\n  return internalLogger\n}\n\nexport function setInternalLoggerThresholdLevel(level: LevelKind): void {\n  getInternalLogger().setOverrideLevel(level)\n}\n\nif (typeof window !== \"undefined\"){\n  ;(window as any).setInternalLoggerThresholdLevel = setInternalLoggerThresholdLevel\n}", "import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n", "import { Deferred } from \"../../../helpers/index.js\"\nimport { getInternalLogger } from \"../../InternalLogger.js\"\nimport EventEmitter3 from \"eventemitter3\"\n\nconst CRED_BUFFER_PADDING_MS = 3 * 60 * 1000 // 3 minutes\n\nconst log = getInternalLogger()\n\nexport interface AWSCredentials {\n  accessKeyId: string\n  secretAccessKey: string\n  sessionToken: string\n  streamName: string\n  region: string\n  expiration: string\n}\n\nexport interface AWSFirehoseCredentialManagerEventMap {\n  received: (creds: AWSCredentials) => void\n  expired: () => void\n}\n\nexport class AWSFirehoseCredentialManager extends EventEmitter3<AWSFirehoseCredentialManagerEventMap> {\n  private refreshTimer: ReturnType<typeof setTimeout> = null\n  private loadDeferred: Deferred<AWSCredentials> = null\n\n  constructor(public readonly credentialEndpointUrl: string) {\n    super()\n  }\n\n  forceUpdateCredentials(): void {\n    if (this.loadDeferred && !this.loadDeferred.isSettled()) {\n      this.loadDeferred.reject(new Error(\"force update\"))\n    }\n\n    this.loadDeferred = null\n    this.scheduleRefresh(1)\n  }\n\n  getCredentials(): AWSCredentials {\n    if (this.loadDeferred && this.loadDeferred.isFulfilled()) {\n      const creds = this.loadDeferred.getResult(),\n        expMs = Date.parse(creds.expiration)\n\n      if (expMs <= Date.now()) {\n        log.info(\"Credentials expired\")\n        this.loadDeferred = null\n        this.scheduleRefresh(1)\n        this.emit(\"expired\")\n        return null\n      }\n      return creds\n    }\n\n    this.scheduleRefresh(1)\n    return null\n  }\n\n  hasCredentials(): boolean {\n    return this.getCredentials() != null\n  }\n\n  private async load(): Promise<AWSCredentials> {\n    if (this.loadDeferred && !this.loadDeferred.isRejected())\n      return this.loadDeferred.promise\n\n    const deferred = (this.loadDeferred = new Deferred<AWSCredentials>())\n    try {\n      const r = await fetch(this.credentialEndpointUrl, {\n        method: \"GET\",\n        credentials: \"include\"\n      })\n      if (!r.ok) throw new Error(`creds http ${r.status}`)\n      const creds: AWSCredentials = await r.json()\n\n      this.scheduleRefresh(creds)\n      log.info(\n        `Got creds, expire=${creds.expiration}, stream=${creds.streamName}, region=${creds.region}`\n      )\n      deferred.resolve(creds)\n      this.emit(\"received\", creds)\n      return deferred.promise\n    } catch (e) {\n      deferred.reject(e)\n      this.loadDeferred = null\n      throw e\n    }\n  }\n  scheduleRefresh(credsOrMillis: AWSCredentials | number): void {\n    if (this.refreshTimer) {\n      clearTimeout(this.refreshTimer)\n      this.refreshTimer = null\n    }\n    if (!credsOrMillis) return\n\n    let refreshInMs: number\n    if (typeof credsOrMillis === \"number\") {\n      refreshInMs = credsOrMillis\n    } else {\n      const creds = credsOrMillis,\n        expMs = Date.parse(creds.expiration)\n\n      refreshInMs = expMs - Date.now() - CRED_BUFFER_PADDING_MS\n    }\n\n    refreshInMs = Math.max(100, refreshInMs)\n\n    this.refreshTimer = setTimeout(() => {\n      this.loadDeferred = null\n      this.load().catch((e: Error) =>\n        log.error(`refresh failed: ${e.message}`, e)\n      )\n    }, refreshInMs)\n  }\n\n  getStreamName(): string {\n    return this.getCredentials()?.streamName\n  }\n\n  getRegion(): string {\n    return this.getCredentials()?.region\n  }\n\n  destroy(): void {\n    this.scheduleRefresh(null)\n    if (!this.loadDeferred.isSettled())\n      this.loadDeferred.reject(new Error(\"destroyed\"))\n    this.loadDeferred = null\n  }\n}\n\nexport default AWSFirehoseCredentialManager\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n  FirehoseClient,\n  PutRecordBatchInput\n} from \"@aws-sdk/client-firehose\"\nimport { Level } from \"../../Level.js\"\n\nimport AWSFirehoseCredentialManager, {\n  type AWSCredentials\n} from \"./AWSFirehoseCredentialManager.js\"\nimport { getInternalLogger } from \"../../InternalLogger.js\"\nimport { pick } from \"lodash\"\nimport { Deferred } from \"../../../helpers/index.js\"\nimport { LogRecord } from \"../../LogRecord.js\"\nimport { Appender } from \"../../Appender.js\"\n\nconst LogQueueMaxRecords = 10000\nconst ExpiredTokenExceptionCode = \"ExpiredTokenException\"\n\nconst log = getInternalLogger()\nlet firehoseModule: Promise<typeof import(\"@aws-sdk/client-firehose\")> = null\n\nfunction getFirehoseModule() {\n  if (!firehoseModule) {\n    firehoseModule = import(\"@aws-sdk/client-firehose\").catch(err => {\n      firehoseModule = null\n      throw err\n    })\n  }\n\n  return firehoseModule\n}\n\nexport class AWSFirehoseAppender<\n  Record extends LogRecord = LogRecord\n> implements Appender<Record> {\n  private pendingRecords = Array<LogRecord>()\n  private flushDeferred: Deferred<void>\n  private flushIntervalMs = 1000\n\n  public readonly credentialManager: AWSFirehoseCredentialManager\n\n  constructor(public readonly credentialEndpointUrl: string) {\n    this.credentialManager = new AWSFirehoseCredentialManager(\n      credentialEndpointUrl\n    )\n    this.credentialManager.on(\"received\", () => {\n      log.info(\"Credentials received, initializing firehose client\")\n      if (!this.pendingRecords.length || !!this.flushDeferred) {\n        log.debug(\n          \"Nothing to flush upon credential receipt OR flush already in progress\"\n        )\n        return\n      }\n      this.flush().catch((e: Error) => {\n        log.error(\n          `Error flushing logs after credential receipt: ${e.message}`,\n          e\n        )\n      })\n    })\n  }\n  append(record: Record): void {\n    const pendingCount = this.pendingRecords.length + 1,\n      removeCount = LogQueueMaxRecords - pendingCount\n\n    if (removeCount < 0) {\n      this.pendingRecords.splice(0, Math.abs(removeCount))\n    }\n\n    this.pendingRecords.push({\n      timestamp: Date.now(),\n      ...record,\n      app: record.app?.length > 0 ? record.app : \"UNKNOWN\",\n      env: record.env?.length > 0 ? record.env : \"UNKNOWN\",\n      url: typeof window === \"undefined\" ? \"local://\" : window.location.href\n    })\n\n    this.flush()\n  }\n\n  /**\n   * Create the Firehose client for a loaded credential set.\n   * @param creds Loaded Firehose credentials.\n   * @returns Firehose client.\n   */\n  private async getFirehose(creds: AWSCredentials): Promise<FirehoseClient> {\n    const { region, streamName } = creds\n\n    if (!region || !streamName) {\n      throw new Error(\"Region or stream name not available\")\n    }\n\n    const { FirehoseClient } = await getFirehoseModule()\n    const client = new FirehoseClient({\n      region: creds.region,\n      credentials: pick(creds, \"accessKeyId\", \"secretAccessKey\", \"sessionToken\")\n    })\n\n    return client\n  }\n\n  /**\n   * Flush pending records\n   *\n   * @returns {Promise<void>}\n   */\n  private async flush(): Promise<void> {\n    if (!!this.flushDeferred) {\n      log.debug(\"Flush already in progress, skipping\")\n      return\n    }\n\n    if (!this.pendingRecords.length) {\n      log.debug(\"No pending records to flush\")\n      return\n    }\n    const creds = this.credentialManager.getCredentials()\n    if (!creds) {\n      log.warn(\"No credentials available for flush\")\n      return\n    }\n\n    const deferred = (this.flushDeferred = new Deferred<void>())\n    try {\n      const { streamName } = creds,\n        client = await this.getFirehose(creds),\n        { PutRecordBatchCommand } = await getFirehoseModule()\n\n      while (this.pendingRecords.length) {\n        const chunkSize = Math.min(this.pendingRecords.length, 10),\n          records = this.pendingRecords.splice(0, chunkSize),\n          recordJsons = records.map(record => JSON.stringify(record))\n\n        if (log.isDebugEnabled()) log.debug(\"Records\", records)\n\n        const textEncoder = new TextEncoder(),\n          batch: PutRecordBatchInput[\"Records\"] = recordJsons.map(jsonStr => ({\n            Data: textEncoder.encode(jsonStr)\n          }))\n\n        log.info(`Pushing ${records.length} records to firehose`)\n\n        const cmd = new PutRecordBatchCommand({\n          DeliveryStreamName: streamName,\n          Records: batch\n        })\n\n        const resp = await client.send(cmd)\n        const failed = resp.FailedPutCount || 0\n        if (failed) {\n          const rr = resp.RequestResponses || []\n          for (let i = 0; i < rr.length; i++) {\n            if (rr[i].ErrorCode) {\n              log.warn(\n                `Record failed: ${rr[i].ErrorCode} ${rr[i].ErrorMessage}`\n              )\n              //this.pendingRecords.unshift(records[i])\n            }\n          }\n          log.info(`PutRecordBatch failed=${failed}; requeued failed records`)\n        } else {\n          log.info(`PutRecordBatch ok count=${records.length}`)\n        }\n      }\n      deferred.resolve()\n    } catch (err) {\n      log.error(\"Failed to push logs\", err)\n      if (err.name === ExpiredTokenExceptionCode) {\n        this.credentialManager.forceUpdateCredentials()\n      }\n      deferred.reject(err)\n    } finally {\n      this.flushDeferred = null\n\n      // if (this.pendingRecords.length)\n      //   this.flush()\n    }\n\n    return deferred.promise\n  }\n}\n\nexport default AWSFirehoseAppender\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport EventEmitter3 from \"eventemitter3\"\nimport { Deferred } from \"../../../helpers/index.js\"\nimport { LogRecord } from \"../../LogRecord.js\"\nimport { Appender } from \"../../Appender.js\"\nimport { getInternalLogger } from \"../../InternalLogger.js\"\n\n// Constants for tuning (adjustable in development)\nconst COOKIE_EXPIRATION_MS = 5 * 60 * 1000 // 30 minutes\nconst COOKIE_REFRESH_BUFFER_MS = 2 * 60 * 1000 // Refresh 2 minutes before expiration\nconst FLUSH_QUEUE_DEPTH = 1000\nconst FLUSH_INTERVAL_MS = 5 * 1000 // 10 seconds\nconst LOG_QUEUE_MAX_RECORDS = 10000\nconst COOKIE_NAME = \"wire_logs_id\"\n\nconst log = getInternalLogger()\n\ninterface PushLogRecordsCredentialManagerEventMap {\n  received: () => void\n  expired: () => void\n}\n\n/**\n * Manages credential cookie for PushLogRecordsAppender.\n * Invokes the endpoint via POST to obtain a session cookie.\n */\nexport class PushLogRecordsCredentialManager extends EventEmitter3<PushLogRecordsCredentialManagerEventMap> {\n  private refreshTimer: ReturnType<typeof setTimeout> | null = null\n  private credentialDeferred: Deferred<void> | null = null\n  private cookieExpirationTime: number | null = null\n\n  constructor(public readonly endpointUrl: string) {\n    super()\n  }\n\n  /**\n   * Check if valid credentials exist\n   */\n  hasCredentials(): boolean {\n    if (!this.cookieExpirationTime) {\n      return false\n    }\n\n    if (Date.now() >= this.cookieExpirationTime) {\n      this.cookieExpirationTime = null\n      this.emit(\"expired\")\n      return false\n    }\n\n    return true\n  }\n\n  /**\n   * Get credentials, fetching them if necessary\n   */\n  async ensureCredentials(): Promise<boolean> {\n    // If we have valid credentials, return immediately\n    if (this.hasCredentials()) {\n      return true\n    }\n\n    // If a fetch is already in progress, wait for it\n    if (this.credentialDeferred && !this.credentialDeferred.isSettled()) {\n      try {\n        await this.credentialDeferred.promise\n        return this.hasCredentials()\n      } catch {\n        return false\n      }\n    }\n\n    // Fetch new credentials\n    return this.fetchCredentials()\n  }\n\n  /**\n   * Force refresh of credentials\n   */\n  forceRefresh(): void {\n    if (this.refreshTimer) {\n      clearTimeout(this.refreshTimer)\n      this.refreshTimer = null\n    }\n\n    this.cookieExpirationTime = null\n\n    if (this.credentialDeferred && !this.credentialDeferred.isSettled()) {\n      this.credentialDeferred.reject(new Error(\"Force refresh requested\"))\n    }\n    this.credentialDeferred = null\n\n    this.fetchCredentials().catch(() => {\n      // Ignore errors during force refresh, they'll be handled on next request\n    })\n  }\n\n  /**\n   * Fetch credentials from the endpoint\n   */\n  private async fetchCredentials(): Promise<boolean> {\n    const deferred = (this.credentialDeferred = new Deferred<void>())\n\n    try {\n      const response = await fetch(this.endpointUrl, {\n        method: \"POST\",\n        mode: \"cors\",\n        credentials: \"include\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify({})\n      })\n\n      if (!response.ok) {\n        throw new Error(\n          `Credential request failed with status ${response.status}`\n        )\n      }\n\n      // Cookie is set by Set-Cookie header, we just need to track expiration\n      this.cookieExpirationTime = Date.now() + COOKIE_EXPIRATION_MS\n\n      // Schedule refresh before expiration\n      this.scheduleRefresh()\n\n      deferred.resolve()\n      this.emit(\"received\")\n\n      return true\n    } catch (err) {\n      log.warn(\"Failed to fetch push log credentials\", err)\n      deferred.reject(err)\n      this.credentialDeferred = null\n      return false\n    }\n  }\n\n  /**\n   * Schedule a credential refresh before expiration\n   */\n  private scheduleRefresh(): void {\n    if (this.refreshTimer) {\n      clearTimeout(this.refreshTimer)\n    }\n\n    const refreshIn = COOKIE_EXPIRATION_MS - COOKIE_REFRESH_BUFFER_MS\n    this.refreshTimer = setTimeout(() => {\n      this.credentialDeferred = null\n      this.fetchCredentials().catch(() => {\n        // Log but don't throw - will retry on next request\n        log.debug(\"Scheduled credential refresh failed\")\n      })\n    }, refreshIn)\n  }\n\n  /**\n   * Clean up resources\n   */\n  destroy(): void {\n    if (this.refreshTimer) {\n      clearTimeout(this.refreshTimer)\n      this.refreshTimer = null\n    }\n\n    if (this.credentialDeferred && !this.credentialDeferred.isSettled()) {\n      this.credentialDeferred.reject(new Error(\"Credential manager destroyed\"))\n    }\n\n    this.credentialDeferred = null\n    this.cookieExpirationTime = null\n  }\n}\n\n/**\n * Appender that pushes log records to a remote endpoint via HTTP PUT.\n * Batches records and sends when queue reaches FLUSH_QUEUE_DEPTH or FLUSH_INTERVAL_MS has elapsed.\n */\nexport class PushLogRecordsAppender<\n  Record extends LogRecord = LogRecord\n> implements Appender<Record> {\n  private pendingRecords: LogRecord[] = []\n  private flushDeferred: Deferred<void> | null = null\n  private flushTimer: ReturnType<typeof setTimeout> | null = null\n\n  public readonly credentialManager: PushLogRecordsCredentialManager\n\n  constructor(public readonly endpointUrl: string) {\n    this.credentialManager = new PushLogRecordsCredentialManager(endpointUrl)\n\n    this.credentialManager.on(\"received\", () => {\n      if (!this.pendingRecords.length || this.flushDeferred) {\n        return\n      }\n      this.flush().catch(() => {\n        // Errors handled in flush\n      })\n    })\n  }\n\n  /**\n   * Append a log record to the queue\n   */\n  append(record: Record): void {\n    // Add the record with enriched metadata\n    this.pendingRecords.push({\n      timestamp: Date.now(),\n      ...record,\n      app: record.app && record.app.length > 0 ? record.app : \"UNKNOWN\",\n      env: record.env && record.env.length > 0 ? record.env : \"UNKNOWN\",\n      url: typeof window === \"undefined\" ? \"local://\" : window.location.href\n    })\n    this.trimPendingRecordsToQueueCap()\n\n    // Check if we should flush immediately due to queue depth\n    if (this.pendingRecords.length >= FLUSH_QUEUE_DEPTH) {\n      this.flush().catch(() => {\n        // Errors handled in flush\n      })\n    } else {\n      // Schedule a flush if not already scheduled\n      this.scheduleFlush()\n    }\n  }\n\n  /**\n   * Schedule a flush after the interval\n   */\n  private scheduleFlush(): void {\n    if (this.flushTimer) {\n      return // Already scheduled\n    }\n\n    this.flushTimer = setTimeout(() => {\n      this.flushTimer = null\n      this.flush().catch(() => {\n        // Errors handled in flush\n      })\n    }, FLUSH_INTERVAL_MS)\n  }\n\n  /**\n   * Flush pending records to the endpoint\n   */\n  private async flush(): Promise<void> {\n    // Prevent concurrent flushes\n    if (this.flushDeferred) {\n      return this.flushDeferred.promise\n    }\n\n    // Nothing to flush\n    if (!this.pendingRecords.length) {\n      return\n    }\n\n    // Ensure we have valid credentials\n    const hasCredentials = await this.credentialManager.ensureCredentials()\n    if (!hasCredentials) {\n      log.debug(\"Failed to push log records\", \"No valid credentials available\")\n      return\n    }\n\n    const deferred = (this.flushDeferred = new Deferred<void>())\n\n    try {\n      // Take all pending records for this flush\n      const records = this.pendingRecords.splice(0, this.pendingRecords.length)\n      const payload = { records: records.map(record => JSON.stringify(record)) }\n\n      const response = await fetch(this.endpointUrl, {\n        method: \"PUT\",\n        mode: \"cors\",\n        credentials: \"include\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        body: JSON.stringify(payload)\n      })\n\n      if (!response.ok) {\n        // Re-queue records on failure\n        this.pendingRecords.unshift(...records)\n        this.trimPendingRecordsToQueueCap()\n        throw new Error(`Push failed with status ${response.status}`)\n      }\n\n      deferred.resolve()\n    } catch (err) {\n      log.debug(\"Failed to push log records\", err)\n      deferred.reject(err)\n    } finally {\n      this.flushDeferred = null\n\n      // If more records accumulated during flush, schedule another\n      if (this.pendingRecords.length > 0) {\n        this.scheduleFlush()\n      }\n    }\n\n    return deferred.promise\n  }\n\n  /**\n   * Force an immediate flush\n   */\n  async forceFlush(): Promise<void> {\n    if (this.flushTimer) {\n      clearTimeout(this.flushTimer)\n      this.flushTimer = null\n    }\n\n    return this.flush()\n  }\n\n  /**\n   * Enforce the pending queue cap by dropping the oldest records.\n   */\n  private trimPendingRecordsToQueueCap(): void {\n    const removeCount = this.pendingRecords.length - LOG_QUEUE_MAX_RECORDS\n\n    if (removeCount > 0) {\n      this.pendingRecords.splice(0, removeCount)\n    }\n  }\n\n  /**\n   * Clean up resources\n   */\n  destroy(): void {\n    if (this.flushTimer) {\n      clearTimeout(this.flushTimer)\n      this.flushTimer = null\n    }\n\n    this.credentialManager.destroy()\n\n    if (this.flushDeferred && !this.flushDeferred.isSettled()) {\n      this.flushDeferred.reject(new Error(\"Appender destroyed\"))\n    }\n\n    this.flushDeferred = null\n    this.pendingRecords = []\n  }\n}\n\nexport default PushLogRecordsAppender\n", "import type { Logger, LoggerOptions } from \"./Logger.js\"\nimport { getLoggingManager } from \"./LoggingManager.js\"\n\nexport function getLogger(\n  category: string,\n  options: Partial<LoggerOptions> = {}\n): Logger {\n  return getLoggingManager().getLogger(category, options)\n}\n", "import type { ClusterConfig, ClusterState } from \"@wireio/cluster-tool-shared\"\nimport type {\n  InferredStreamEvent,\n  InferredStreamParams,\n  LoadEnvelopeRecordsRequest,\n  LoadEnvelopeRecordsResponse,\n  LogReadRequest,\n  LogStat,\n  PidSource,\n  ProcessLivenessSnapshot,\n  StreamTopic\n} from \"@wireio/debugging-shared\"\nimport type {\n  GetEnvelopeResponse,\n  ListEnvelopesRequest,\n  ListEnvelopesResponse\n} from \"@wireio/opp-typescript-models\"\n\nimport type { DebuggingSubscription } from \"./subscriptions/index.js\"\n\n/**\n * Transport-agnostic interface for every operation the TUI (and future\n * debugging consumers) need. Concrete subclasses implement the wire — disk\n * vs. HTTP+WebSocket — but expose the exact same shape so consumer code\n * never branches on transport.\n *\n * Lifecycle: callers should `await connect()` after construction and\n * `disconnect()` before discarding the instance. Both are idempotent.\n */\nexport abstract class DebuggingClient {\n  /**\n   * Open any underlying transports (TCP/WebSocket/etc). Local-disk\n   * implementations no-op. Calling twice is safe.\n   */\n  abstract connect(): Promise<void>\n\n  /**\n   * Tear down transports and close every active subscription. Calling\n   * twice is safe.\n   */\n  abstract disconnect(): Promise<void>\n\n  // -------------------------------------------------------------------------\n  //  Cluster\n  // -------------------------------------------------------------------------\n\n  /** Current cluster config. Throws when `cluster-config.json` is unreadable. */\n  abstract getClusterConfig(): Promise<ClusterConfig>\n\n  /** Post-bootstrap cluster state. `null` when the cluster has not bootstrapped yet. */\n  abstract getClusterState(): Promise<ClusterState>\n\n  // -------------------------------------------------------------------------\n  //  Process monitor\n  // -------------------------------------------------------------------------\n\n  /** Filesystem-discovered pid-file-backed source list. */\n  abstract listProcessSources(): Promise<PidSource[]>\n\n  /**\n   * Probe kernel liveness for each requested label. Empty `labels` probes\n   * every known source; otherwise returns one snapshot per requested label.\n   */\n  abstract getProcessLiveness(\n    labels: string[]\n  ): Promise<ProcessLivenessSnapshot[]>\n\n  // -------------------------------------------------------------------------\n  //  Logs\n  // -------------------------------------------------------------------------\n\n  /** Stat snapshot for a log file (`totalBytes`, `totalLines`, `ino`). */\n  abstract getLogStat(path: string): Promise<LogStat>\n\n  /** Read a `[fromLine, fromLine+count)` window of a log file. */\n  abstract readLogWindow(req: LogReadRequest): Promise<string[]>\n\n  // -------------------------------------------------------------------------\n  //  OPP envelope debug\n  // -------------------------------------------------------------------------\n\n  /** List stored envelopes matching the filters in `req`. */\n  abstract listEnvelopes(\n    req: ListEnvelopesRequest\n  ): Promise<ListEnvelopesResponse>\n\n  /** Read one stored envelope by storage key. */\n  abstract getEnvelope(key: string): Promise<GetEnvelopeResponse>\n\n  /**\n   * Bulk-fetch fully-decoded epoch records matching a filter — used by\n   * \"load older\" affordances in UIs. Returns the same plainified shape\n   * the `EnvelopeWatch` stream emits, so the consumer's slice-update\n   * code path is identical to the live-tail path.\n   */\n  abstract loadEnvelopeRecords(\n    req: LoadEnvelopeRecordsRequest\n  ): Promise<LoadEnvelopeRecordsResponse>\n\n  // -------------------------------------------------------------------------\n  //  Streams\n  // -------------------------------------------------------------------------\n\n  /**\n   * Open a subscription on the given topic. Returns a typed\n   * `DebuggingSubscription` whose `event` listener receives the topic's\n   * payload type. Consumer must call `close()` to tear down.\n   */\n  abstract subscribe<T extends StreamTopic>(\n    topic: T,\n    params: InferredStreamParams<T>\n  ): Promise<DebuggingSubscription<InferredStreamEvent<T>>>\n}\n", "import Assert from \"node:assert\"\n\nimport { defaults } from \"lodash\"\n\nimport {\n  ApiPaths,\n  DebuggingDefaults,\n  type HandlerURIType,\n  type InferredRequestType,\n  type InferredResponseType\n} from \"@wireio/debugging-shared\"\n\nimport { JsonRPCClient } from \"./rpc/JsonRPCClient.js\"\n\n/**\n * Caller-facing knobs for {@link DebuggingServerClient.create}. Everything\n * is optional — omitted fields take defaults from {@link DebuggingDefaults}.\n */\nexport interface DebuggingToolClientOptions {\n  /** Server base URL, e.g. `\"http://localhost:9876\"`. */\n  baseUrl?: string\n}\n\n/** Fully-resolved runtime config derived from {@link DebuggingToolClientOptions}. */\nexport interface DebuggingToolClientConfig extends Required<DebuggingToolClientOptions> {}\n\n/**\n * High-level client for the debugging server.\n *\n * Wraps {@link JsonRPCClient} for OPP RPC calls and adds:\n *   - a ping health check so constructor failure surfaces before any RPC,\n *   - default host/port resolution via {@link DebuggingDefaults}.\n *\n * Prefer this class for end-user tooling. If you only need the transport\n * (e.g. you already have a validated URL), construct {@link JsonRPCClient}\n * directly.\n */\nexport class DebuggingServerClient {\n  /**\n   * Create a client, verifying connectivity with a `GET /api/ping` round-trip.\n   *\n   * @param options - Optional overrides; omitted fields take defaults.\n   * @returns A ready-to-use client. The underlying transport is constructed\n   *          lazily in the private constructor — no connections are held\n   *          open.\n   * @throws When the health check does not return HTTP 200.\n   */\n  static async create(\n    options: DebuggingToolClientOptions = {}\n  ): Promise<DebuggingServerClient> {\n    const config = defaults(\n      { ...options },\n      { baseUrl: DebuggingServerClient.DefaultURL }\n    ) as DebuggingToolClientConfig\n\n    const pingUrl = `${config.baseUrl}${ApiPaths.Ping}`\n    const resp = await fetch(pingUrl)\n    Assert.ok(\n      resp.status === 200,\n      `Debugging server not reachable at ${pingUrl}`\n    )\n\n    const rpc = new JsonRPCClient(`${config.baseUrl}${ApiPaths.OPP.Endpoint}`)\n    return new DebuggingServerClient(config, rpc)\n  }\n\n  private constructor(\n    readonly config: DebuggingToolClientConfig,\n    private readonly rpc: JsonRPCClient\n  ) {}\n\n  /**\n   * Typed JSON-RPC 2.0 call. Delegates to {@link JsonRPCClient.invoke}.\n   *\n   * @param method - `HandlerMap` key (e.g. `ApiPaths.OPP.Methods.Envelope`).\n   * @param params - Request body; type inferred from the handler entry.\n   * @returns The decoded response body, typed from the handler entry.\n   */\n  call<U extends HandlerURIType>(\n    method: U,\n    params: InferredRequestType<U>\n  ): Promise<InferredResponseType<U>> {\n    return this.rpc.invoke(method, params)\n  }\n}\n\nexport namespace DebuggingServerClient {\n  /** Network defaults re-surfaced from {@link DebuggingDefaults} for factory ergonomics. */\n  export const DefaultHost = DebuggingDefaults.Host\n  export const DefaultPort = DebuggingDefaults.Port\n  export const DefaultScheme = DebuggingDefaults.Scheme\n  export const DefaultURL = DebuggingDefaults.URL\n}\n", "import * as Fs from \"node:fs\"\nimport * as Path from \"node:path\"\n\nimport {\n  DebugEnvelopeMetadataRecord,\n  DebugOutpostEndpointsType,\n  Envelope\n} from \"@wireio/opp-typescript-models\"\n\nimport {\n  parseEnvelopeStorageKey,\n  resolveEndpointsType\n} from \"./EnvelopeStorageKey.js\"\nimport { plainify } from \"./Plainify.js\"\nimport type {\n  DebugOPPEnvelopeRecord,\n  DebugOPPEpochRecord\n} from \"./OPPDebugTypes.js\"\n\n/** Shared `.data` / `.metadata` extensions used by every consumer of the OPP debug dir. */\nexport namespace EnvelopeRecordFile {\n  export const DataExt = \".data\" as const\n  export const MetadataExt = \".metadata\" as const\n}\n\n/** Optional filter applied while reading the storage directory. */\nexport interface EnvelopeRecordFilter {\n  /** Inclusive lower-bound epoch index; `undefined` means no lower bound. */\n  epochStart?: number\n  /** Inclusive upper-bound epoch index; `undefined` means no upper bound. */\n  epochEnd?: number\n  /** Restrict to one endpoints variant; `undefined` (or `UNKNOWN`) returns every variant. */\n  endpointsType?: DebugOutpostEndpointsType\n}\n\n/**\n * Scan the OPP debug storage directory, decode every `.data`/`.metadata`\n * pair that survives the filter, and return them grouped by epoch (sorted\n * ascending). Each pair is decoded once; per-pair failures are swallowed\n * so a single malformed file doesn't stall the whole batch.\n *\n * Used by both the server's unary `LoadRecords` route and the local-disk\n * client's `loadEnvelopeRecords` implementation — same code path so the\n * shape and dedup rules can't drift between transports.\n */\nexport async function readEnvelopeRecordsFromDir(\n  storageDir: string,\n  filter: EnvelopeRecordFilter = {}\n): Promise<DebugOPPEpochRecord[]> {\n  if (!Fs.existsSync(storageDir)) return []\n  const filenames = await Fs.promises.readdir(storageDir),\n    baseKeys = filenames\n      .filter(f => f.endsWith(EnvelopeRecordFile.MetadataExt))\n      .map(f =>\n        f.slice(0, -EnvelopeRecordFile.MetadataExt.length)\n      ),\n    byEpoch = new Map<number, DebugOPPEnvelopeRecord[]>()\n\n  await Promise.all(\n    baseKeys.map(async baseKey => {\n      const record = await tryReadOne(storageDir, baseKey, filter)\n      if (!record) return\n      const arr = byEpoch.get(record.epoch) ?? []\n      arr.push(record.record)\n      byEpoch.set(record.epoch, arr)\n    })\n  )\n\n  return [...byEpoch.entries()]\n    .sort((a, b) => a[0] - b[0])\n    .map(([epoch, envelopes]) => ({ epoch, envelopes }))\n}\n\n/** Read + decode one `(epoch, record)` pair. Returns `null` when filtered out or unreadable. */\nasync function tryReadOne(\n  storageDir: string,\n  baseKey: string,\n  filter: EnvelopeRecordFilter\n): Promise<{ epoch: number; record: DebugOPPEnvelopeRecord } | null> {\n  const parsed = parseEnvelopeStorageKey(baseKey)\n  if (!parsed) return null\n  if (filter.epochStart !== undefined && parsed.epochIndex < filter.epochStart)\n    return null\n  if (filter.epochEnd !== undefined && parsed.epochIndex > filter.epochEnd)\n    return null\n  const endpointsType = resolveEndpointsType(parsed.endpointsKey)\n  if (\n    filter.endpointsType !== undefined &&\n    filter.endpointsType !== DebugOutpostEndpointsType.UNKNOWN &&\n    endpointsType !== filter.endpointsType\n  ) {\n    return null\n  }\n  const dataPath = Path.join(\n      storageDir,\n      baseKey + EnvelopeRecordFile.DataExt\n    ),\n    metaPath = Path.join(\n      storageDir,\n      baseKey + EnvelopeRecordFile.MetadataExt\n    )\n  try {\n    const [dataBytes, metaBytes] = await Promise.all([\n      Fs.promises.readFile(dataPath),\n      Fs.promises.readFile(metaPath)\n    ])\n    return {\n      epoch: parsed.epochIndex,\n      record: {\n        checksum: parsed.checksum,\n        endpointsType,\n        envelope: plainify(Envelope.fromBinary(dataBytes)),\n        metadata: plainify(\n          DebugEnvelopeMetadataRecord.fromBinary(metaBytes)\n        ),\n        receivedAt: Date.now()\n      }\n    }\n  } catch {\n    return null\n  }\n}\n", "import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { EmissionsBlockReason } from \"../types/types.js\";\nimport { AttestationType } from \"../types/types.js\";\nimport { Message } from \"../opp.js\";\nimport { WireKey } from \"../types/types.js\";\nimport { WireAccount } from \"../types/types.js\";\nimport { ChainSignature } from \"../types/types.js\";\nimport { OperatorStatus } from \"../types/types.js\";\nimport { OperatorType } from \"../types/types.js\";\nimport { StakeStatus } from \"../types/types.js\";\nimport { TokenAmount } from \"../types/types.js\";\nimport { ChainAddress } from \"../types/types.js\";\nimport { ReserveAmount } from \"../types/types.js\";\n/**\n * @generated from protobuf enum sysio.opp.attestations.OperatorAction.ActionType\n */\nexport var OperatorAction_ActionType;\n(function (OperatorAction_ActionType) {\n    /**\n     * @generated from protobuf enum value: ACTION_TYPE_UNKNOWN = 0;\n     */\n    OperatorAction_ActionType[OperatorAction_ActionType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: ACTION_TYPE_DEPOSIT_REQUEST = 1;\n     */\n    OperatorAction_ActionType[OperatorAction_ActionType[\"DEPOSIT_REQUEST\"] = 1] = \"DEPOSIT_REQUEST\";\n    /**\n     * @generated from protobuf enum value: ACTION_TYPE_WITHDRAW_REQUEST = 2;\n     */\n    OperatorAction_ActionType[OperatorAction_ActionType[\"WITHDRAW_REQUEST\"] = 2] = \"WITHDRAW_REQUEST\";\n    /**\n     * @generated from protobuf enum value: ACTION_TYPE_WITHDRAW_REMIT = 3;\n     */\n    OperatorAction_ActionType[OperatorAction_ActionType[\"WITHDRAW_REMIT\"] = 3] = \"WITHDRAW_REMIT\";\n    /**\n     * @generated from protobuf enum value: ACTION_TYPE_SLASH = 4;\n     */\n    OperatorAction_ActionType[OperatorAction_ActionType[\"SLASH\"] = 4] = \"SLASH\";\n})(OperatorAction_ActionType || (OperatorAction_ActionType = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveBalanceSheet$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveBalanceSheet\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"reserves\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ReserveAmount }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.reserves = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* repeated sysio.opp.types.ReserveAmount reserves */ 4:\n                    message.reserves.push(ReserveAmount.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* repeated sysio.opp.types.ReserveAmount reserves = 4; */\n        for (let i = 0; i < message.reserves.length; i++)\n            ReserveAmount.internalBinaryWrite(message.reserves[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveBalanceSheet\n */\nexport const ReserveBalanceSheet = new ReserveBalanceSheet$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PretokenStakeChange$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.PretokenStakeChange\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 10, name: \"index_at_mint\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 11, name: \"index_at_burn\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.indexAtMint = 0n;\n        message.indexAtBurn = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* int64 index_at_mint */ 10:\n                    message.indexAtMint = reader.int64().toBigInt();\n                    break;\n                case /* int64 index_at_burn */ 11:\n                    message.indexAtBurn = reader.int64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* int64 index_at_mint = 10; */\n        if (message.indexAtMint !== 0n)\n            writer.tag(10, WireType.Varint).int64(message.indexAtMint);\n        /* int64 index_at_burn = 11; */\n        if (message.indexAtBurn !== 0n)\n            writer.tag(11, WireType.Varint).int64(message.indexAtBurn);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.PretokenStakeChange\n */\nexport const PretokenStakeChange = new PretokenStakeChange$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PretokenPurchase$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.PretokenPurchase\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"pretoken_count\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 10, name: \"index_at_mint\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.pretokenCount = 0n;\n        message.indexAtMint = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* int64 pretoken_count */ 3:\n                    message.pretokenCount = reader.int64().toBigInt();\n                    break;\n                case /* int64 index_at_mint */ 10:\n                    message.indexAtMint = reader.int64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* int64 pretoken_count = 3; */\n        if (message.pretokenCount !== 0n)\n            writer.tag(3, WireType.Varint).int64(message.pretokenCount);\n        /* int64 index_at_mint = 10; */\n        if (message.indexAtMint !== 0n)\n            writer.tag(10, WireType.Varint).int64(message.indexAtMint);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.PretokenPurchase\n */\nexport const PretokenPurchase = new PretokenPurchase$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PretokenYield$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.PretokenYield\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"index_at_mint\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.indexAtMint = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* int64 index_at_mint */ 3:\n                    message.indexAtMint = reader.int64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* int64 index_at_mint = 3; */\n        if (message.indexAtMint !== 0n)\n            writer.tag(3, WireType.Varint).int64(message.indexAtMint);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.PretokenYield\n */\nexport const PretokenYield = new PretokenYield$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StakeUpdate$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.StakeUpdate\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"status\", kind: \"enum\", T: () => [\"sysio.opp.types.StakeStatus\", StakeStatus, \"STAKE_STATUS_\"] },\n            { no: 3, name: \"amount\", kind: \"message\", T: () => TokenAmount }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.status = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.StakeStatus status */ 2:\n                    message.status = reader.int32();\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 3:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.StakeStatus status = 2; */\n        if (message.status !== 0)\n            writer.tag(2, WireType.Varint).int32(message.status);\n        /* sysio.opp.types.TokenAmount amount = 3; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.StakeUpdate\n */\nexport const StakeUpdate = new StakeUpdate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WireTokenPurchase$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.WireTokenPurchase\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amounts\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => TokenAmount }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.amounts = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* repeated sysio.opp.types.TokenAmount amounts */ 2:\n                    message.amounts.push(TokenAmount.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.types.TokenAmount amounts = 2; */\n        for (let i = 0; i < message.amounts.length; i++)\n            TokenAmount.internalBinaryWrite(message.amounts[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.WireTokenPurchase\n */\nexport const WireTokenPurchase = new WireTokenPurchase$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass OperatorAction$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.OperatorAction\", [\n            { no: 1, name: \"action_type\", kind: \"enum\", T: () => [\"sysio.opp.attestations.OperatorAction.ActionType\", OperatorAction_ActionType, \"ACTION_TYPE_\"] },\n            { no: 2, name: \"op_address\", kind: \"message\", T: () => ChainAddress },\n            { no: 3, name: \"type\", kind: \"enum\", T: () => [\"sysio.opp.types.OperatorType\", OperatorType, \"OPERATOR_TYPE_\"] },\n            { no: 4, name: \"status\", kind: \"enum\", T: () => [\"sysio.opp.types.OperatorStatus\", OperatorStatus, \"OPERATOR_STATUS_\"] },\n            { no: 5, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 6, name: \"request_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"reason\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 9, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.actionType = 0;\n        message.type = 0;\n        message.status = 0;\n        message.requestId = 0n;\n        message.chainCode = 0n;\n        message.reason = \"\";\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.attestations.OperatorAction.ActionType action_type */ 1:\n                    message.actionType = reader.int32();\n                    break;\n                case /* sysio.opp.types.ChainAddress op_address */ 2:\n                    message.opAddress = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.opAddress);\n                    break;\n                case /* sysio.opp.types.OperatorType type */ 3:\n                    message.type = reader.int32();\n                    break;\n                case /* sysio.opp.types.OperatorStatus status */ 4:\n                    message.status = reader.int32();\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 5:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* uint64 request_id */ 6:\n                    message.requestId = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 chain_code */ 7:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* string reason */ 8:\n                    message.reason = reader.string();\n                    break;\n                case /* uint64 reserve_code */ 9:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.attestations.OperatorAction.ActionType action_type = 1; */\n        if (message.actionType !== 0)\n            writer.tag(1, WireType.Varint).int32(message.actionType);\n        /* sysio.opp.types.ChainAddress op_address = 2; */\n        if (message.opAddress)\n            ChainAddress.internalBinaryWrite(message.opAddress, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.OperatorType type = 3; */\n        if (message.type !== 0)\n            writer.tag(3, WireType.Varint).int32(message.type);\n        /* sysio.opp.types.OperatorStatus status = 4; */\n        if (message.status !== 0)\n            writer.tag(4, WireType.Varint).int32(message.status);\n        /* sysio.opp.types.TokenAmount amount = 5; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 request_id = 6; */\n        if (message.requestId !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.requestId);\n        /* uint64 chain_code = 7; */\n        if (message.chainCode !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.chainCode);\n        /* string reason = 8; */\n        if (message.reason !== \"\")\n            writer.tag(8, WireType.LengthDelimited).string(message.reason);\n        /* uint64 reserve_code = 9; */\n        if (message.reserveCode !== 0n)\n            writer.tag(9, WireType.Varint).uint64(message.reserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.OperatorAction\n */\nexport const OperatorAction = new OperatorAction$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass OperatorActionLog$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.OperatorActionLog\", [\n            { no: 1, name: \"action\", kind: \"message\", T: () => OperatorAction },\n            { no: 2, name: \"success\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 3, name: \"timestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"error_message\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.success = false;\n        message.timestamp = 0n;\n        message.errorMessage = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.attestations.OperatorAction action */ 1:\n                    message.action = OperatorAction.internalBinaryRead(reader, reader.uint32(), options, message.action);\n                    break;\n                case /* bool success */ 2:\n                    message.success = reader.bool();\n                    break;\n                case /* int64 timestamp */ 3:\n                    message.timestamp = reader.int64().toBigInt();\n                    break;\n                case /* string error_message */ 4:\n                    message.errorMessage = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.attestations.OperatorAction action = 1; */\n        if (message.action)\n            OperatorAction.internalBinaryWrite(message.action, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* bool success = 2; */\n        if (message.success !== false)\n            writer.tag(2, WireType.Varint).bool(message.success);\n        /* int64 timestamp = 3; */\n        if (message.timestamp !== 0n)\n            writer.tag(3, WireType.Varint).int64(message.timestamp);\n        /* string error_message = 4; */\n        if (message.errorMessage !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.errorMessage);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.OperatorActionLog\n */\nexport const OperatorActionLog = new OperatorActionLog$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveDisbursement$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveDisbursement\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"signature\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ChainSignature }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.signature = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* repeated sysio.opp.types.ChainSignature signature */ 3:\n                    message.signature.push(ChainSignature.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.types.ChainSignature signature = 3; */\n        for (let i = 0; i < message.signature.length; i++)\n            ChainSignature.internalBinaryWrite(message.signature[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveDisbursement\n */\nexport const ReserveDisbursement = new ReserveDisbursement$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass NodeOwnerRegistration$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.NodeOwnerRegistration\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"actor_pub_key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 3, name: \"account\", kind: \"message\", T: () => WireAccount },\n            { no: 4, name: \"tier\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 5, name: \"token_contract\", kind: \"message\", T: () => ChainAddress },\n            { no: 6, name: \"token_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"token_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"timestamp\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 9, name: \"wire_pub_key\", kind: \"message\", T: () => WireKey }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.actorPubKey = new Uint8Array(0);\n        message.tier = 0;\n        message.tokenId = 0n;\n        message.tokenAmount = 0n;\n        message.timestamp = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* bytes actor_pub_key */ 2:\n                    message.actorPubKey = reader.bytes();\n                    break;\n                case /* sysio.opp.types.WireAccount account */ 3:\n                    message.account = WireAccount.internalBinaryRead(reader, reader.uint32(), options, message.account);\n                    break;\n                case /* uint32 tier */ 4:\n                    message.tier = reader.uint32();\n                    break;\n                case /* sysio.opp.types.ChainAddress token_contract */ 5:\n                    message.tokenContract = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.tokenContract);\n                    break;\n                case /* uint64 token_id */ 6:\n                    message.tokenId = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_amount */ 7:\n                    message.tokenAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 timestamp */ 8:\n                    message.timestamp = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.WireKey wire_pub_key */ 9:\n                    message.wirePubKey = WireKey.internalBinaryRead(reader, reader.uint32(), options, message.wirePubKey);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* bytes actor_pub_key = 2; */\n        if (message.actorPubKey.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.actorPubKey);\n        /* sysio.opp.types.WireAccount account = 3; */\n        if (message.account)\n            WireAccount.internalBinaryWrite(message.account, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        /* uint32 tier = 4; */\n        if (message.tier !== 0)\n            writer.tag(4, WireType.Varint).uint32(message.tier);\n        /* sysio.opp.types.ChainAddress token_contract = 5; */\n        if (message.tokenContract)\n            ChainAddress.internalBinaryWrite(message.tokenContract, writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 token_id = 6; */\n        if (message.tokenId !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.tokenId);\n        /* uint64 token_amount = 7; */\n        if (message.tokenAmount !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.tokenAmount);\n        /* uint64 timestamp = 8; */\n        if (message.timestamp !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.timestamp);\n        /* sysio.opp.types.WireKey wire_pub_key = 9; */\n        if (message.wirePubKey)\n            WireKey.internalBinaryWrite(message.wirePubKey, writer.tag(9, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.NodeOwnerRegistration\n */\nexport const NodeOwnerRegistration = new NodeOwnerRegistration$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ProtocolState$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ProtocolState\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"current_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 3, name: \"processed_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 10, name: \"incoming_messages\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Message },\n            { no: 11, name: \"outgoing_messages\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Message }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.currentMessageId = new Uint8Array(0);\n        message.processedMessageId = new Uint8Array(0);\n        message.incomingMessages = [];\n        message.outgoingMessages = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* bytes current_message_id */ 2:\n                    message.currentMessageId = reader.bytes();\n                    break;\n                case /* bytes processed_message_id */ 3:\n                    message.processedMessageId = reader.bytes();\n                    break;\n                case /* repeated sysio.opp.Message incoming_messages */ 10:\n                    message.incomingMessages.push(Message.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* repeated sysio.opp.Message outgoing_messages */ 11:\n                    message.outgoingMessages.push(Message.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* bytes current_message_id = 2; */\n        if (message.currentMessageId.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.currentMessageId);\n        /* bytes processed_message_id = 3; */\n        if (message.processedMessageId.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.processedMessageId);\n        /* repeated sysio.opp.Message incoming_messages = 10; */\n        for (let i = 0; i < message.incomingMessages.length; i++)\n            Message.internalBinaryWrite(message.incomingMessages[i], writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.Message outgoing_messages = 11; */\n        for (let i = 0; i < message.outgoingMessages.length; i++)\n            Message.internalBinaryWrite(message.outgoingMessages[i], writer.tag(11, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ProtocolState\n */\nexport const ProtocolState = new ProtocolState$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass SwapRequest$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.SwapRequest\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"source_amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"source_chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"source_reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 5, name: \"target_chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"target_token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"target_reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"recipient\", kind: \"message\", T: () => ChainAddress },\n            { no: 9, name: \"target_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 10, name: \"target_tolerance_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 11, name: \"target_timestamp_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 12, name: \"source_tx_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.sourceChainCode = 0n;\n        message.sourceReserveCode = 0n;\n        message.targetChainCode = 0n;\n        message.targetTokenCode = 0n;\n        message.targetReserveCode = 0n;\n        message.targetAmount = 0n;\n        message.targetToleranceBps = 0;\n        message.targetTimestampMs = 0n;\n        message.sourceTxId = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.TokenAmount source_amount */ 2:\n                    message.sourceAmount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.sourceAmount);\n                    break;\n                case /* uint64 source_chain_code */ 3:\n                    message.sourceChainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 source_reserve_code */ 4:\n                    message.sourceReserveCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 target_chain_code */ 5:\n                    message.targetChainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 target_token_code */ 6:\n                    message.targetTokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 target_reserve_code */ 7:\n                    message.targetReserveCode = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.ChainAddress recipient */ 8:\n                    message.recipient = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.recipient);\n                    break;\n                case /* uint64 target_amount */ 9:\n                    message.targetAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 target_tolerance_bps */ 10:\n                    message.targetToleranceBps = reader.uint32();\n                    break;\n                case /* uint64 target_timestamp_ms */ 11:\n                    message.targetTimestampMs = reader.uint64().toBigInt();\n                    break;\n                case /* bytes source_tx_id */ 12:\n                    message.sourceTxId = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount source_amount = 2; */\n        if (message.sourceAmount)\n            TokenAmount.internalBinaryWrite(message.sourceAmount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 source_chain_code = 3; */\n        if (message.sourceChainCode !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.sourceChainCode);\n        /* uint64 source_reserve_code = 4; */\n        if (message.sourceReserveCode !== 0n)\n            writer.tag(4, WireType.Varint).uint64(message.sourceReserveCode);\n        /* uint64 target_chain_code = 5; */\n        if (message.targetChainCode !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.targetChainCode);\n        /* uint64 target_token_code = 6; */\n        if (message.targetTokenCode !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.targetTokenCode);\n        /* uint64 target_reserve_code = 7; */\n        if (message.targetReserveCode !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.targetReserveCode);\n        /* sysio.opp.types.ChainAddress recipient = 8; */\n        if (message.recipient)\n            ChainAddress.internalBinaryWrite(message.recipient, writer.tag(8, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 target_amount = 9; */\n        if (message.targetAmount !== 0n)\n            writer.tag(9, WireType.Varint).uint64(message.targetAmount);\n        /* uint32 target_tolerance_bps = 10; */\n        if (message.targetToleranceBps !== 0)\n            writer.tag(10, WireType.Varint).uint32(message.targetToleranceBps);\n        /* uint64 target_timestamp_ms = 11; */\n        if (message.targetTimestampMs !== 0n)\n            writer.tag(11, WireType.Varint).uint64(message.targetTimestampMs);\n        /* bytes source_tx_id = 12; */\n        if (message.sourceTxId.length)\n            writer.tag(12, WireType.LengthDelimited).bytes(message.sourceTxId);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.SwapRequest\n */\nexport const SwapRequest = new SwapRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UnderwriteIntentCommit$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.UnderwriteIntentCommit\", [\n            { no: 1, name: \"uw_account\", kind: \"message\", T: () => WireAccount },\n            { no: 2, name: \"uw_ext_chain_addr\", kind: \"message\", T: () => ChainAddress },\n            { no: 3, name: \"uw_request_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 5, name: \"signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 6, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.uwRequestId = 0n;\n        message.signature = new Uint8Array(0);\n        message.tokenCode = 0n;\n        message.chainCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.WireAccount uw_account */ 1:\n                    message.uwAccount = WireAccount.internalBinaryRead(reader, reader.uint32(), options, message.uwAccount);\n                    break;\n                case /* sysio.opp.types.ChainAddress uw_ext_chain_addr */ 2:\n                    message.uwExtChainAddr = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.uwExtChainAddr);\n                    break;\n                case /* uint64 uw_request_id */ 3:\n                    message.uwRequestId = reader.uint64().toBigInt();\n                    break;\n                case /* bytes signature */ 5:\n                    message.signature = reader.bytes();\n                    break;\n                case /* uint64 token_code */ 6:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 chain_code */ 7:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 8:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.WireAccount uw_account = 1; */\n        if (message.uwAccount)\n            WireAccount.internalBinaryWrite(message.uwAccount, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.ChainAddress uw_ext_chain_addr = 2; */\n        if (message.uwExtChainAddr)\n            ChainAddress.internalBinaryWrite(message.uwExtChainAddr, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 uw_request_id = 3; */\n        if (message.uwRequestId !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.uwRequestId);\n        /* bytes signature = 5; */\n        if (message.signature.length)\n            writer.tag(5, WireType.LengthDelimited).bytes(message.signature);\n        /* uint64 token_code = 6; */\n        if (message.tokenCode !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.tokenCode);\n        /* uint64 chain_code = 7; */\n        if (message.chainCode !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.chainCode);\n        /* uint64 reserve_code = 8; */\n        if (message.reserveCode !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.reserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.UnderwriteIntentCommit\n */\nexport const UnderwriteIntentCommit = new UnderwriteIntentCommit$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass SwapRevert$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.SwapRevert\", [\n            { no: 1, name: \"original_swap_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 2, name: \"depositor\", kind: \"message\", T: () => ChainAddress },\n            { no: 3, name: \"refund_amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 4, name: \"reason\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"source_chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"source_reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.originalSwapMessageId = new Uint8Array(0);\n        message.reason = \"\";\n        message.sourceChainCode = 0n;\n        message.sourceReserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* bytes original_swap_message_id */ 1:\n                    message.originalSwapMessageId = reader.bytes();\n                    break;\n                case /* sysio.opp.types.ChainAddress depositor */ 2:\n                    message.depositor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.depositor);\n                    break;\n                case /* sysio.opp.types.TokenAmount refund_amount */ 3:\n                    message.refundAmount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.refundAmount);\n                    break;\n                case /* string reason */ 4:\n                    message.reason = reader.string();\n                    break;\n                case /* uint64 source_chain_code */ 5:\n                    message.sourceChainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 source_reserve_code */ 6:\n                    message.sourceReserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* bytes original_swap_message_id = 1; */\n        if (message.originalSwapMessageId.length)\n            writer.tag(1, WireType.LengthDelimited).bytes(message.originalSwapMessageId);\n        /* sysio.opp.types.ChainAddress depositor = 2; */\n        if (message.depositor)\n            ChainAddress.internalBinaryWrite(message.depositor, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount refund_amount = 3; */\n        if (message.refundAmount)\n            TokenAmount.internalBinaryWrite(message.refundAmount, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        /* string reason = 4; */\n        if (message.reason !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.reason);\n        /* uint64 source_chain_code = 5; */\n        if (message.sourceChainCode !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.sourceChainCode);\n        /* uint64 source_reserve_code = 6; */\n        if (message.sourceReserveCode !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.sourceReserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.SwapRevert\n */\nexport const SwapRevert = new SwapRevert$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass SwapRemit$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.SwapRemit\", [\n            { no: 1, name: \"recipient\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"original_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 4, name: \"underwriter\", kind: \"message\", T: () => ChainAddress },\n            { no: 5, name: \"unlock_timestamp\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.originalMessageId = new Uint8Array(0);\n        message.unlockTimestamp = 0n;\n        message.chainCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress recipient */ 1:\n                    message.recipient = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.recipient);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* bytes original_message_id */ 3:\n                    message.originalMessageId = reader.bytes();\n                    break;\n                case /* sysio.opp.types.ChainAddress underwriter */ 4:\n                    message.underwriter = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.underwriter);\n                    break;\n                case /* uint64 unlock_timestamp */ 5:\n                    message.unlockTimestamp = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 chain_code */ 6:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 7:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress recipient = 1; */\n        if (message.recipient)\n            ChainAddress.internalBinaryWrite(message.recipient, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* bytes original_message_id = 3; */\n        if (message.originalMessageId.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.originalMessageId);\n        /* sysio.opp.types.ChainAddress underwriter = 4; */\n        if (message.underwriter)\n            ChainAddress.internalBinaryWrite(message.underwriter, writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 unlock_timestamp = 5; */\n        if (message.unlockTimestamp !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.unlockTimestamp);\n        /* uint64 chain_code = 6; */\n        if (message.chainCode !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.chainCode);\n        /* uint64 reserve_code = 7; */\n        if (message.reserveCode !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.reserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.SwapRemit\n */\nexport const SwapRemit = new SwapRemit$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChallengeRequest$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ChallengeRequest\", [\n            { no: 1, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"round\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"original_chain_hash\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 4, name: \"operator_hashes\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ChallengeOperatorHash }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.epochIndex = 0;\n        message.round = 0;\n        message.originalChainHash = new Uint8Array(0);\n        message.operatorHashes = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 epoch_index */ 1:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* uint32 round */ 2:\n                    message.round = reader.uint32();\n                    break;\n                case /* bytes original_chain_hash */ 3:\n                    message.originalChainHash = reader.bytes();\n                    break;\n                case /* repeated sysio.opp.attestations.ChallengeOperatorHash operator_hashes */ 4:\n                    message.operatorHashes.push(ChallengeOperatorHash.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 epoch_index = 1; */\n        if (message.epochIndex !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.epochIndex);\n        /* uint32 round = 2; */\n        if (message.round !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.round);\n        /* bytes original_chain_hash = 3; */\n        if (message.originalChainHash.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.originalChainHash);\n        /* repeated sysio.opp.attestations.ChallengeOperatorHash operator_hashes = 4; */\n        for (let i = 0; i < message.operatorHashes.length; i++)\n            ChallengeOperatorHash.internalBinaryWrite(message.operatorHashes[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ChallengeRequest\n */\nexport const ChallengeRequest = new ChallengeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChallengeOperatorHash$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ChallengeOperatorHash\", [\n            { no: 1, name: \"operator\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"chain_hash\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainHash = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress operator */ 1:\n                    message.operator = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.operator);\n                    break;\n                case /* bytes chain_hash */ 2:\n                    message.chainHash = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress operator = 1; */\n        if (message.operator)\n            ChainAddress.internalBinaryWrite(message.operator, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* bytes chain_hash = 2; */\n        if (message.chainHash.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.chainHash);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ChallengeOperatorHash\n */\nexport const ChallengeOperatorHash = new ChallengeOperatorHash$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Operators$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.Operators\", [\n            { no: 1, name: \"operators\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => OperatorEntry }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.operators = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* repeated sysio.opp.attestations.OperatorEntry operators */ 1:\n                    message.operators.push(OperatorEntry.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* repeated sysio.opp.attestations.OperatorEntry operators = 1; */\n        for (let i = 0; i < message.operators.length; i++)\n            OperatorEntry.internalBinaryWrite(message.operators[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.Operators\n */\nexport const Operators = new Operators$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass OperatorEntry$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.OperatorEntry\", [\n            { no: 1, name: \"account\", kind: \"message\", T: () => WireAccount },\n            { no: 2, name: \"addresses\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ChainAddress },\n            { no: 3, name: \"type\", kind: \"enum\", T: () => [\"sysio.opp.types.OperatorType\", OperatorType, \"OPERATOR_TYPE_\"] },\n            { no: 4, name: \"status\", kind: \"enum\", T: () => [\"sysio.opp.types.OperatorStatus\", OperatorStatus, \"OPERATOR_STATUS_\"] }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.addresses = [];\n        message.type = 0;\n        message.status = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.WireAccount account */ 1:\n                    message.account = WireAccount.internalBinaryRead(reader, reader.uint32(), options, message.account);\n                    break;\n                case /* repeated sysio.opp.types.ChainAddress addresses */ 2:\n                    message.addresses.push(ChainAddress.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* sysio.opp.types.OperatorType type */ 3:\n                    message.type = reader.int32();\n                    break;\n                case /* sysio.opp.types.OperatorStatus status */ 4:\n                    message.status = reader.int32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.WireAccount account = 1; */\n        if (message.account)\n            WireAccount.internalBinaryWrite(message.account, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.types.ChainAddress addresses = 2; */\n        for (let i = 0; i < message.addresses.length; i++)\n            ChainAddress.internalBinaryWrite(message.addresses[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.OperatorType type = 3; */\n        if (message.type !== 0)\n            writer.tag(3, WireType.Varint).int32(message.type);\n        /* sysio.opp.types.OperatorStatus status = 4; */\n        if (message.status !== 0)\n            writer.tag(4, WireType.Varint).int32(message.status);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.OperatorEntry\n */\nexport const OperatorEntry = new OperatorEntry$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass BatchOperatorGroups$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.BatchOperatorGroups\", [\n            { no: 1, name: \"active_group_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"groups\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => BatchOperatorGroup },\n            { no: 4, name: \"epoch_duration_sec\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.activeGroupIndex = 0;\n        message.epochIndex = 0;\n        message.groups = [];\n        message.epochDurationSec = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 active_group_index */ 1:\n                    message.activeGroupIndex = reader.uint32();\n                    break;\n                case /* uint32 epoch_index */ 2:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* repeated sysio.opp.attestations.BatchOperatorGroup groups */ 3:\n                    message.groups.push(BatchOperatorGroup.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* uint32 epoch_duration_sec */ 4:\n                    message.epochDurationSec = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 active_group_index = 1; */\n        if (message.activeGroupIndex !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.activeGroupIndex);\n        /* uint32 epoch_index = 2; */\n        if (message.epochIndex !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.epochIndex);\n        /* repeated sysio.opp.attestations.BatchOperatorGroup groups = 3; */\n        for (let i = 0; i < message.groups.length; i++)\n            BatchOperatorGroup.internalBinaryWrite(message.groups[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        /* uint32 epoch_duration_sec = 4; */\n        if (message.epochDurationSec !== 0)\n            writer.tag(4, WireType.Varint).uint32(message.epochDurationSec);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.BatchOperatorGroups\n */\nexport const BatchOperatorGroups = new BatchOperatorGroups$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass BatchOperatorGroup$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.BatchOperatorGroup\", [\n            { no: 1, name: \"operators\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ChainAddress }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.operators = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* repeated sysio.opp.types.ChainAddress operators */ 1:\n                    message.operators.push(ChainAddress.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* repeated sysio.opp.types.ChainAddress operators = 1; */\n        for (let i = 0; i < message.operators.length; i++)\n            ChainAddress.internalBinaryWrite(message.operators[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.BatchOperatorGroup\n */\nexport const BatchOperatorGroup = new BatchOperatorGroup$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DepositRevert$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.DepositRevert\", [\n            { no: 1, name: \"original_deposit_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 2, name: \"depositor\", kind: \"message\", T: () => ChainAddress },\n            { no: 3, name: \"refund_amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 4, name: \"reason\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.originalDepositMessageId = new Uint8Array(0);\n        message.reason = \"\";\n        message.chainCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* bytes original_deposit_message_id */ 1:\n                    message.originalDepositMessageId = reader.bytes();\n                    break;\n                case /* sysio.opp.types.ChainAddress depositor */ 2:\n                    message.depositor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.depositor);\n                    break;\n                case /* sysio.opp.types.TokenAmount refund_amount */ 3:\n                    message.refundAmount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.refundAmount);\n                    break;\n                case /* string reason */ 4:\n                    message.reason = reader.string();\n                    break;\n                case /* uint64 chain_code */ 5:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* bytes original_deposit_message_id = 1; */\n        if (message.originalDepositMessageId.length)\n            writer.tag(1, WireType.LengthDelimited).bytes(message.originalDepositMessageId);\n        /* sysio.opp.types.ChainAddress depositor = 2; */\n        if (message.depositor)\n            ChainAddress.internalBinaryWrite(message.depositor, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount refund_amount = 3; */\n        if (message.refundAmount)\n            TokenAmount.internalBinaryWrite(message.refundAmount, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        /* string reason = 4; */\n        if (message.reason !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.reason);\n        /* uint64 chain_code = 5; */\n        if (message.chainCode !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.chainCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.DepositRevert\n */\nexport const DepositRevert = new DepositRevert$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass NodeOwnerReg$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.NodeOwnerReg\", [\n            { no: 1, name: \"owner_address\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"token_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 3, name: \"nft_address\", kind: \"message\", T: () => ChainAddress }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.tokenId = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress owner_address */ 1:\n                    message.ownerAddress = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.ownerAddress);\n                    break;\n                case /* bytes token_id */ 2:\n                    message.tokenId = reader.bytes();\n                    break;\n                case /* sysio.opp.types.ChainAddress nft_address */ 3:\n                    message.nftAddress = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.nftAddress);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress owner_address = 1; */\n        if (message.ownerAddress)\n            ChainAddress.internalBinaryWrite(message.ownerAddress, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* bytes token_id = 2; */\n        if (message.tokenId.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.tokenId);\n        /* sysio.opp.types.ChainAddress nft_address = 3; */\n        if (message.nftAddress)\n            ChainAddress.internalBinaryWrite(message.nftAddress, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.NodeOwnerReg\n */\nexport const NodeOwnerReg = new NodeOwnerReg$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StakingReward$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.StakingReward\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"staker_wire_account\", kind: \"message\", T: () => WireAccount },\n            { no: 3, name: \"share_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 4, name: \"reward_epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 5, name: \"external_epoch_ref\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"reward_amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 7, name: \"staker_native_address\", kind: \"message\", T: () => ChainAddress }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.shareBps = 0;\n        message.rewardEpochIndex = 0;\n        message.externalEpochRef = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.WireAccount staker_wire_account */ 2:\n                    message.stakerWireAccount = WireAccount.internalBinaryRead(reader, reader.uint32(), options, message.stakerWireAccount);\n                    break;\n                case /* uint32 share_bps */ 3:\n                    message.shareBps = reader.uint32();\n                    break;\n                case /* uint32 reward_epoch_index */ 4:\n                    message.rewardEpochIndex = reader.uint32();\n                    break;\n                case /* uint64 external_epoch_ref */ 5:\n                    message.externalEpochRef = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.TokenAmount reward_amount */ 6:\n                    message.rewardAmount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.rewardAmount);\n                    break;\n                case /* sysio.opp.types.ChainAddress staker_native_address */ 7:\n                    message.stakerNativeAddress = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.stakerNativeAddress);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* sysio.opp.types.WireAccount staker_wire_account = 2; */\n        if (message.stakerWireAccount)\n            WireAccount.internalBinaryWrite(message.stakerWireAccount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* uint32 share_bps = 3; */\n        if (message.shareBps !== 0)\n            writer.tag(3, WireType.Varint).uint32(message.shareBps);\n        /* uint32 reward_epoch_index = 4; */\n        if (message.rewardEpochIndex !== 0)\n            writer.tag(4, WireType.Varint).uint32(message.rewardEpochIndex);\n        /* uint64 external_epoch_ref = 5; */\n        if (message.externalEpochRef !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.externalEpochRef);\n        /* sysio.opp.types.TokenAmount reward_amount = 6; */\n        if (message.rewardAmount)\n            TokenAmount.internalBinaryWrite(message.rewardAmount, writer.tag(6, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.ChainAddress staker_native_address = 7; */\n        if (message.stakerNativeAddress)\n            ChainAddress.internalBinaryWrite(message.stakerNativeAddress, writer.tag(7, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.StakingReward\n */\nexport const StakingReward = new StakingReward$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass StakeResult$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.StakeResult\", [\n            { no: 1, name: \"owner_address\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"amount\", kind: \"message\", T: () => TokenAmount },\n            { no: 3, name: \"success\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 4, name: \"error_reason\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.success = false;\n        message.errorReason = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress owner_address */ 1:\n                    message.ownerAddress = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.ownerAddress);\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 2:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                case /* bool success */ 3:\n                    message.success = reader.bool();\n                    break;\n                case /* string error_reason */ 4:\n                    message.errorReason = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress owner_address = 1; */\n        if (message.ownerAddress)\n            ChainAddress.internalBinaryWrite(message.ownerAddress, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.TokenAmount amount = 2; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* bool success = 3; */\n        if (message.success !== false)\n            writer.tag(3, WireType.Varint).bool(message.success);\n        /* string error_reason = 4; */\n        if (message.errorReason !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.errorReason);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.StakeResult\n */\nexport const StakeResult = new StakeResult$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass AttestationProcessingError$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.AttestationProcessingError\", [\n            { no: 1, name: \"attestation_id\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"original_type\", kind: \"enum\", T: () => [\"sysio.opp.types.AttestationType\", AttestationType, \"ATTESTATION_TYPE_\"] },\n            { no: 3, name: \"original_data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 4, name: \"error_message\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.attestationId = 0n;\n        message.originalType = 0;\n        message.originalData = new Uint8Array(0);\n        message.errorMessage = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 attestation_id */ 1:\n                    message.attestationId = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.AttestationType original_type */ 2:\n                    message.originalType = reader.int32();\n                    break;\n                case /* bytes original_data */ 3:\n                    message.originalData = reader.bytes();\n                    break;\n                case /* string error_message */ 4:\n                    message.errorMessage = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 attestation_id = 1; */\n        if (message.attestationId !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.attestationId);\n        /* sysio.opp.types.AttestationType original_type = 2; */\n        if (message.originalType !== 0)\n            writer.tag(2, WireType.Varint).int32(message.originalType);\n        /* bytes original_data = 3; */\n        if (message.originalData.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.originalData);\n        /* string error_message = 4; */\n        if (message.errorMessage !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.errorMessage);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.AttestationProcessingError\n */\nexport const AttestationProcessingError = new AttestationProcessingError$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveCreate$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveCreate\", [\n            { no: 4, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 7, name: \"requested_wire_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"connector_weight_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 9, name: \"creator_addr\", kind: \"message\", T: () => ChainAddress },\n            { no: 10, name: \"is_private\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 11, name: \"creator_pub_key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 12, name: \"external_amount\", kind: \"message\", T: () => ReserveAmount },\n            { no: 13, name: \"source_token_precision\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.name = \"\";\n        message.description = \"\";\n        message.requestedWireAmount = 0n;\n        message.connectorWeightBps = 0;\n        message.isPrivate = false;\n        message.creatorPubKey = new Uint8Array(0);\n        message.sourceTokenPrecision = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string name */ 4:\n                    message.name = reader.string();\n                    break;\n                case /* string description */ 5:\n                    message.description = reader.string();\n                    break;\n                case /* uint64 requested_wire_amount */ 7:\n                    message.requestedWireAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 connector_weight_bps */ 8:\n                    message.connectorWeightBps = reader.uint32();\n                    break;\n                case /* sysio.opp.types.ChainAddress creator_addr */ 9:\n                    message.creatorAddr = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.creatorAddr);\n                    break;\n                case /* bool is_private */ 10:\n                    message.isPrivate = reader.bool();\n                    break;\n                case /* bytes creator_pub_key */ 11:\n                    message.creatorPubKey = reader.bytes();\n                    break;\n                case /* sysio.opp.types.ReserveAmount external_amount */ 12:\n                    message.externalAmount = ReserveAmount.internalBinaryRead(reader, reader.uint32(), options, message.externalAmount);\n                    break;\n                case /* uint32 source_token_precision */ 13:\n                    message.sourceTokenPrecision = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string name = 4; */\n        if (message.name !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.name);\n        /* string description = 5; */\n        if (message.description !== \"\")\n            writer.tag(5, WireType.LengthDelimited).string(message.description);\n        /* uint64 requested_wire_amount = 7; */\n        if (message.requestedWireAmount !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.requestedWireAmount);\n        /* uint32 connector_weight_bps = 8; */\n        if (message.connectorWeightBps !== 0)\n            writer.tag(8, WireType.Varint).uint32(message.connectorWeightBps);\n        /* sysio.opp.types.ChainAddress creator_addr = 9; */\n        if (message.creatorAddr)\n            ChainAddress.internalBinaryWrite(message.creatorAddr, writer.tag(9, WireType.LengthDelimited).fork(), options).join();\n        /* bool is_private = 10; */\n        if (message.isPrivate !== false)\n            writer.tag(10, WireType.Varint).bool(message.isPrivate);\n        /* bytes creator_pub_key = 11; */\n        if (message.creatorPubKey.length)\n            writer.tag(11, WireType.LengthDelimited).bytes(message.creatorPubKey);\n        /* sysio.opp.types.ReserveAmount external_amount = 12; */\n        if (message.externalAmount)\n            ReserveAmount.internalBinaryWrite(message.externalAmount, writer.tag(12, WireType.LengthDelimited).fork(), options).join();\n        /* uint32 source_token_precision = 13; */\n        if (message.sourceTokenPrecision !== 0)\n            writer.tag(13, WireType.Varint).uint32(message.sourceTokenPrecision);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveCreate\n */\nexport const ReserveCreate = new ReserveCreate$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveCreateCancel$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveCreateCancel\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"creator_addr\", kind: \"message\", T: () => ChainAddress }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.tokenCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_code */ 2:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 3:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.ChainAddress creator_addr */ 4:\n                    message.creatorAddr = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.creatorAddr);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 token_code = 2; */\n        if (message.tokenCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.tokenCode);\n        /* uint64 reserve_code = 3; */\n        if (message.reserveCode !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.reserveCode);\n        /* sysio.opp.types.ChainAddress creator_addr = 4; */\n        if (message.creatorAddr)\n            ChainAddress.internalBinaryWrite(message.creatorAddr, writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveCreateCancel\n */\nexport const ReserveCreateCancel = new ReserveCreateCancel$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveCreateCancelled$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveCreateCancelled\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.tokenCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_code */ 2:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 3:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 token_code = 2; */\n        if (message.tokenCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.tokenCode);\n        /* uint64 reserve_code = 3; */\n        if (message.reserveCode !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.reserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveCreateCancelled\n */\nexport const ReserveCreateCancelled = new ReserveCreateCancelled$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveReady$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.ReserveReady\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.tokenCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_code */ 2:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 3:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 token_code = 2; */\n        if (message.tokenCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.tokenCode);\n        /* uint64 reserve_code = 3; */\n        if (message.reserveCode !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.reserveCode);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.ReserveReady\n */\nexport const ReserveReady = new ReserveReady$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass EmissionsBlocked$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.attestations.EmissionsBlocked\", [\n            { no: 1, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"reason\", kind: \"enum\", T: () => [\"sysio.opp.types.EmissionsBlockReason\", EmissionsBlockReason, \"EMISSIONS_BLOCK_REASON_\"] },\n            { no: 3, name: \"attempted_emission\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"treasury_remaining\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 5, name: \"sysio_balance\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"first_blocked_at\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.epochIndex = 0;\n        message.reason = 0;\n        message.attemptedEmission = 0n;\n        message.treasuryRemaining = 0n;\n        message.sysioBalance = 0n;\n        message.firstBlockedAt = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 epoch_index */ 1:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* sysio.opp.types.EmissionsBlockReason reason */ 2:\n                    message.reason = reader.int32();\n                    break;\n                case /* int64 attempted_emission */ 3:\n                    message.attemptedEmission = reader.int64().toBigInt();\n                    break;\n                case /* int64 treasury_remaining */ 4:\n                    message.treasuryRemaining = reader.int64().toBigInt();\n                    break;\n                case /* int64 sysio_balance */ 5:\n                    message.sysioBalance = reader.int64().toBigInt();\n                    break;\n                case /* uint32 first_blocked_at */ 6:\n                    message.firstBlockedAt = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 epoch_index = 1; */\n        if (message.epochIndex !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.epochIndex);\n        /* sysio.opp.types.EmissionsBlockReason reason = 2; */\n        if (message.reason !== 0)\n            writer.tag(2, WireType.Varint).int32(message.reason);\n        /* int64 attempted_emission = 3; */\n        if (message.attemptedEmission !== 0n)\n            writer.tag(3, WireType.Varint).int64(message.attemptedEmission);\n        /* int64 treasury_remaining = 4; */\n        if (message.treasuryRemaining !== 0n)\n            writer.tag(4, WireType.Varint).int64(message.treasuryRemaining);\n        /* int64 sysio_balance = 5; */\n        if (message.sysioBalance !== 0n)\n            writer.tag(5, WireType.Varint).int64(message.sysioBalance);\n        /* uint32 first_blocked_at = 6; */\n        if (message.firstBlockedAt !== 0)\n            writer.tag(6, WireType.Varint).uint32(message.firstBlockedAt);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.attestations.EmissionsBlocked\n */\nexport const EmissionsBlocked = new EmissionsBlocked$Type();\n//# sourceMappingURL=attestations.js.map", "import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// ---------------------------------------------------------------------------\n//  Chain identifier \u2014 VM family enum (post data-model refactor)\n// \n//  Per-chain INSTANCES (e.g. ETHEREUM-MAINNET vs POLYGON vs ARBITRUM) are\n//  distinguished by `Chain.code` (slug_name / uint64) + `Chain.external_chain_id`.\n//  This enum identifies only the VM family.\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.ChainKind\n */\nexport var ChainKind;\n(function (ChainKind) {\n    /**\n     * @generated from protobuf enum value: CHAIN_KIND_UNKNOWN = 0;\n     */\n    ChainKind[ChainKind[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * The WIRE depot itself (singleton; Chain.code = \"WIRE\")\n     *\n     * @generated from protobuf enum value: CHAIN_KIND_WIRE = 1;\n     */\n    ChainKind[ChainKind[\"WIRE\"] = 1] = \"WIRE\";\n    /**\n     * All EVM-compatible chains (Ethereum, Polygon, BSC, Arbitrum, Optimism, Base, \u2026)\n     *\n     * @generated from protobuf enum value: CHAIN_KIND_EVM = 2;\n     */\n    ChainKind[ChainKind[\"EVM\"] = 2] = \"EVM\";\n    /**\n     * Solana Virtual Machine chains (Solana mainnet, Eclipse, \u2026)\n     *\n     * @generated from protobuf enum value: CHAIN_KIND_SVM = 3;\n     */\n    ChainKind[ChainKind[\"SVM\"] = 3] = \"SVM\";\n})(ChainKind || (ChainKind = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.ChainKeyType\n */\nexport var ChainKeyType;\n(function (ChainKeyType) {\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_UNKNOWN = 0;\n     */\n    ChainKeyType[ChainKeyType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_WIRE = 1;\n     */\n    ChainKeyType[ChainKeyType[\"WIRE\"] = 1] = \"WIRE\";\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_WIRE_BLS = 2;\n     */\n    ChainKeyType[ChainKeyType[\"WIRE_BLS\"] = 2] = \"WIRE_BLS\";\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_ETHEREUM = 3;\n     */\n    ChainKeyType[ChainKeyType[\"ETHEREUM\"] = 3] = \"ETHEREUM\";\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_SOLANA = 4;\n     */\n    ChainKeyType[ChainKeyType[\"SOLANA\"] = 4] = \"SOLANA\";\n    /**\n     * @generated from protobuf enum value: CHAIN_KEY_TYPE_SUI = 5;\n     */\n    ChainKeyType[ChainKeyType[\"SUI\"] = 5] = \"SUI\";\n})(ChainKeyType || (ChainKeyType = {}));\n/**\n * Wire public_key variant type. Identifies which `sysio::public_key` alternative the `WireKey.key`\n * raw bytes decode to. The bytes carry NO leading variant-index byte -- this enum is the type\n * discriminant instead. Values are (variant index + 1), leaving 0 for UNKNOWN per the proto3\n * convention used throughout this file. Distinct from `ChainKeyType`, which is keyed on chain family\n * (WIRE/ETHEREUM/SOLANA/...) and cannot express R1 or WebAuthn.\n *\n * @generated from protobuf enum sysio.opp.types.WireKeyType\n */\nexport var WireKeyType;\n(function (WireKeyType) {\n    /**\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_UNKNOWN = 0;\n     */\n    WireKeyType[WireKeyType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * secp256k1            (sysio::public_key variant index 0)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_K1 = 1;\n     */\n    WireKeyType[WireKeyType[\"K1\"] = 1] = \"K1\";\n    /**\n     * secp256r1 / P-256    (1)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_R1 = 2;\n     */\n    WireKeyType[WireKeyType[\"R1\"] = 2] = \"R1\";\n    /**\n     * WebAuthn             (2)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_WA = 3;\n     */\n    WireKeyType[WireKeyType[\"WA\"] = 3] = \"WA\";\n    /**\n     * Ethereum secp256k1   (3)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_EM = 4;\n     */\n    WireKeyType[WireKeyType[\"EM\"] = 4] = \"EM\";\n    /**\n     * ed25519              (4)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_ED = 5;\n     */\n    WireKeyType[WireKeyType[\"ED\"] = 5] = \"ED\";\n    /**\n     * BLS12-381            (5)\n     *\n     * @generated from protobuf enum value: WIRE_KEY_TYPE_BLS = 6;\n     */\n    WireKeyType[WireKeyType[\"BLS\"] = 6] = \"BLS\";\n})(WireKeyType || (WireKeyType = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.UnderwriteRequestStatus\n */\nexport var UnderwriteRequestStatus;\n(function (UnderwriteRequestStatus) {\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_REQUEST_STATUS_PENDING = 0;\n     */\n    UnderwriteRequestStatus[UnderwriteRequestStatus[\"PENDING\"] = 0] = \"PENDING\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_REQUEST_STATUS_CONFIRMED = 1;\n     */\n    UnderwriteRequestStatus[UnderwriteRequestStatus[\"CONFIRMED\"] = 1] = \"CONFIRMED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_REQUEST_STATUS_REJECTED = 2;\n     */\n    UnderwriteRequestStatus[UnderwriteRequestStatus[\"REJECTED\"] = 2] = \"REJECTED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_REQUEST_STATUS_COMPLETED = 3;\n     */\n    UnderwriteRequestStatus[UnderwriteRequestStatus[\"COMPLETED\"] = 3] = \"COMPLETED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_REQUEST_STATUS_EXPIRED = 4;\n     */\n    UnderwriteRequestStatus[UnderwriteRequestStatus[\"EXPIRED\"] = 4] = \"EXPIRED\";\n})(UnderwriteRequestStatus || (UnderwriteRequestStatus = {}));\n// ---------------------------------------------------------------------------\n//  Token standards\n// \n//  Per-token identity (ETH, USDC, POLY, LIQETH, \u2026) is data, NOT enum values.\n//  This enum carries only the TOKEN STANDARD; individual tokens get a\n//  `Token` registry row keyed by `Token.code` (slug_name / uint64).\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.TokenKind\n */\nexport var TokenKind;\n(function (TokenKind) {\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_UNKNOWN = 0;\n     */\n    TokenKind[TokenKind[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * chain-native asset (ETH on EVM, SOL on SVM, WIRE on WIRE)\n     *\n     * @generated from protobuf enum value: TOKEN_KIND_NATIVE = 1;\n     */\n    TokenKind[TokenKind[\"NATIVE\"] = 1] = \"NATIVE\";\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_ERC20 = 2;\n     */\n    TokenKind[TokenKind[\"ERC20\"] = 2] = \"ERC20\";\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_ERC721 = 3;\n     */\n    TokenKind[TokenKind[\"ERC721\"] = 3] = \"ERC721\";\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_ERC1155 = 4;\n     */\n    TokenKind[TokenKind[\"ERC1155\"] = 4] = \"ERC1155\";\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_SPL = 5;\n     */\n    TokenKind[TokenKind[\"SPL\"] = 5] = \"SPL\";\n    /**\n     * @generated from protobuf enum value: TOKEN_KIND_SPL_NFT = 6;\n     */\n    TokenKind[TokenKind[\"SPL_NFT\"] = 6] = \"SPL_NFT\";\n    /**\n     * liquid-staking receipt (liqEth / liqSol / future liqX)\n     *\n     * @generated from protobuf enum value: TOKEN_KIND_LIQ = 7;\n     */\n    TokenKind[TokenKind[\"LIQ\"] = 7] = \"LIQ\";\n})(TokenKind || (TokenKind = {}));\n// ---------------------------------------------------------------------------\n//  Reserve lifecycle\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.ReserveStatus\n */\nexport var ReserveStatus;\n(function (ReserveStatus) {\n    /**\n     * @generated from protobuf enum value: RESERVE_STATUS_UNKNOWN = 0;\n     */\n    ReserveStatus[ReserveStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * created on outpost; awaiting depot-side match\n     *\n     * @generated from protobuf enum value: RESERVE_STATUS_PENDING = 1;\n     */\n    ReserveStatus[ReserveStatus[\"PENDING\"] = 1] = \"PENDING\";\n    /**\n     * matched / bootstrap-seeded; usable for swaps\n     *\n     * @generated from protobuf enum value: RESERVE_STATUS_ACTIVE = 2;\n     */\n    ReserveStatus[ReserveStatus[\"ACTIVE\"] = 2] = \"ACTIVE\";\n    /**\n     * creator cancelled before match landed\n     *\n     * @generated from protobuf enum value: RESERVE_STATUS_CANCELLED = 3;\n     */\n    ReserveStatus[ReserveStatus[\"CANCELLED\"] = 3] = \"CANCELLED\";\n})(ReserveStatus || (ReserveStatus = {}));\n// ---------------------------------------------------------------------------\n//  Attestation discriminant\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.AttestationType\n */\nexport var AttestationType;\n(function (AttestationType) {\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_UNSPECIFIED = 0;\n     */\n    AttestationType[AttestationType[\"UNSPECIFIED\"] = 0] = \"UNSPECIFIED\";\n    /**\n     * 0x07D1\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_OPERATOR_ACTION = 2001;\n     */\n    AttestationType[AttestationType[\"OPERATOR_ACTION\"] = 2001] = \"OPERATOR_ACTION\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_STAKE = 3001;\n     */\n    AttestationType[AttestationType[\"STAKE\"] = 3001] = \"STAKE\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_UNSTAKE = 3002;\n     */\n    AttestationType[AttestationType[\"UNSTAKE\"] = 3002] = \"UNSTAKE\";\n    /**\n     * DEPRECATED \u2014 pre-launch only, do not use in new code.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_PRETOKEN_PURCHASE = 3004;\n     */\n    AttestationType[AttestationType[\"PRETOKEN_PURCHASE\"] = 3004] = \"PRETOKEN_PURCHASE\";\n    /**\n     * DEPRECATED \u2014 pre-launch only, do not use in new code.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_PRETOKEN_YIELD = 3006;\n     */\n    AttestationType[AttestationType[\"PRETOKEN_YIELD\"] = 3006] = \"PRETOKEN_YIELD\";\n    /**\n     * 0xAA00\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_RESERVE_BALANCE_SHEET = 43520;\n     */\n    AttestationType[AttestationType[\"RESERVE_BALANCE_SHEET\"] = 43520] = \"RESERVE_BALANCE_SHEET\";\n    /**\n     * 0xEE00\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_STAKE_UPDATE = 60928;\n     */\n    AttestationType[AttestationType[\"STAKE_UPDATE\"] = 60928] = \"STAKE_UPDATE\";\n    /**\n     * 60929 (0xEE01) was ATTESTATION_TYPE_NATIVE_YIELD_REWARD \u2014 removed; do not reuse.\n     * DEPRECATED \u2014 pre-launch only, do not use in new code.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_WIRE_TOKEN_PURCHASE = 60930;\n     */\n    AttestationType[AttestationType[\"WIRE_TOKEN_PURCHASE\"] = 60930] = \"WIRE_TOKEN_PURCHASE\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_CHALLENGE_RESPONSE = 60932;\n     */\n    AttestationType[AttestationType[\"CHALLENGE_RESPONSE\"] = 60932] = \"CHALLENGE_RESPONSE\";\n    /**\n     * 60933 was standalone SLASH_OPERATOR \u2014 removed; SLASH is now an OperatorAction sub-type.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_SWAP_REQUEST = 60934;\n     */\n    AttestationType[AttestationType[\"SWAP_REQUEST\"] = 60934] = \"SWAP_REQUEST\";\n    /**\n     * 60935 was ATTESTATION_TYPE_UNDERWRITE_INTENT \u2014 removed; do not reuse.\n     * 60936 was ATTESTATION_TYPE_UNDERWRITE_CONFIRM \u2014 removed; do not reuse.\n     * 60937 was ATTESTATION_TYPE_UNDERWRITE_REJECT \u2014 removed; do not reuse.\n     * 60938 was ATTESTATION_TYPE_UNDERWRITE_UNLOCK \u2014 removed; do not reuse.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_SWAP_REMIT = 60944;\n     */\n    AttestationType[AttestationType[\"SWAP_REMIT\"] = 60944] = \"SWAP_REMIT\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_CHALLENGE_REQUEST = 60945;\n     */\n    AttestationType[AttestationType[\"CHALLENGE_REQUEST\"] = 60945] = \"CHALLENGE_REQUEST\";\n    /**\n     * 60946 was ATTESTATION_TYPE_EPOCH_SYNC \u2014 removed; do not reuse.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_OPERATORS = 60947;\n     */\n    AttestationType[AttestationType[\"OPERATORS\"] = 60947] = \"OPERATORS\";\n    /**\n     * 60948 was ATTESTATION_TYPE_REMIT_CONFIRM \u2014 removed; do not reuse.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_BATCH_OPERATOR_GROUPS = 60943;\n     */\n    AttestationType[AttestationType[\"BATCH_OPERATOR_GROUPS\"] = 60943] = \"BATCH_OPERATOR_GROUPS\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_NODE_OWNER_REG = 60949;\n     */\n    AttestationType[AttestationType[\"NODE_OWNER_REG\"] = 60949] = \"NODE_OWNER_REG\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_STAKING_REWARD = 60950;\n     */\n    AttestationType[AttestationType[\"STAKING_REWARD\"] = 60950] = \"STAKING_REWARD\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_STAKE_RESULT = 60951;\n     */\n    AttestationType[AttestationType[\"STAKE_RESULT\"] = 60951] = \"STAKE_RESULT\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_ATTESTATION_PROCESSING_ERROR = 60952;\n     */\n    AttestationType[AttestationType[\"ATTESTATION_PROCESSING_ERROR\"] = 60952] = \"ATTESTATION_PROCESSING_ERROR\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_TYPE_UNDERWRITE_INTENT_COMMIT = 60953;\n     */\n    AttestationType[AttestationType[\"UNDERWRITE_INTENT_COMMIT\"] = 60953] = \"UNDERWRITE_INTENT_COMMIT\";\n    /**\n     * 60954 was ATTESTATION_TYPE_UNDERWRITE_INTENT_REJECT \u2014 removed; do not reuse.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_SWAP_REVERT = 60955;\n     */\n    AttestationType[AttestationType[\"SWAP_REVERT\"] = 60955] = \"SWAP_REVERT\";\n    /**\n     * 60957 was ATTESTATION_TYPE_SWAP_REJECTED \u2014 removed; do not reuse. Every REMIT is\n     * depot-initiated against a verified reserve ledger, so the destination outpost can\n     * always pay; there is no post-underwriting rejection path.\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_DEPOSIT_REVERT = 60956;\n     */\n    AttestationType[AttestationType[\"DEPOSIT_REVERT\"] = 60956] = \"DEPOSIT_REVERT\";\n    /**\n     * ---------------------------------------------------------------------------\n     *  Reserve-flow attestations (v6 data-model refactor, 2026-05-19)\n     *  Outpost-initiated reserve creation with depot-side matching handshake.\n     * ---------------------------------------------------------------------------\n     *\n     * 0xEE1E  outpost \u2192 depot\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_RESERVE_CREATE = 60958;\n     */\n    AttestationType[AttestationType[\"RESERVE_CREATE\"] = 60958] = \"RESERVE_CREATE\";\n    /**\n     * 0xEE1F  outpost \u2192 depot\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_RESERVE_CREATE_CANCEL = 60959;\n     */\n    AttestationType[AttestationType[\"RESERVE_CREATE_CANCEL\"] = 60959] = \"RESERVE_CREATE_CANCEL\";\n    /**\n     * 0xEE20  depot   \u2192 outpost\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_RESERVE_CREATE_CANCELLED = 60960;\n     */\n    AttestationType[AttestationType[\"RESERVE_CREATE_CANCELLED\"] = 60960] = \"RESERVE_CREATE_CANCELLED\";\n    /**\n     * 0xEE21  depot   \u2192 outpost\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_RESERVE_READY = 60961;\n     */\n    AttestationType[AttestationType[\"RESERVE_READY\"] = 60961] = \"RESERVE_READY\";\n    /**\n     * 0xEE22\n     *\n     * @generated from protobuf enum value: ATTESTATION_TYPE_EMISSIONS_BLOCKED = 60962;\n     */\n    AttestationType[AttestationType[\"EMISSIONS_BLOCKED\"] = 60962] = \"EMISSIONS_BLOCKED\";\n})(AttestationType || (AttestationType = {}));\n/**\n * Reason codes for ATTESTATION_TYPE_EMISSIONS_BLOCKED. Emitted by\n * sysio.epoch::advance when its emissions readiness gate cannot pay\n * the next epoch.\n *\n * @generated from protobuf enum sysio.opp.types.EmissionsBlockReason\n */\nexport var EmissionsBlockReason;\n(function (EmissionsBlockReason) {\n    /**\n     * @generated from protobuf enum value: EMISSIONS_BLOCK_REASON_UNSPECIFIED = 0;\n     */\n    EmissionsBlockReason[EmissionsBlockReason[\"UNSPECIFIED\"] = 0] = \"UNSPECIFIED\";\n    /**\n     * sysio.system::setemitcfg not called\n     *\n     * @generated from protobuf enum value: EMISSIONS_BLOCK_REASON_CONFIG_MISSING = 1;\n     */\n    EmissionsBlockReason[EmissionsBlockReason[\"CONFIG_MISSING\"] = 1] = \"CONFIG_MISSING\";\n    /**\n     * sysio.system::initt5 not called\n     *\n     * @generated from protobuf enum value: EMISSIONS_BLOCK_REASON_STATE_UNINITIALIZED = 2;\n     */\n    EmissionsBlockReason[EmissionsBlockReason[\"STATE_UNINITIALIZED\"] = 2] = \"STATE_UNINITIALIZED\";\n    /**\n     * t5_distributable - t5_floor - total_distributed <= 0\n     *\n     * @generated from protobuf enum value: EMISSIONS_BLOCK_REASON_TREASURY_EXHAUSTED = 3;\n     */\n    EmissionsBlockReason[EmissionsBlockReason[\"TREASURY_EXHAUSTED\"] = 3] = \"TREASURY_EXHAUSTED\";\n    /**\n     * sysio's WIRE balance < computed emission\n     *\n     * @generated from protobuf enum value: EMISSIONS_BLOCK_REASON_BALANCE_INSUFFICIENT = 4;\n     */\n    EmissionsBlockReason[EmissionsBlockReason[\"BALANCE_INSUFFICIENT\"] = 4] = \"BALANCE_INSUFFICIENT\";\n})(EmissionsBlockReason || (EmissionsBlockReason = {}));\n// ---------------------------------------------------------------------------\n//  Staker / Operator lifecycle\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.StakeStatus\n */\nexport var StakeStatus;\n(function (StakeStatus) {\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_UNKNOWN = 0;\n     */\n    StakeStatus[StakeStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_WARMUP = 1;\n     */\n    StakeStatus[StakeStatus[\"WARMUP\"] = 1] = \"WARMUP\";\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_COOLDOWN = 2;\n     */\n    StakeStatus[StakeStatus[\"COOLDOWN\"] = 2] = \"COOLDOWN\";\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_ACTIVE = 3;\n     */\n    StakeStatus[StakeStatus[\"ACTIVE\"] = 3] = \"ACTIVE\";\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_TERMINATED = 240;\n     */\n    StakeStatus[StakeStatus[\"TERMINATED\"] = 240] = \"TERMINATED\";\n    /**\n     * @generated from protobuf enum value: STAKE_STATUS_SLASHED = 241;\n     */\n    StakeStatus[StakeStatus[\"SLASHED\"] = 241] = \"SLASHED\";\n})(StakeStatus || (StakeStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.OperatorType\n */\nexport var OperatorType;\n(function (OperatorType) {\n    /**\n     * @generated from protobuf enum value: OPERATOR_TYPE_UNKNOWN = 0;\n     */\n    OperatorType[OperatorType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_TYPE_PRODUCER = 1;\n     */\n    OperatorType[OperatorType[\"PRODUCER\"] = 1] = \"PRODUCER\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_TYPE_BATCH = 2;\n     */\n    OperatorType[OperatorType[\"BATCH\"] = 2] = \"BATCH\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_TYPE_UNDERWRITER = 3;\n     */\n    OperatorType[OperatorType[\"UNDERWRITER\"] = 3] = \"UNDERWRITER\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_TYPE_CHALLENGER = 4;\n     */\n    OperatorType[OperatorType[\"CHALLENGER\"] = 4] = \"CHALLENGER\";\n})(OperatorType || (OperatorType = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.OperatorStatus\n */\nexport var OperatorStatus;\n(function (OperatorStatus) {\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_UNKNOWN = 0;\n     */\n    OperatorStatus[OperatorStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_WARMUP = 1;\n     */\n    OperatorStatus[OperatorStatus[\"WARMUP\"] = 1] = \"WARMUP\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_COOLDOWN = 2;\n     */\n    OperatorStatus[OperatorStatus[\"COOLDOWN\"] = 2] = \"COOLDOWN\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_ACTIVE = 3;\n     */\n    OperatorStatus[OperatorStatus[\"ACTIVE\"] = 3] = \"ACTIVE\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_TERMINATED = 240;\n     */\n    OperatorStatus[OperatorStatus[\"TERMINATED\"] = 240] = \"TERMINATED\";\n    /**\n     * @generated from protobuf enum value: OPERATOR_STATUS_SLASHED = 241;\n     */\n    OperatorStatus[OperatorStatus[\"SLASHED\"] = 241] = \"SLASHED\";\n})(OperatorStatus || (OperatorStatus = {}));\n// ---------------------------------------------------------------------------\n//  Depot contract state enums\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.types.ChainRequestStatus\n */\nexport var ChainRequestStatus;\n(function (ChainRequestStatus) {\n    /**\n     * @generated from protobuf enum value: CHAIN_REQUEST_STATUS_PENDING = 0;\n     */\n    ChainRequestStatus[ChainRequestStatus[\"PENDING\"] = 0] = \"PENDING\";\n    /**\n     * @generated from protobuf enum value: CHAIN_REQUEST_STATUS_COLLECTING = 1;\n     */\n    ChainRequestStatus[ChainRequestStatus[\"COLLECTING\"] = 1] = \"COLLECTING\";\n    /**\n     * @generated from protobuf enum value: CHAIN_REQUEST_STATUS_CONSENSUS_OK = 2;\n     */\n    ChainRequestStatus[ChainRequestStatus[\"CONSENSUS_OK\"] = 2] = \"CONSENSUS_OK\";\n    /**\n     * @generated from protobuf enum value: CHAIN_REQUEST_STATUS_CONSENSUS_FAIL = 3;\n     */\n    ChainRequestStatus[ChainRequestStatus[\"CONSENSUS_FAIL\"] = 3] = \"CONSENSUS_FAIL\";\n    /**\n     * @generated from protobuf enum value: CHAIN_REQUEST_STATUS_CHALLENGED = 4;\n     */\n    ChainRequestStatus[ChainRequestStatus[\"CHALLENGED\"] = 4] = \"CHALLENGED\";\n})(ChainRequestStatus || (ChainRequestStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.MessageDirection\n */\nexport var MessageDirection;\n(function (MessageDirection) {\n    /**\n     * @generated from protobuf enum value: MESSAGE_DIRECTION_INBOUND = 0;\n     */\n    MessageDirection[MessageDirection[\"INBOUND\"] = 0] = \"INBOUND\";\n    /**\n     * @generated from protobuf enum value: MESSAGE_DIRECTION_OUTBOUND = 1;\n     */\n    MessageDirection[MessageDirection[\"OUTBOUND\"] = 1] = \"OUTBOUND\";\n})(MessageDirection || (MessageDirection = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.MessageStatus\n */\nexport var MessageStatus;\n(function (MessageStatus) {\n    /**\n     * @generated from protobuf enum value: MESSAGE_STATUS_PENDING = 0;\n     */\n    MessageStatus[MessageStatus[\"PENDING\"] = 0] = \"PENDING\";\n    /**\n     * @generated from protobuf enum value: MESSAGE_STATUS_READY = 1;\n     */\n    MessageStatus[MessageStatus[\"READY\"] = 1] = \"READY\";\n    /**\n     * @generated from protobuf enum value: MESSAGE_STATUS_PROCESSED = 2;\n     */\n    MessageStatus[MessageStatus[\"PROCESSED\"] = 2] = \"PROCESSED\";\n    /**\n     * @generated from protobuf enum value: MESSAGE_STATUS_CANCELLED = 3;\n     */\n    MessageStatus[MessageStatus[\"CANCELLED\"] = 3] = \"CANCELLED\";\n})(MessageStatus || (MessageStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.EnvelopeStatus\n */\nexport var EnvelopeStatus;\n(function (EnvelopeStatus) {\n    /**\n     * @generated from protobuf enum value: ENVELOPE_STATUS_PENDING_DELIVERY = 0;\n     */\n    EnvelopeStatus[EnvelopeStatus[\"PENDING_DELIVERY\"] = 0] = \"PENDING_DELIVERY\";\n    /**\n     * @generated from protobuf enum value: ENVELOPE_STATUS_DELIVERED = 1;\n     */\n    EnvelopeStatus[EnvelopeStatus[\"DELIVERED\"] = 1] = \"DELIVERED\";\n    /**\n     * @generated from protobuf enum value: ENVELOPE_STATUS_CONFIRMED = 2;\n     */\n    EnvelopeStatus[EnvelopeStatus[\"CONFIRMED\"] = 2] = \"CONFIRMED\";\n})(EnvelopeStatus || (EnvelopeStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.AttestationStatus\n */\nexport var AttestationStatus;\n(function (AttestationStatus) {\n    /**\n     * @generated from protobuf enum value: ATTESTATION_STATUS_PENDING = 0;\n     */\n    AttestationStatus[AttestationStatus[\"PENDING\"] = 0] = \"PENDING\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_STATUS_READY = 1;\n     */\n    AttestationStatus[AttestationStatus[\"READY\"] = 1] = \"READY\";\n    /**\n     * @generated from protobuf enum value: ATTESTATION_STATUS_PROCESSED = 2;\n     */\n    AttestationStatus[AttestationStatus[\"PROCESSED\"] = 2] = \"PROCESSED\";\n})(AttestationStatus || (AttestationStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.UnderwriteStatus\n */\nexport var UnderwriteStatus;\n(function (UnderwriteStatus) {\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_INTENT_CREATED = 0;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"INTENT_CREATED\"] = 0] = \"INTENT_CREATED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_INTENT_SUBMITTED = 1;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"INTENT_SUBMITTED\"] = 1] = \"INTENT_SUBMITTED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_INTENT_CONFIRMED = 2;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"INTENT_CONFIRMED\"] = 2] = \"INTENT_CONFIRMED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_READY = 3;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"READY\"] = 3] = \"READY\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_RELEASED = 5;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"RELEASED\"] = 5] = \"RELEASED\";\n    /**\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_SLASHED = 10;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"SLASHED\"] = 10] = \"SLASHED\";\n    /**\n     * Candidate-specific, pre-settlement invalidity in the underwriter race (bad\n     * UIC signature, insufficient bond, missing destination authex link). The\n     * candidate is removed from contention but NO collateral was slashed \u2014 kept\n     * distinct from SLASHED (economic punishment) and RELEASED (clean race\n     * loser) so indexing/audits do not conflate them.\n     *\n     * @generated from protobuf enum value: UNDERWRITE_STATUS_DISQUALIFIED = 11;\n     */\n    UnderwriteStatus[UnderwriteStatus[\"DISQUALIFIED\"] = 11] = \"DISQUALIFIED\";\n})(UnderwriteStatus || (UnderwriteStatus = {}));\n/**\n * @generated from protobuf enum sysio.opp.types.ChallengeStatus\n */\nexport var ChallengeStatus;\n(function (ChallengeStatus) {\n    /**\n     * @generated from protobuf enum value: CHALLENGE_STATUS_CHALLENGE_SENT = 0;\n     */\n    ChallengeStatus[ChallengeStatus[\"CHALLENGE_SENT\"] = 0] = \"CHALLENGE_SENT\";\n    /**\n     * @generated from protobuf enum value: CHALLENGE_STATUS_RESPONSE_RECEIVED = 1;\n     */\n    ChallengeStatus[ChallengeStatus[\"RESPONSE_RECEIVED\"] = 1] = \"RESPONSE_RECEIVED\";\n    /**\n     * @generated from protobuf enum value: CHALLENGE_STATUS_RESOLVED = 2;\n     */\n    ChallengeStatus[ChallengeStatus[\"RESOLVED\"] = 2] = \"RESOLVED\";\n    /**\n     * @generated from protobuf enum value: CHALLENGE_STATUS_ESCALATED = 3;\n     */\n    ChallengeStatus[ChallengeStatus[\"ESCALATED\"] = 3] = \"ESCALATED\";\n})(ChallengeStatus || (ChallengeStatus = {}));\n/**\n * Node-owner registration tier (sysio.roa::nodeownreg). Mirrors the MockWireNodes NodeInfo tier and\n * the on-chain `check(tier >= 1 && tier <= 3)` range -- T1/T2/T3 are the only valid registration tiers.\n *\n * @generated from protobuf enum sysio.opp.types.NodeOwnerTier\n */\nexport var NodeOwnerTier;\n(function (NodeOwnerTier) {\n    /**\n     * @generated from protobuf enum value: NODE_OWNER_TIER_UNKNOWN = 0;\n     */\n    NodeOwnerTier[NodeOwnerTier[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: NODE_OWNER_TIER_T1 = 1;\n     */\n    NodeOwnerTier[NodeOwnerTier[\"T1\"] = 1] = \"T1\";\n    /**\n     * @generated from protobuf enum value: NODE_OWNER_TIER_T2 = 2;\n     */\n    NodeOwnerTier[NodeOwnerTier[\"T2\"] = 2] = \"T2\";\n    /**\n     * @generated from protobuf enum value: NODE_OWNER_TIER_T3 = 3;\n     */\n    NodeOwnerTier[NodeOwnerTier[\"T3\"] = 3] = \"T3\";\n})(NodeOwnerTier || (NodeOwnerTier = {}));\n/**\n * OPP envelope dispute lifecycle (sysio.chalg dispute-vote flow). A dispute opens when batch\n * operators deliver 3+ distinct envelope versions for one (outpost, epoch) with no majority; the\n * Tier-1 node owners then vote on the canonical envelope. OPEN until the tally resolves a winning\n * checksum, then RESOLVED (the winner is dispatched and the paused epoch is released).\n *\n * @generated from protobuf enum sysio.opp.types.DisputeStatus\n */\nexport var DisputeStatus;\n(function (DisputeStatus) {\n    /**\n     * @generated from protobuf enum value: DISPUTE_STATUS_UNKNOWN = 0;\n     */\n    DisputeStatus[DisputeStatus[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: DISPUTE_STATUS_OPEN = 1;\n     */\n    DisputeStatus[DisputeStatus[\"OPEN\"] = 1] = \"OPEN\";\n    /**\n     * @generated from protobuf enum value: DISPUTE_STATUS_RESOLVED = 2;\n     */\n    DisputeStatus[DisputeStatus[\"RESOLVED\"] = 2] = \"RESOLVED\";\n})(DisputeStatus || (DisputeStatus = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChainId$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.ChainId\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.ChainKind\", ChainKind, \"CHAIN_KIND_\"] },\n            { no: 2, name: \"id\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.id = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* uint32 id */ 2:\n                    message.id = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* uint32 id = 2; */\n        if (message.id !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.id);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.ChainId\n */\nexport const ChainId = new ChainId$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WireKey$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.WireKey\", [\n            { no: 1, name: \"key_type\", kind: \"enum\", T: () => [\"sysio.opp.types.WireKeyType\", WireKeyType, \"WIRE_KEY_TYPE_\"] },\n            { no: 2, name: \"key\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.keyType = 0;\n        message.key = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.WireKeyType key_type */ 1:\n                    message.keyType = reader.int32();\n                    break;\n                case /* bytes key */ 2:\n                    message.key = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.WireKeyType key_type = 1; */\n        if (message.keyType !== 0)\n            writer.tag(1, WireType.Varint).int32(message.keyType);\n        /* bytes key = 2; */\n        if (message.key.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.key);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.WireKey\n */\nexport const WireKey = new WireKey$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChainAddress$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.ChainAddress\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.ChainKind\", ChainKind, \"CHAIN_KIND_\"] },\n            { no: 2, name: \"address\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.address = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* bytes address */ 2:\n                    message.address = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* bytes address = 2; */\n        if (message.address.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.address);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.ChainAddress\n */\nexport const ChainAddress = new ChainAddress$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChainSignature$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.ChainSignature\", [\n            { no: 1, name: \"actor\", kind: \"message\", T: () => ChainAddress },\n            { no: 2, name: \"key_type\", kind: \"enum\", T: () => [\"sysio.opp.types.ChainKeyType\", ChainKeyType, \"CHAIN_KEY_TYPE_\"] },\n            { no: 3, name: \"signature\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.keyType = 0;\n        message.signature = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainAddress actor */ 1:\n                    message.actor = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.actor);\n                    break;\n                case /* sysio.opp.types.ChainKeyType key_type */ 2:\n                    message.keyType = reader.int32();\n                    break;\n                case /* bytes signature */ 3:\n                    message.signature = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainAddress actor = 1; */\n        if (message.actor)\n            ChainAddress.internalBinaryWrite(message.actor, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.ChainKeyType key_type = 2; */\n        if (message.keyType !== 0)\n            writer.tag(2, WireType.Varint).int32(message.keyType);\n        /* bytes signature = 3; */\n        if (message.signature.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.signature);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.ChainSignature\n */\nexport const ChainSignature = new ChainSignature$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WireAccount$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.WireAccount\", [\n            { no: 1, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.name = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string name */ 1:\n                    message.name = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string name = 1; */\n        if (message.name !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.name);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.WireAccount\n */\nexport const WireAccount = new WireAccount$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass WirePermission$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.WirePermission\", [\n            { no: 1, name: \"account\", kind: \"message\", T: () => WireAccount },\n            { no: 2, name: \"permission\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.permission = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.WireAccount account */ 1:\n                    message.account = WireAccount.internalBinaryRead(reader, reader.uint32(), options, message.account);\n                    break;\n                case /* string permission */ 2:\n                    message.permission = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.WireAccount account = 1; */\n        if (message.account)\n            WireAccount.internalBinaryWrite(message.account, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* string permission = 2; */\n        if (message.permission !== \"\")\n            writer.tag(2, WireType.LengthDelimited).string(message.permission);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.WirePermission\n */\nexport const WirePermission = new WirePermission$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass TokenAmount$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.TokenAmount\", [\n            { no: 1, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"amount\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.tokenCode = 0n;\n        message.amount = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 token_code */ 1:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* int64 amount */ 2:\n                    message.amount = reader.int64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 token_code = 1; */\n        if (message.tokenCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.tokenCode);\n        /* int64 amount = 2; */\n        if (message.amount !== 0n)\n            writer.tag(2, WireType.Varint).int64(message.amount);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.TokenAmount\n */\nexport const TokenAmount = new TokenAmount$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Chain$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.Chain\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.ChainKind\", ChainKind, \"CHAIN_KIND_\"] },\n            { no: 2, name: \"code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"external_chain_id\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 4, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 6, name: \"is_depot\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 7, name: \"active\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 8, name: \"registered_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 9, name: \"activated_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.code = 0n;\n        message.externalChainId = 0;\n        message.name = \"\";\n        message.description = \"\";\n        message.isDepot = false;\n        message.active = false;\n        message.registeredAtMs = 0n;\n        message.activatedAtMs = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* uint64 code */ 2:\n                    message.code = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 external_chain_id */ 3:\n                    message.externalChainId = reader.uint32();\n                    break;\n                case /* string name */ 4:\n                    message.name = reader.string();\n                    break;\n                case /* string description */ 5:\n                    message.description = reader.string();\n                    break;\n                case /* bool is_depot */ 6:\n                    message.isDepot = reader.bool();\n                    break;\n                case /* bool active */ 7:\n                    message.active = reader.bool();\n                    break;\n                case /* uint64 registered_at_ms */ 8:\n                    message.registeredAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 activated_at_ms */ 9:\n                    message.activatedAtMs = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* uint64 code = 2; */\n        if (message.code !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.code);\n        /* uint32 external_chain_id = 3; */\n        if (message.externalChainId !== 0)\n            writer.tag(3, WireType.Varint).uint32(message.externalChainId);\n        /* string name = 4; */\n        if (message.name !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.name);\n        /* string description = 5; */\n        if (message.description !== \"\")\n            writer.tag(5, WireType.LengthDelimited).string(message.description);\n        /* bool is_depot = 6; */\n        if (message.isDepot !== false)\n            writer.tag(6, WireType.Varint).bool(message.isDepot);\n        /* bool active = 7; */\n        if (message.active !== false)\n            writer.tag(7, WireType.Varint).bool(message.active);\n        /* uint64 registered_at_ms = 8; */\n        if (message.registeredAtMs !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.registeredAtMs);\n        /* uint64 activated_at_ms = 9; */\n        if (message.activatedAtMs !== 0n)\n            writer.tag(9, WireType.Varint).uint64(message.activatedAtMs);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.Chain\n */\nexport const Chain = new Chain$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Token$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.Token\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.TokenKind\", TokenKind, \"TOKEN_KIND_\"] },\n            { no: 2, name: \"code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"symbol_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 4, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"precision\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 6, name: \"address\", kind: \"message\", T: () => ChainAddress },\n            { no: 7, name: \"active\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 8, name: \"registered_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 9, name: \"activated_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.code = 0n;\n        message.symbolName = \"\";\n        message.description = \"\";\n        message.precision = 0;\n        message.active = false;\n        message.registeredAtMs = 0n;\n        message.activatedAtMs = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.TokenKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* uint64 code */ 2:\n                    message.code = reader.uint64().toBigInt();\n                    break;\n                case /* string symbol_name */ 3:\n                    message.symbolName = reader.string();\n                    break;\n                case /* string description */ 4:\n                    message.description = reader.string();\n                    break;\n                case /* uint32 precision */ 5:\n                    message.precision = reader.uint32();\n                    break;\n                case /* sysio.opp.types.ChainAddress address */ 6:\n                    message.address = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.address);\n                    break;\n                case /* bool active */ 7:\n                    message.active = reader.bool();\n                    break;\n                case /* uint64 registered_at_ms */ 8:\n                    message.registeredAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 activated_at_ms */ 9:\n                    message.activatedAtMs = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.TokenKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* uint64 code = 2; */\n        if (message.code !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.code);\n        /* string symbol_name = 3; */\n        if (message.symbolName !== \"\")\n            writer.tag(3, WireType.LengthDelimited).string(message.symbolName);\n        /* string description = 4; */\n        if (message.description !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.description);\n        /* uint32 precision = 5; */\n        if (message.precision !== 0)\n            writer.tag(5, WireType.Varint).uint32(message.precision);\n        /* sysio.opp.types.ChainAddress address = 6; */\n        if (message.address)\n            ChainAddress.internalBinaryWrite(message.address, writer.tag(6, WireType.LengthDelimited).fork(), options).join();\n        /* bool active = 7; */\n        if (message.active !== false)\n            writer.tag(7, WireType.Varint).bool(message.active);\n        /* uint64 registered_at_ms = 8; */\n        if (message.registeredAtMs !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.registeredAtMs);\n        /* uint64 activated_at_ms = 9; */\n        if (message.activatedAtMs !== 0n)\n            writer.tag(9, WireType.Varint).uint64(message.activatedAtMs);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.Token\n */\nexport const Token = new Token$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChainToken$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.ChainToken\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"contract_addr\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 5, name: \"is_native\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 6, name: \"active\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 7, name: \"registered_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"activated_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.tokenCode = 0n;\n        message.contractAddr = new Uint8Array(0);\n        message.isNative = false;\n        message.active = false;\n        message.registeredAtMs = 0n;\n        message.activatedAtMs = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_code */ 2:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* bytes contract_addr */ 3:\n                    message.contractAddr = reader.bytes();\n                    break;\n                case /* bool is_native */ 5:\n                    message.isNative = reader.bool();\n                    break;\n                case /* bool active */ 6:\n                    message.active = reader.bool();\n                    break;\n                case /* uint64 registered_at_ms */ 7:\n                    message.registeredAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 activated_at_ms */ 8:\n                    message.activatedAtMs = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 token_code = 2; */\n        if (message.tokenCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.tokenCode);\n        /* bytes contract_addr = 3; */\n        if (message.contractAddr.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.contractAddr);\n        /* bool is_native = 5; */\n        if (message.isNative !== false)\n            writer.tag(5, WireType.Varint).bool(message.isNative);\n        /* bool active = 6; */\n        if (message.active !== false)\n            writer.tag(6, WireType.Varint).bool(message.active);\n        /* uint64 registered_at_ms = 7; */\n        if (message.registeredAtMs !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.registeredAtMs);\n        /* uint64 activated_at_ms = 8; */\n        if (message.activatedAtMs !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.activatedAtMs);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.ChainToken\n */\nexport const ChainToken = new ChainToken$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Reserve$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.Reserve\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"token_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 6, name: \"status\", kind: \"enum\", T: () => [\"sysio.opp.types.ReserveStatus\", ReserveStatus, \"RESERVE_STATUS_\"] },\n            { no: 7, name: \"reserve_chain_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"reserve_wire_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 9, name: \"connector_weight_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 10, name: \"creator_addr\", kind: \"message\", T: () => ChainAddress },\n            { no: 11, name: \"requested_wire_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 12, name: \"external_token_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 13, name: \"registered_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 14, name: \"activated_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 15, name: \"cancelled_at_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 16, name: \"source_token_precision\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.tokenCode = 0n;\n        message.code = 0n;\n        message.name = \"\";\n        message.description = \"\";\n        message.status = 0;\n        message.reserveChainAmount = 0n;\n        message.reserveWireAmount = 0n;\n        message.connectorWeightBps = 0;\n        message.requestedWireAmount = 0n;\n        message.externalTokenAmount = 0n;\n        message.registeredAtMs = 0n;\n        message.activatedAtMs = 0n;\n        message.cancelledAtMs = 0n;\n        message.sourceTokenPrecision = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 token_code */ 2:\n                    message.tokenCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 code */ 3:\n                    message.code = reader.uint64().toBigInt();\n                    break;\n                case /* string name */ 4:\n                    message.name = reader.string();\n                    break;\n                case /* string description */ 5:\n                    message.description = reader.string();\n                    break;\n                case /* sysio.opp.types.ReserveStatus status */ 6:\n                    message.status = reader.int32();\n                    break;\n                case /* uint64 reserve_chain_amount */ 7:\n                    message.reserveChainAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_wire_amount */ 8:\n                    message.reserveWireAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 connector_weight_bps */ 9:\n                    message.connectorWeightBps = reader.uint32();\n                    break;\n                case /* sysio.opp.types.ChainAddress creator_addr */ 10:\n                    message.creatorAddr = ChainAddress.internalBinaryRead(reader, reader.uint32(), options, message.creatorAddr);\n                    break;\n                case /* uint64 requested_wire_amount */ 11:\n                    message.requestedWireAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 external_token_amount */ 12:\n                    message.externalTokenAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 registered_at_ms */ 13:\n                    message.registeredAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 activated_at_ms */ 14:\n                    message.activatedAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 cancelled_at_ms */ 15:\n                    message.cancelledAtMs = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 source_token_precision */ 16:\n                    message.sourceTokenPrecision = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 token_code = 2; */\n        if (message.tokenCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.tokenCode);\n        /* uint64 code = 3; */\n        if (message.code !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.code);\n        /* string name = 4; */\n        if (message.name !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.name);\n        /* string description = 5; */\n        if (message.description !== \"\")\n            writer.tag(5, WireType.LengthDelimited).string(message.description);\n        /* sysio.opp.types.ReserveStatus status = 6; */\n        if (message.status !== 0)\n            writer.tag(6, WireType.Varint).int32(message.status);\n        /* uint64 reserve_chain_amount = 7; */\n        if (message.reserveChainAmount !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.reserveChainAmount);\n        /* uint64 reserve_wire_amount = 8; */\n        if (message.reserveWireAmount !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.reserveWireAmount);\n        /* uint32 connector_weight_bps = 9; */\n        if (message.connectorWeightBps !== 0)\n            writer.tag(9, WireType.Varint).uint32(message.connectorWeightBps);\n        /* sysio.opp.types.ChainAddress creator_addr = 10; */\n        if (message.creatorAddr)\n            ChainAddress.internalBinaryWrite(message.creatorAddr, writer.tag(10, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 requested_wire_amount = 11; */\n        if (message.requestedWireAmount !== 0n)\n            writer.tag(11, WireType.Varint).uint64(message.requestedWireAmount);\n        /* uint64 external_token_amount = 12; */\n        if (message.externalTokenAmount !== 0n)\n            writer.tag(12, WireType.Varint).uint64(message.externalTokenAmount);\n        /* uint64 registered_at_ms = 13; */\n        if (message.registeredAtMs !== 0n)\n            writer.tag(13, WireType.Varint).uint64(message.registeredAtMs);\n        /* uint64 activated_at_ms = 14; */\n        if (message.activatedAtMs !== 0n)\n            writer.tag(14, WireType.Varint).uint64(message.activatedAtMs);\n        /* uint64 cancelled_at_ms = 15; */\n        if (message.cancelledAtMs !== 0n)\n            writer.tag(15, WireType.Varint).uint64(message.cancelledAtMs);\n        /* uint32 source_token_precision = 16; */\n        if (message.sourceTokenPrecision !== 0)\n            writer.tag(16, WireType.Varint).uint32(message.sourceTokenPrecision);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.Reserve\n */\nexport const Reserve = new Reserve$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveAmount$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.types.ReserveAmount\", [\n            { no: 1, name: \"chain_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"reserve_code\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 3, name: \"amount\", kind: \"message\", T: () => TokenAmount }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.chainCode = 0n;\n        message.reserveCode = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint64 chain_code */ 1:\n                    message.chainCode = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 reserve_code */ 2:\n                    message.reserveCode = reader.uint64().toBigInt();\n                    break;\n                case /* sysio.opp.types.TokenAmount amount */ 3:\n                    message.amount = TokenAmount.internalBinaryRead(reader, reader.uint32(), options, message.amount);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint64 chain_code = 1; */\n        if (message.chainCode !== 0n)\n            writer.tag(1, WireType.Varint).uint64(message.chainCode);\n        /* uint64 reserve_code = 2; */\n        if (message.reserveCode !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.reserveCode);\n        /* sysio.opp.types.TokenAmount amount = 3; */\n        if (message.amount)\n            TokenAmount.internalBinaryWrite(message.amount, writer.tag(3, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.types.ReserveAmount\n */\nexport const ReserveAmount = new ReserveAmount$Type();\n//# sourceMappingURL=types.js.map", "import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { AttestationType } from \"./types/types.js\";\nimport { ChainId } from \"./types/types.js\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass Endpoints$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.Endpoints\", [\n            { no: 1, name: \"start\", kind: \"message\", T: () => ChainId },\n            { no: 2, name: \"end\", kind: \"message\", T: () => ChainId }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainId start */ 1:\n                    message.start = ChainId.internalBinaryRead(reader, reader.uint32(), options, message.start);\n                    break;\n                case /* sysio.opp.types.ChainId end */ 2:\n                    message.end = ChainId.internalBinaryRead(reader, reader.uint32(), options, message.end);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainId start = 1; */\n        if (message.start)\n            ChainId.internalBinaryWrite(message.start, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.types.ChainId end = 2; */\n        if (message.end)\n            ChainId.internalBinaryWrite(message.end, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.Endpoints\n */\nexport const Endpoints = new Endpoints$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass MessageHeader$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.MessageHeader\", [\n            { no: 1, name: \"endpoints\", kind: \"message\", T: () => Endpoints },\n            { no: 2, name: \"message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 3, name: \"previous_message_id\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 5, name: \"payload_size\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 6, name: \"payload_checksum\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 7, name: \"timestamp\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"header_checksum\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.messageId = new Uint8Array(0);\n        message.previousMessageId = new Uint8Array(0);\n        message.payloadSize = 0;\n        message.payloadChecksum = new Uint8Array(0);\n        message.timestamp = 0n;\n        message.headerChecksum = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.Endpoints endpoints */ 1:\n                    message.endpoints = Endpoints.internalBinaryRead(reader, reader.uint32(), options, message.endpoints);\n                    break;\n                case /* bytes message_id */ 2:\n                    message.messageId = reader.bytes();\n                    break;\n                case /* bytes previous_message_id */ 3:\n                    message.previousMessageId = reader.bytes();\n                    break;\n                case /* uint32 payload_size */ 5:\n                    message.payloadSize = reader.uint32();\n                    break;\n                case /* bytes payload_checksum */ 6:\n                    message.payloadChecksum = reader.bytes();\n                    break;\n                case /* uint64 timestamp */ 7:\n                    message.timestamp = reader.uint64().toBigInt();\n                    break;\n                case /* bytes header_checksum */ 8:\n                    message.headerChecksum = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.Endpoints endpoints = 1; */\n        if (message.endpoints)\n            Endpoints.internalBinaryWrite(message.endpoints, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* bytes message_id = 2; */\n        if (message.messageId.length)\n            writer.tag(2, WireType.LengthDelimited).bytes(message.messageId);\n        /* bytes previous_message_id = 3; */\n        if (message.previousMessageId.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.previousMessageId);\n        /* uint32 payload_size = 5; */\n        if (message.payloadSize !== 0)\n            writer.tag(5, WireType.Varint).uint32(message.payloadSize);\n        /* bytes payload_checksum = 6; */\n        if (message.payloadChecksum.length)\n            writer.tag(6, WireType.LengthDelimited).bytes(message.payloadChecksum);\n        /* uint64 timestamp = 7; */\n        if (message.timestamp !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.timestamp);\n        /* bytes header_checksum = 8; */\n        if (message.headerChecksum.length)\n            writer.tag(8, WireType.LengthDelimited).bytes(message.headerChecksum);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.MessageHeader\n */\nexport const MessageHeader = new MessageHeader$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass MessagePayload$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.MessagePayload\", [\n            { no: 1, name: \"version\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"attestations\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AttestationEntry }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.version = 0;\n        message.attestations = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 version */ 1:\n                    message.version = reader.uint32();\n                    break;\n                case /* repeated sysio.opp.AttestationEntry attestations */ 2:\n                    message.attestations.push(AttestationEntry.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 version = 1; */\n        if (message.version !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.version);\n        /* repeated sysio.opp.AttestationEntry attestations = 2; */\n        for (let i = 0; i < message.attestations.length; i++)\n            AttestationEntry.internalBinaryWrite(message.attestations[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.MessagePayload\n */\nexport const MessagePayload = new MessagePayload$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass AttestationEntry$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.AttestationEntry\", [\n            { no: 1, name: \"type\", kind: \"enum\", T: () => [\"sysio.opp.types.AttestationType\", AttestationType, \"ATTESTATION_TYPE_\"] },\n            { no: 2, name: \"data_size\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.type = 0;\n        message.dataSize = 0;\n        message.data = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.AttestationType type */ 1:\n                    message.type = reader.int32();\n                    break;\n                case /* uint32 data_size */ 2:\n                    message.dataSize = reader.uint32();\n                    break;\n                case /* bytes data */ 3:\n                    message.data = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.AttestationType type = 1; */\n        if (message.type !== 0)\n            writer.tag(1, WireType.Varint).int32(message.type);\n        /* uint32 data_size = 2; */\n        if (message.dataSize !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.dataSize);\n        /* bytes data = 3; */\n        if (message.data.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.data);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.AttestationEntry\n */\nexport const AttestationEntry = new AttestationEntry$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Message$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.Message\", [\n            { no: 1, name: \"header\", kind: \"message\", T: () => MessageHeader },\n            { no: 2, name: \"payload\", kind: \"message\", T: () => MessagePayload }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.MessageHeader header */ 1:\n                    message.header = MessageHeader.internalBinaryRead(reader, reader.uint32(), options, message.header);\n                    break;\n                case /* sysio.opp.MessagePayload payload */ 2:\n                    message.payload = MessagePayload.internalBinaryRead(reader, reader.uint32(), options, message.payload);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.MessageHeader header = 1; */\n        if (message.header)\n            MessageHeader.internalBinaryWrite(message.header, writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.MessagePayload payload = 2; */\n        if (message.payload)\n            MessagePayload.internalBinaryWrite(message.payload, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.Message\n */\nexport const Message = new Message$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass Envelope$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.Envelope\", [\n            { no: 1, name: \"envelope_hash\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 2, name: \"endpoints\", kind: \"message\", T: () => Endpoints },\n            { no: 5, name: \"epoch_timestamp\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 6, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 7, name: \"epoch_envelope_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 20, name: \"previous_envelope_hash\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ },\n            { no: 40, name: \"messages\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Message }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.envelopeHash = new Uint8Array(0);\n        message.epochTimestamp = 0n;\n        message.epochIndex = 0;\n        message.epochEnvelopeIndex = 0;\n        message.previousEnvelopeHash = new Uint8Array(0);\n        message.messages = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* bytes envelope_hash */ 1:\n                    message.envelopeHash = reader.bytes();\n                    break;\n                case /* sysio.opp.Endpoints endpoints */ 2:\n                    message.endpoints = Endpoints.internalBinaryRead(reader, reader.uint32(), options, message.endpoints);\n                    break;\n                case /* uint64 epoch_timestamp */ 5:\n                    message.epochTimestamp = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 epoch_index */ 6:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* uint32 epoch_envelope_index */ 7:\n                    message.epochEnvelopeIndex = reader.uint32();\n                    break;\n                case /* bytes previous_envelope_hash */ 20:\n                    message.previousEnvelopeHash = reader.bytes();\n                    break;\n                case /* repeated sysio.opp.Message messages */ 40:\n                    message.messages.push(Message.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* bytes envelope_hash = 1; */\n        if (message.envelopeHash.length)\n            writer.tag(1, WireType.LengthDelimited).bytes(message.envelopeHash);\n        /* sysio.opp.Endpoints endpoints = 2; */\n        if (message.endpoints)\n            Endpoints.internalBinaryWrite(message.endpoints, writer.tag(2, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 epoch_timestamp = 5; */\n        if (message.epochTimestamp !== 0n)\n            writer.tag(5, WireType.Varint).uint64(message.epochTimestamp);\n        /* uint32 epoch_index = 6; */\n        if (message.epochIndex !== 0)\n            writer.tag(6, WireType.Varint).uint32(message.epochIndex);\n        /* uint32 epoch_envelope_index = 7; */\n        if (message.epochEnvelopeIndex !== 0)\n            writer.tag(7, WireType.Varint).uint32(message.epochEnvelopeIndex);\n        /* bytes previous_envelope_hash = 20; */\n        if (message.previousEnvelopeHash.length)\n            writer.tag(20, WireType.LengthDelimited).bytes(message.previousEnvelopeHash);\n        /* repeated sysio.opp.Message messages = 40; */\n        for (let i = 0; i < message.messages.length; i++)\n            Message.internalBinaryWrite(message.messages[i], writer.tag(40, WireType.LengthDelimited).fork(), options).join();\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.Envelope\n */\nexport const Envelope = new Envelope$Type();\n//# sourceMappingURL=opp.js.map", "import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\nimport { TokenKind } from \"../types/types.js\";\nimport { ChainKind } from \"../types/types.js\";\n// @generated message type with reflection information, may provide speed optimized methods\nclass ChainSpec$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.bootstrap.ChainSpec\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.ChainKind\", ChainKind, \"CHAIN_KIND_\"] },\n            { no: 2, name: \"code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 3, name: \"external_chain_id\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 4, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.code = \"\";\n        message.externalChainId = 0;\n        message.name = \"\";\n        message.description = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.ChainKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* string code */ 2:\n                    message.code = reader.string();\n                    break;\n                case /* uint32 external_chain_id */ 3:\n                    message.externalChainId = reader.uint32();\n                    break;\n                case /* string name */ 4:\n                    message.name = reader.string();\n                    break;\n                case /* string description */ 5:\n                    message.description = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.ChainKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* string code = 2; */\n        if (message.code !== \"\")\n            writer.tag(2, WireType.LengthDelimited).string(message.code);\n        /* uint32 external_chain_id = 3; */\n        if (message.externalChainId !== 0)\n            writer.tag(3, WireType.Varint).uint32(message.externalChainId);\n        /* string name = 4; */\n        if (message.name !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.name);\n        /* string description = 5; */\n        if (message.description !== \"\")\n            writer.tag(5, WireType.LengthDelimited).string(message.description);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.bootstrap.ChainSpec\n */\nexport const ChainSpec = new ChainSpec$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass TokenSpec$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.bootstrap.TokenSpec\", [\n            { no: 1, name: \"kind\", kind: \"enum\", T: () => [\"sysio.opp.types.TokenKind\", TokenKind, \"TOKEN_KIND_\"] },\n            { no: 2, name: \"code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 3, name: \"symbol_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 4, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"precision\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 6, name: \"chain_code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 7, name: \"contract_address\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 8, name: \"is_native\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.kind = 0;\n        message.code = \"\";\n        message.symbolName = \"\";\n        message.description = \"\";\n        message.precision = 0;\n        message.chainCode = \"\";\n        message.contractAddress = \"\";\n        message.isNative = false;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* sysio.opp.types.TokenKind kind */ 1:\n                    message.kind = reader.int32();\n                    break;\n                case /* string code */ 2:\n                    message.code = reader.string();\n                    break;\n                case /* string symbol_name */ 3:\n                    message.symbolName = reader.string();\n                    break;\n                case /* string description */ 4:\n                    message.description = reader.string();\n                    break;\n                case /* uint32 precision */ 5:\n                    message.precision = reader.uint32();\n                    break;\n                case /* string chain_code */ 6:\n                    message.chainCode = reader.string();\n                    break;\n                case /* string contract_address */ 7:\n                    message.contractAddress = reader.string();\n                    break;\n                case /* bool is_native */ 8:\n                    message.isNative = reader.bool();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* sysio.opp.types.TokenKind kind = 1; */\n        if (message.kind !== 0)\n            writer.tag(1, WireType.Varint).int32(message.kind);\n        /* string code = 2; */\n        if (message.code !== \"\")\n            writer.tag(2, WireType.LengthDelimited).string(message.code);\n        /* string symbol_name = 3; */\n        if (message.symbolName !== \"\")\n            writer.tag(3, WireType.LengthDelimited).string(message.symbolName);\n        /* string description = 4; */\n        if (message.description !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.description);\n        /* uint32 precision = 5; */\n        if (message.precision !== 0)\n            writer.tag(5, WireType.Varint).uint32(message.precision);\n        /* string chain_code = 6; */\n        if (message.chainCode !== \"\")\n            writer.tag(6, WireType.LengthDelimited).string(message.chainCode);\n        /* string contract_address = 7; */\n        if (message.contractAddress !== \"\")\n            writer.tag(7, WireType.LengthDelimited).string(message.contractAddress);\n        /* bool is_native = 8; */\n        if (message.isNative !== false)\n            writer.tag(8, WireType.Varint).bool(message.isNative);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.bootstrap.TokenSpec\n */\nexport const TokenSpec = new TokenSpec$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ReserveSpec$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.bootstrap.ReserveSpec\", [\n            { no: 1, name: \"code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"chain_code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 3, name: \"token_code\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 4, name: \"name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"description\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 6, name: \"initial_chain_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"initial_wire_amount\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"connector_weight_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 9, name: \"is_private\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 10, name: \"owner\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.code = \"\";\n        message.chainCode = \"\";\n        message.tokenCode = \"\";\n        message.name = \"\";\n        message.description = \"\";\n        message.initialChainAmount = 0n;\n        message.initialWireAmount = 0n;\n        message.connectorWeightBps = 0;\n        message.isPrivate = false;\n        message.owner = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string code */ 1:\n                    message.code = reader.string();\n                    break;\n                case /* string chain_code */ 2:\n                    message.chainCode = reader.string();\n                    break;\n                case /* string token_code */ 3:\n                    message.tokenCode = reader.string();\n                    break;\n                case /* string name */ 4:\n                    message.name = reader.string();\n                    break;\n                case /* string description */ 5:\n                    message.description = reader.string();\n                    break;\n                case /* uint64 initial_chain_amount */ 6:\n                    message.initialChainAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 initial_wire_amount */ 7:\n                    message.initialWireAmount = reader.uint64().toBigInt();\n                    break;\n                case /* uint32 connector_weight_bps */ 8:\n                    message.connectorWeightBps = reader.uint32();\n                    break;\n                case /* bool is_private */ 9:\n                    message.isPrivate = reader.bool();\n                    break;\n                case /* string owner */ 10:\n                    message.owner = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string code = 1; */\n        if (message.code !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.code);\n        /* string chain_code = 2; */\n        if (message.chainCode !== \"\")\n            writer.tag(2, WireType.LengthDelimited).string(message.chainCode);\n        /* string token_code = 3; */\n        if (message.tokenCode !== \"\")\n            writer.tag(3, WireType.LengthDelimited).string(message.tokenCode);\n        /* string name = 4; */\n        if (message.name !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.name);\n        /* string description = 5; */\n        if (message.description !== \"\")\n            writer.tag(5, WireType.LengthDelimited).string(message.description);\n        /* uint64 initial_chain_amount = 6; */\n        if (message.initialChainAmount !== 0n)\n            writer.tag(6, WireType.Varint).uint64(message.initialChainAmount);\n        /* uint64 initial_wire_amount = 7; */\n        if (message.initialWireAmount !== 0n)\n            writer.tag(7, WireType.Varint).uint64(message.initialWireAmount);\n        /* uint32 connector_weight_bps = 8; */\n        if (message.connectorWeightBps !== 0)\n            writer.tag(8, WireType.Varint).uint32(message.connectorWeightBps);\n        /* bool is_private = 9; */\n        if (message.isPrivate !== false)\n            writer.tag(9, WireType.Varint).bool(message.isPrivate);\n        /* string owner = 10; */\n        if (message.owner !== \"\")\n            writer.tag(10, WireType.LengthDelimited).string(message.owner);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.bootstrap.ReserveSpec\n */\nexport const ReserveSpec = new ReserveSpec$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass UwritConfig$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.bootstrap.UwritConfig\", [\n            { no: 1, name: \"fee_bps\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"collateral_lock_duration_ms\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.feeBps = 0;\n        message.collateralLockDurationMs = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 fee_bps */ 1:\n                    message.feeBps = reader.uint32();\n                    break;\n                case /* uint64 collateral_lock_duration_ms */ 2:\n                    message.collateralLockDurationMs = reader.uint64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 fee_bps = 1; */\n        if (message.feeBps !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.feeBps);\n        /* uint64 collateral_lock_duration_ms = 2; */\n        if (message.collateralLockDurationMs !== 0n)\n            writer.tag(2, WireType.Varint).uint64(message.collateralLockDurationMs);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.bootstrap.UwritConfig\n */\nexport const UwritConfig = new UwritConfig$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass BootstrapPlatformConfig$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.bootstrap.BootstrapPlatformConfig\", [\n            { no: 1, name: \"schema_version\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"network\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 3, name: \"t5_reserve_allocation\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 8, name: \"t5_dex_allocation\", kind: \"scalar\", T: 4 /*ScalarType.UINT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 4, name: \"chains\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ChainSpec },\n            { no: 5, name: \"tokens\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => TokenSpec },\n            { no: 6, name: \"reserves\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ReserveSpec },\n            { no: 7, name: \"uwrit\", kind: \"message\", T: () => UwritConfig }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.schemaVersion = 0;\n        message.network = \"\";\n        message.t5ReserveAllocation = 0n;\n        message.t5DexAllocation = 0n;\n        message.chains = [];\n        message.tokens = [];\n        message.reserves = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 schema_version */ 1:\n                    message.schemaVersion = reader.uint32();\n                    break;\n                case /* string network */ 2:\n                    message.network = reader.string();\n                    break;\n                case /* uint64 t5_reserve_allocation */ 3:\n                    message.t5ReserveAllocation = reader.uint64().toBigInt();\n                    break;\n                case /* uint64 t5_dex_allocation */ 8:\n                    message.t5DexAllocation = reader.uint64().toBigInt();\n                    break;\n                case /* repeated sysio.opp.bootstrap.ChainSpec chains */ 4:\n                    message.chains.push(ChainSpec.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* repeated sysio.opp.bootstrap.TokenSpec tokens */ 5:\n                    message.tokens.push(TokenSpec.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* repeated sysio.opp.bootstrap.ReserveSpec reserves */ 6:\n                    message.reserves.push(ReserveSpec.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* sysio.opp.bootstrap.UwritConfig uwrit */ 7:\n                    message.uwrit = UwritConfig.internalBinaryRead(reader, reader.uint32(), options, message.uwrit);\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 schema_version = 1; */\n        if (message.schemaVersion !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.schemaVersion);\n        /* string network = 2; */\n        if (message.network !== \"\")\n            writer.tag(2, WireType.LengthDelimited).string(message.network);\n        /* uint64 t5_reserve_allocation = 3; */\n        if (message.t5ReserveAllocation !== 0n)\n            writer.tag(3, WireType.Varint).uint64(message.t5ReserveAllocation);\n        /* repeated sysio.opp.bootstrap.ChainSpec chains = 4; */\n        for (let i = 0; i < message.chains.length; i++)\n            ChainSpec.internalBinaryWrite(message.chains[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.bootstrap.TokenSpec tokens = 5; */\n        for (let i = 0; i < message.tokens.length; i++)\n            TokenSpec.internalBinaryWrite(message.tokens[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join();\n        /* repeated sysio.opp.bootstrap.ReserveSpec reserves = 6; */\n        for (let i = 0; i < message.reserves.length; i++)\n            ReserveSpec.internalBinaryWrite(message.reserves[i], writer.tag(6, WireType.LengthDelimited).fork(), options).join();\n        /* sysio.opp.bootstrap.UwritConfig uwrit = 7; */\n        if (message.uwrit)\n            UwritConfig.internalBinaryWrite(message.uwrit, writer.tag(7, WireType.LengthDelimited).fork(), options).join();\n        /* uint64 t5_dex_allocation = 8; */\n        if (message.t5DexAllocation !== 0n)\n            writer.tag(8, WireType.Varint).uint64(message.t5DexAllocation);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.bootstrap.BootstrapPlatformConfig\n */\nexport const BootstrapPlatformConfig = new BootstrapPlatformConfig$Type();\n//# sourceMappingURL=bootstrap.js.map", "import { WireType } from \"@protobuf-ts/runtime\";\nimport { UnknownFieldHandler } from \"@protobuf-ts/runtime\";\nimport { reflectionMergePartial } from \"@protobuf-ts/runtime\";\nimport { MessageType } from \"@protobuf-ts/runtime\";\n// ---------------------------------------------------------------------------\n//  OPP Debugging endpoint direction\n// ---------------------------------------------------------------------------\n/**\n * @generated from protobuf enum sysio.opp.debugging.DebugOutpostEndpointsType\n */\nexport var DebugOutpostEndpointsType;\n(function (DebugOutpostEndpointsType) {\n    /**\n     * @generated from protobuf enum value: DEBUG_OUTPOST_ENDPOINTS_TYPE_UNKNOWN = 0;\n     */\n    DebugOutpostEndpointsType[DebugOutpostEndpointsType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n    /**\n     * @generated from protobuf enum value: DEBUG_OUTPOST_ENDPOINTS_TYPE_OUTPOST_ETHEREUM_DEPOT = 1;\n     */\n    DebugOutpostEndpointsType[DebugOutpostEndpointsType[\"OUTPOST_ETHEREUM_DEPOT\"] = 1] = \"OUTPOST_ETHEREUM_DEPOT\";\n    /**\n     * @generated from protobuf enum value: DEBUG_OUTPOST_ENDPOINTS_TYPE_OUTPOST_SOLANA_DEPOT = 2;\n     */\n    DebugOutpostEndpointsType[DebugOutpostEndpointsType[\"OUTPOST_SOLANA_DEPOT\"] = 2] = \"OUTPOST_SOLANA_DEPOT\";\n    /**\n     * @generated from protobuf enum value: DEBUG_OUTPOST_ENDPOINTS_TYPE_DEPOT_OUTPOST_ETHEREUM = 3;\n     */\n    DebugOutpostEndpointsType[DebugOutpostEndpointsType[\"DEPOT_OUTPOST_ETHEREUM\"] = 3] = \"DEPOT_OUTPOST_ETHEREUM\";\n    /**\n     * @generated from protobuf enum value: DEBUG_OUTPOST_ENDPOINTS_TYPE_DEPOT_OUTPOST_SOLANA = 4;\n     */\n    DebugOutpostEndpointsType[DebugOutpostEndpointsType[\"DEPOT_OUTPOST_SOLANA\"] = 4] = \"DEPOT_OUTPOST_SOLANA\";\n})(DebugOutpostEndpointsType || (DebugOutpostEndpointsType = {}));\n// @generated message type with reflection information, may provide speed optimized methods\nclass DebugEnvelopeDataRecord$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.DebugEnvelopeDataRecord\", [\n            { no: 1, name: \"batch_op_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"endpoints_type\", kind: \"enum\", T: () => [\"sysio.opp.debugging.DebugOutpostEndpointsType\", DebugOutpostEndpointsType, \"DEBUG_OUTPOST_ENDPOINTS_TYPE_\"] },\n            { no: 3, name: \"envelope_data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.batchOpName = \"\";\n        message.endpointsType = 0;\n        message.envelopeData = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string batch_op_name */ 1:\n                    message.batchOpName = reader.string();\n                    break;\n                case /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type */ 2:\n                    message.endpointsType = reader.int32();\n                    break;\n                case /* bytes envelope_data */ 3:\n                    message.envelopeData = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string batch_op_name = 1; */\n        if (message.batchOpName !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.batchOpName);\n        /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type = 2; */\n        if (message.endpointsType !== 0)\n            writer.tag(2, WireType.Varint).int32(message.endpointsType);\n        /* bytes envelope_data = 3; */\n        if (message.envelopeData.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.envelopeData);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.DebugEnvelopeDataRecord\n */\nexport const DebugEnvelopeDataRecord = new DebugEnvelopeDataRecord$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass DebugEnvelopeMetadataRecord$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.DebugEnvelopeMetadataRecord\", [\n            { no: 1, name: \"checksum\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 2, name: \"batch_op_names\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.checksum = 0n;\n        message.batchOpNames = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* int64 checksum */ 1:\n                    message.checksum = reader.int64().toBigInt();\n                    break;\n                case /* repeated string batch_op_names */ 2:\n                    message.batchOpNames.push(reader.string());\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* int64 checksum = 1; */\n        if (message.checksum !== 0n)\n            writer.tag(1, WireType.Varint).int64(message.checksum);\n        /* repeated string batch_op_names = 2; */\n        for (let i = 0; i < message.batchOpNames.length; i++)\n            writer.tag(2, WireType.LengthDelimited).string(message.batchOpNames[i]);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.DebugEnvelopeMetadataRecord\n */\nexport const DebugEnvelopeMetadataRecord = new DebugEnvelopeMetadataRecord$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PutEnvelopeRequest$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.PutEnvelopeRequest\", [\n            { no: 1, name: \"batch_op_name\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"endpoints_type\", kind: \"enum\", T: () => [\"sysio.opp.debugging.DebugOutpostEndpointsType\", DebugOutpostEndpointsType, \"DEBUG_OUTPOST_ENDPOINTS_TYPE_\"] },\n            { no: 3, name: \"envelope_data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.batchOpName = \"\";\n        message.endpointsType = 0;\n        message.envelopeData = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string batch_op_name */ 1:\n                    message.batchOpName = reader.string();\n                    break;\n                case /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type */ 2:\n                    message.endpointsType = reader.int32();\n                    break;\n                case /* bytes envelope_data */ 3:\n                    message.envelopeData = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string batch_op_name = 1; */\n        if (message.batchOpName !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.batchOpName);\n        /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type = 2; */\n        if (message.endpointsType !== 0)\n            writer.tag(2, WireType.Varint).int32(message.endpointsType);\n        /* bytes envelope_data = 3; */\n        if (message.envelopeData.length)\n            writer.tag(3, WireType.LengthDelimited).bytes(message.envelopeData);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.PutEnvelopeRequest\n */\nexport const PutEnvelopeRequest = new PutEnvelopeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass PutEnvelopeResponse$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.PutEnvelopeResponse\", [\n            { no: 1, name: \"key\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"data_existed\", kind: \"scalar\", T: 8 /*ScalarType.BOOL*/ },\n            { no: 3, name: \"batch_op_names\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.key = \"\";\n        message.dataExisted = false;\n        message.batchOpNames = [];\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string key */ 1:\n                    message.key = reader.string();\n                    break;\n                case /* bool data_existed */ 2:\n                    message.dataExisted = reader.bool();\n                    break;\n                case /* repeated string batch_op_names */ 3:\n                    message.batchOpNames.push(reader.string());\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string key = 1; */\n        if (message.key !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.key);\n        /* bool data_existed = 2; */\n        if (message.dataExisted !== false)\n            writer.tag(2, WireType.Varint).bool(message.dataExisted);\n        /* repeated string batch_op_names = 3; */\n        for (let i = 0; i < message.batchOpNames.length; i++)\n            writer.tag(3, WireType.LengthDelimited).string(message.batchOpNames[i]);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.PutEnvelopeResponse\n */\nexport const PutEnvelopeResponse = new PutEnvelopeResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ListEnvelopesRequest$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.ListEnvelopesRequest\", [\n            { no: 1, name: \"epoch_start\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 2, name: \"epoch_end\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"endpoints_type\", kind: \"enum\", T: () => [\"sysio.opp.debugging.DebugOutpostEndpointsType\", DebugOutpostEndpointsType, \"DEBUG_OUTPOST_ENDPOINTS_TYPE_\"] },\n            { no: 4, name: \"timestamp_start\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 5, name: \"timestamp_end\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.epochStart = 0;\n        message.epochEnd = 0;\n        message.endpointsType = 0;\n        message.timestampStart = 0n;\n        message.timestampEnd = 0n;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* uint32 epoch_start */ 1:\n                    message.epochStart = reader.uint32();\n                    break;\n                case /* uint32 epoch_end */ 2:\n                    message.epochEnd = reader.uint32();\n                    break;\n                case /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type */ 3:\n                    message.endpointsType = reader.int32();\n                    break;\n                case /* int64 timestamp_start */ 4:\n                    message.timestampStart = reader.int64().toBigInt();\n                    break;\n                case /* int64 timestamp_end */ 5:\n                    message.timestampEnd = reader.int64().toBigInt();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* uint32 epoch_start = 1; */\n        if (message.epochStart !== 0)\n            writer.tag(1, WireType.Varint).uint32(message.epochStart);\n        /* uint32 epoch_end = 2; */\n        if (message.epochEnd !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.epochEnd);\n        /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type = 3; */\n        if (message.endpointsType !== 0)\n            writer.tag(3, WireType.Varint).int32(message.endpointsType);\n        /* int64 timestamp_start = 4; */\n        if (message.timestampStart !== 0n)\n            writer.tag(4, WireType.Varint).int64(message.timestampStart);\n        /* int64 timestamp_end = 5; */\n        if (message.timestampEnd !== 0n)\n            writer.tag(5, WireType.Varint).int64(message.timestampEnd);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.ListEnvelopesRequest\n */\nexport const ListEnvelopesRequest = new ListEnvelopesRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass EnvelopeListEntry$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.EnvelopeListEntry\", [\n            { no: 1, name: \"key\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"endpoints_type\", kind: \"enum\", T: () => [\"sysio.opp.debugging.DebugOutpostEndpointsType\", DebugOutpostEndpointsType, \"DEBUG_OUTPOST_ENDPOINTS_TYPE_\"] },\n            { no: 4, name: \"checksum\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"batch_op_names\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },\n            { no: 6, name: \"timestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"data_size\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.key = \"\";\n        message.epochIndex = 0;\n        message.endpointsType = 0;\n        message.checksum = \"\";\n        message.batchOpNames = [];\n        message.timestamp = 0n;\n        message.dataSize = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string key */ 1:\n                    message.key = reader.string();\n                    break;\n                case /* uint32 epoch_index */ 2:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type */ 3:\n                    message.endpointsType = reader.int32();\n                    break;\n                case /* string checksum */ 4:\n                    message.checksum = reader.string();\n                    break;\n                case /* repeated string batch_op_names */ 5:\n                    message.batchOpNames.push(reader.string());\n                    break;\n                case /* int64 timestamp */ 6:\n                    message.timestamp = reader.int64().toBigInt();\n                    break;\n                case /* uint32 data_size */ 7:\n                    message.dataSize = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string key = 1; */\n        if (message.key !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.key);\n        /* uint32 epoch_index = 2; */\n        if (message.epochIndex !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.epochIndex);\n        /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type = 3; */\n        if (message.endpointsType !== 0)\n            writer.tag(3, WireType.Varint).int32(message.endpointsType);\n        /* string checksum = 4; */\n        if (message.checksum !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.checksum);\n        /* repeated string batch_op_names = 5; */\n        for (let i = 0; i < message.batchOpNames.length; i++)\n            writer.tag(5, WireType.LengthDelimited).string(message.batchOpNames[i]);\n        /* int64 timestamp = 6; */\n        if (message.timestamp !== 0n)\n            writer.tag(6, WireType.Varint).int64(message.timestamp);\n        /* uint32 data_size = 7; */\n        if (message.dataSize !== 0)\n            writer.tag(7, WireType.Varint).uint32(message.dataSize);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.EnvelopeListEntry\n */\nexport const EnvelopeListEntry = new EnvelopeListEntry$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass ListEnvelopesResponse$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.ListEnvelopesResponse\", [\n            { no: 1, name: \"entries\", kind: \"message\", repeat: 2 /*RepeatType.UNPACKED*/, T: () => EnvelopeListEntry },\n            { no: 2, name: \"total\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.entries = [];\n        message.total = 0;\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* repeated sysio.opp.debugging.EnvelopeListEntry entries */ 1:\n                    message.entries.push(EnvelopeListEntry.internalBinaryRead(reader, reader.uint32(), options));\n                    break;\n                case /* uint32 total */ 2:\n                    message.total = reader.uint32();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* repeated sysio.opp.debugging.EnvelopeListEntry entries = 1; */\n        for (let i = 0; i < message.entries.length; i++)\n            EnvelopeListEntry.internalBinaryWrite(message.entries[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();\n        /* uint32 total = 2; */\n        if (message.total !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.total);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.ListEnvelopesResponse\n */\nexport const ListEnvelopesResponse = new ListEnvelopesResponse$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass GetEnvelopeRequest$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.GetEnvelopeRequest\", [\n            { no: 1, name: \"key\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.key = \"\";\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string key */ 1:\n                    message.key = reader.string();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string key = 1; */\n        if (message.key !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.key);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.GetEnvelopeRequest\n */\nexport const GetEnvelopeRequest = new GetEnvelopeRequest$Type();\n// @generated message type with reflection information, may provide speed optimized methods\nclass GetEnvelopeResponse$Type extends MessageType {\n    constructor() {\n        super(\"sysio.opp.debugging.GetEnvelopeResponse\", [\n            { no: 1, name: \"key\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 2, name: \"epoch_index\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 3, name: \"endpoints_type\", kind: \"enum\", T: () => [\"sysio.opp.debugging.DebugOutpostEndpointsType\", DebugOutpostEndpointsType, \"DEBUG_OUTPOST_ENDPOINTS_TYPE_\"] },\n            { no: 4, name: \"checksum\", kind: \"scalar\", T: 9 /*ScalarType.STRING*/ },\n            { no: 5, name: \"batch_op_names\", kind: \"scalar\", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },\n            { no: 6, name: \"timestamp\", kind: \"scalar\", T: 3 /*ScalarType.INT64*/, L: 0 /*LongType.BIGINT*/ },\n            { no: 7, name: \"data_size\", kind: \"scalar\", T: 13 /*ScalarType.UINT32*/ },\n            { no: 8, name: \"envelope_data\", kind: \"scalar\", T: 12 /*ScalarType.BYTES*/ }\n        ]);\n    }\n    create(value) {\n        const message = globalThis.Object.create((this.messagePrototype));\n        message.key = \"\";\n        message.epochIndex = 0;\n        message.endpointsType = 0;\n        message.checksum = \"\";\n        message.batchOpNames = [];\n        message.timestamp = 0n;\n        message.dataSize = 0;\n        message.envelopeData = new Uint8Array(0);\n        if (value !== undefined)\n            reflectionMergePartial(this, message, value);\n        return message;\n    }\n    internalBinaryRead(reader, length, options, target) {\n        let message = target ?? this.create(), end = reader.pos + length;\n        while (reader.pos < end) {\n            let [fieldNo, wireType] = reader.tag();\n            switch (fieldNo) {\n                case /* string key */ 1:\n                    message.key = reader.string();\n                    break;\n                case /* uint32 epoch_index */ 2:\n                    message.epochIndex = reader.uint32();\n                    break;\n                case /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type */ 3:\n                    message.endpointsType = reader.int32();\n                    break;\n                case /* string checksum */ 4:\n                    message.checksum = reader.string();\n                    break;\n                case /* repeated string batch_op_names */ 5:\n                    message.batchOpNames.push(reader.string());\n                    break;\n                case /* int64 timestamp */ 6:\n                    message.timestamp = reader.int64().toBigInt();\n                    break;\n                case /* uint32 data_size */ 7:\n                    message.dataSize = reader.uint32();\n                    break;\n                case /* bytes envelope_data */ 8:\n                    message.envelopeData = reader.bytes();\n                    break;\n                default:\n                    let u = options.readUnknownField;\n                    if (u === \"throw\")\n                        throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);\n                    let d = reader.skip(wireType);\n                    if (u !== false)\n                        (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);\n            }\n        }\n        return message;\n    }\n    internalBinaryWrite(message, writer, options) {\n        /* string key = 1; */\n        if (message.key !== \"\")\n            writer.tag(1, WireType.LengthDelimited).string(message.key);\n        /* uint32 epoch_index = 2; */\n        if (message.epochIndex !== 0)\n            writer.tag(2, WireType.Varint).uint32(message.epochIndex);\n        /* sysio.opp.debugging.DebugOutpostEndpointsType endpoints_type = 3; */\n        if (message.endpointsType !== 0)\n            writer.tag(3, WireType.Varint).int32(message.endpointsType);\n        /* string checksum = 4; */\n        if (message.checksum !== \"\")\n            writer.tag(4, WireType.LengthDelimited).string(message.checksum);\n        /* repeated string batch_op_names = 5; */\n        for (let i = 0; i < message.batchOpNames.length; i++)\n            writer.tag(5, WireType.LengthDelimited).string(message.batchOpNames[i]);\n        /* int64 timestamp = 6; */\n        if (message.timestamp !== 0n)\n            writer.tag(6, WireType.Varint).int64(message.timestamp);\n        /* uint32 data_size = 7; */\n        if (message.dataSize !== 0)\n            writer.tag(7, WireType.Varint).uint32(message.dataSize);\n        /* bytes envelope_data = 8; */\n        if (message.envelopeData.length)\n            writer.tag(8, WireType.LengthDelimited).bytes(message.envelopeData);\n        let u = options.writeUnknownFields;\n        if (u !== false)\n            (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);\n        return writer;\n    }\n}\n/**\n * @generated MessageType for protobuf message sysio.opp.debugging.GetEnvelopeResponse\n */\nexport const GetEnvelopeResponse = new GetEnvelopeResponse$Type();\n//# sourceMappingURL=debugging.js.map", "import { asOption } from \"@3fv/prelude-ts\"\nimport { DebugOutpostEndpointsType } from \"@wireio/opp-typescript-models\"\n\n/**\n * Decomposed form of a canonical envelope storage key. Filenames are written\n * by the server as `<epochIndex>-<endpointsKey>-<checksum>.{data,metadata}`.\n */\nexport interface ParsedEnvelopeStorageKey {\n  /** The original, fully-formed key (round-trips back to the filename). */\n  key: string\n  /** Numeric epoch index extracted from the zero-padded prefix. */\n  epochIndex: number\n  /** Endpoints enum variant name as stored in the filename. */\n  endpointsKey: string\n  /** Truncated sha256 checksum suffix. */\n  checksum: string\n}\n\n/**\n * Parse a storage key of the form `\"<epochIndex>-<endpointsKey>-<checksum>\"`.\n *\n * @param key Filename-style storage key without its extension.\n * @returns The parsed components, or `null` if the key is malformed.\n *\n * @example parseEnvelopeStorageKey(\"00000042-OUTPOST_ETHEREUM_DEPOT-abc123def4567890\")\n */\nexport function parseEnvelopeStorageKey(\n  key: string\n): ParsedEnvelopeStorageKey | null {\n  const firstDash = key.indexOf(\"-\")\n  if (firstDash < 0) return null\n  const lastDash = key.lastIndexOf(\"-\")\n  if (lastDash <= firstDash) return null\n\n  const epochStr = key.substring(0, firstDash),\n    endpointsKey = key.substring(firstDash + 1, lastDash),\n    checksum = key.substring(lastDash + 1),\n    epochIndex = parseInt(epochStr, 10)\n  if (isNaN(epochIndex)) return null\n\n  return { key, epochIndex, endpointsKey, checksum }\n}\n\n/**\n * Reverse-map an endpoints enum name back to its numeric value. Falls back\n * to `UNKNOWN` when no matching member exists — e.g. a peer on an older\n * protobuf schema wrote a name we no longer recognize.\n */\nexport function resolveEndpointsType(\n  endpointsKey: string\n): DebugOutpostEndpointsType {\n  return asOption(\n    (DebugOutpostEndpointsType as Record<string, unknown>)[endpointsKey]\n  )\n    .filter((v): v is number => typeof v === \"number\")\n    .map(v => v as DebugOutpostEndpointsType)\n    .getOrElse(DebugOutpostEndpointsType.UNKNOWN)\n}\n", "/**\n * Convert a freshly-decoded protobuf message into a JSON-serializable shape:\n * BigInts become decimal strings; Uint8Arrays become base64. Recursive walk\n * rather than a `JSON.stringify` replacer because `Buffer.prototype.toJSON`\n * fires BEFORE the replacer and converts a `Buffer` into\n * `{ type: \"Buffer\", data: number[] }` — which then never matches the\n * Uint8Array check. Walking the tree directly catches every Uint8Array\n * (including any `Buffer` subclass instances protobuf-ts may surface) and\n * is shared between the server (when emitting envelope events over WS)\n * and the local-disk client (when reading the same files directly).\n */\nexport function plainify<T>(value: T): T {\n  return walk(value) as T\n}\n\nfunction walk(value: unknown): unknown {\n  if (value === null || value === undefined) return value\n  if (typeof value === \"bigint\") return value.toString()\n  if (value instanceof Uint8Array) return Buffer.from(value).toString(\"base64\")\n  if (Array.isArray(value)) return value.map(walk)\n  if (typeof value === \"object\") {\n    return Object.fromEntries(\n      Object.entries(value as Record<string, unknown>).map(([k, v]) => [\n        k,\n        walk(v)\n      ])\n    )\n  }\n  return value\n}\n", "import type {\n  DebugEnvelopeMetadataRecord,\n  DebugOutpostEndpointsType,\n  Envelope\n} from \"@wireio/opp-typescript-models\"\n\n/**\n * Serializable view of a decoded envelope pair — plain objects, no BigInt\n * or Uint8Array. BigInts have been stringified and bytes base64-encoded\n * by the producer (server or local-disk client) before being handed off\n * to the consumer (UI / Redux).\n */\nexport interface DebugOPPEnvelopeRecord {\n  /** 16-hex-char truncated sha256 — matches server filename encoding. */\n  checksum: string\n  /** Outpost-endpoint enum value parsed from the filename. */\n  endpointsType: DebugOutpostEndpointsType\n  /** Decoded envelope. Batch-op names live on `metadata.batchOpNames`. */\n  envelope: Envelope\n  /** Decoded metadata record — includes `batchOpNames`. */\n  metadata: DebugEnvelopeMetadataRecord\n  /**\n   * Unix-ms timestamp the producer decoded this envelope. Drives\n   * \"when was this last seen\" displays in consumer UIs.\n   */\n  receivedAt: number\n}\n\n/** Per-epoch cache entry. Multiple envelopes per epoch under fraud scenarios. */\nexport interface DebugOPPEpochRecord {\n  epoch: number\n  envelopes: DebugOPPEnvelopeRecord[]\n}\n\n/** Identity-mapped event kind for the `EnvelopeWatch` stream subscription. */\nexport enum EnvelopeEventKind {\n  /** Replayed event for a record that already existed when the subscription opened. */\n  Hydrated = \"hydrated\",\n  /** Newly-observed record after the subscription opened. */\n  Added = \"added\"\n}\n\n/**\n * Stream event for the `EnvelopeWatch` subscription. Hydration arrives in\n * its own kind so the consumer can choose to bulk-dispatch the initial set\n * vs. append individual records once the stream is live.\n */\nexport interface EnvelopeEvent {\n  /** Whether the record predates the subscription or was observed live. */\n  kind: EnvelopeEventKind\n  /** Epoch index of the envelope's source side. */\n  epoch: number\n  /** Plainified envelope record. */\n  record: DebugOPPEnvelopeRecord\n}\n\n/** Empty params object for the `EnvelopeWatch` stream subscription. */\nexport interface EnvelopeWatchStreamParams {}\n\n/**\n * Request body for `OPP.LoadRecords` — bulk-read of fully-decoded envelope\n * records grouped by epoch. Drives \"load older\" affordances in client UIs;\n * unlike `EnvelopeList` (lightweight metadata only) this returns the\n * plainified envelope + metadata payloads in a single round trip.\n */\nexport interface LoadEnvelopeRecordsRequest {\n  /** Inclusive lower-bound epoch index. Omit for no lower bound. */\n  epochStart?: number\n  /** Inclusive upper-bound epoch index. Omit for no upper bound. */\n  epochEnd?: number\n  /** Restrict to one endpoints variant. Omit (or pass `UNKNOWN`) for every variant. */\n  endpointsType?: DebugOutpostEndpointsType\n}\n\n/** Response body for `OPP.LoadRecords`. */\nexport interface LoadEnvelopeRecordsResponse {\n  /** Decoded epoch records, sorted ascending by `epoch`. */\n  records: DebugOPPEpochRecord[]\n}\n", "import type { ClusterStateNode } from \"@wireio/cluster-tool-shared\"\n\n/** Classifies a monitored process for display grouping and fallback handling. */\nexport enum PidSourceKind {\n  Bios = \"bios\",\n  Producer = \"producer\",\n  BatchOperator = \"batch-operator\",\n  Underwriter = \"underwriter\",\n  Anvil = \"anvil\",\n  SolanaValidator = \"solana-validator\"\n}\n\n/**\n * A pid-file-backed process known to the debugging surface. Carries enough\n * information that both the local-disk client and the network client can\n * treat the source as opaque (using `label` as the identifier) while still\n * surfacing diagnostic context.\n */\nexport interface PidSource {\n  /** Filename label (no `.pid` suffix); always matches what ProcessManager wrote. */\n  label: string\n  /** Absolute pid file path on the producing machine. Server-side path; remote clients treat as opaque. */\n  pidPath: string\n  /** Directory containing the pid file; usable for log discovery. */\n  directory: string\n  /** Semantic classification. */\n  kind: PidSourceKind\n  /** Present when the source is one of the WIRE node arrays. */\n  node?: ClusterStateNode\n}\n\n/** Per-label kernel-liveness snapshot from a pid-file probe. */\nexport interface ProcessLivenessSnapshot {\n  /** Source label that this snapshot pertains to. */\n  label: string\n  /** Pid read from the pid file. `null` when the pid file is missing or malformed. */\n  pid: number | null\n  /** Result of `process.kill(pid, 0)` — `true` when the kernel reports the process exists. */\n  alive: boolean\n  /** Wall-clock time (ms since epoch) the snapshot was produced. */\n  lastCheckedAt: number\n  /** First poll where `alive` flipped to `false`. `null` when still alive or never observed alive. */\n  exitedAt: number | null\n}\n\n/**\n * Diff event emitted by a process-monitor stream subscription. The server\n * runs the snapshot loop and pushes only what changed; the client merges\n * `setSnapshots` into its current state and drops `removedLabels`.\n */\nexport interface ProcessLivenessEvent {\n  /** Snapshots whose values changed (or were observed for the first time). */\n  setSnapshots: ProcessLivenessSnapshot[]\n  /** Labels whose pid file disappeared since the prior tick. */\n  removedLabels: string[]\n}\n\n/** Empty request body for `Processes.List`. */\nexport interface ListProcessesRequest {}\n\n/** Response body for `Processes.List`. */\nexport interface ListProcessesResponse {\n  /** Every monitored pid-file-backed source the server can see right now. */\n  sources: PidSource[]\n}\n\n/** Request body for `Processes.GetLiveness`. */\nexport interface GetProcessLivenessRequest {\n  /** Subset of source labels to probe. Empty array probes every known source. */\n  labels: string[]\n}\n\n/** Response body for `Processes.GetLiveness`. */\nexport interface GetProcessLivenessResponse {\n  /** Liveness snapshots, one per requested label. */\n  snapshots: ProcessLivenessSnapshot[]\n}\n\n/** Empty params object for the `ProcessLiveness` stream subscription. */\nexport interface ProcessLivenessStreamParams {}\n", "import { MessageType } from \"@protobuf-ts/runtime\"\nimport {\n  PutEnvelopeRequest,\n  PutEnvelopeResponse,\n  ListEnvelopesRequest,\n  ListEnvelopesResponse,\n  GetEnvelopeRequest,\n  GetEnvelopeResponse\n} from \"@wireio/opp-typescript-models\"\n\nimport type {\n  GetClusterConfigRequest,\n  GetClusterConfigResponse,\n  GetClusterStateRequest,\n  GetClusterStateResponse\n} from \"../cluster/index.js\"\nimport type {\n  LoadEnvelopeRecordsRequest,\n  LoadEnvelopeRecordsResponse\n} from \"../opp/index.js\"\nimport type {\n  ListProcessesRequest,\n  ListProcessesResponse,\n  GetProcessLivenessRequest,\n  GetProcessLivenessResponse\n} from \"../processes/index.js\"\nimport type {\n  LogStatRequest,\n  LogStatResponse,\n  LogReadRequest,\n  LogReadResponse\n} from \"../logs/index.js\"\n\n// ---------------------------------------------------------------------------\n//  API path constants — single source of truth for all URI strings\n// ---------------------------------------------------------------------------\n\n/** protobuf-ts JSON parser options reused on both ends of the OPP wire. */\nexport const FROM_JSON_OPTIONS = {\n    ignoreUnknownFields: true\n  } as const,\n  /** protobuf-ts JSON encoder options reused on both ends of the OPP wire. */\n  TO_JSON_OPTIONS = { enumAsInteger: true, emitDefaultValues: true } as const\n\nexport namespace ApiPaths {\n  /** Health-check route mounted on the server. */\n  export const Ping = \"/api/ping\" as const\n\n  /**\n   * OPP envelope debug feature. Routes carry **protobuf** request/response\n   * bodies — the only feature in this package that does so, because the\n   * data on the wire originates from the sysio `external_debugging_plugin`\n   * which writes protobuf.\n   */\n  export namespace OPP {\n    export const Endpoint = \"/api/opp\" as const\n\n    /**\n     * RPC method names exposed under the OPP feature section.\n     *\n     * Values double as JSON-RPC `method` strings on the wire and as keys in\n     * `HandlerMap` / `HandlerTypeMappings`. Renaming a member is a breaking\n     * wire-protocol change — bump the server version and update every client.\n     */\n    export enum Methods {\n      Envelope = \"Envelope\",\n      EnvelopeList = \"EnvelopeList\",\n      EnvelopeGet = \"EnvelopeGet\",\n      /**\n       * Bulk-fetch fully-decoded envelope records grouped by epoch. Plain\n       * JSON body — sits on the OPP endpoint alongside the protobuf\n       * methods, dispatched through the same JSON-RPC mount but without\n       * a `HandlerTypeMappings` entry.\n       */\n      LoadRecords = \"LoadRecords\"\n    }\n  }\n\n  /**\n   * Cluster information feature. Surfaces `cluster-config.json` and\n   * `cluster-state.json` over JSON-RPC for clients that don't share the\n   * filesystem with the server. Bodies are plain TypeScript interfaces —\n   * no protobuf.\n   */\n  export namespace Cluster {\n    export const Endpoint = \"/api/cluster\" as const\n\n    export enum Methods {\n      GetConfig = \"Cluster.GetConfig\",\n      GetState = \"Cluster.GetState\"\n    }\n  }\n\n  /**\n   * Process monitor feature. Lists pid-file-backed sources and probes\n   * kernel liveness for them. Bodies are plain TypeScript interfaces.\n   */\n  export namespace Processes {\n    export const Endpoint = \"/api/processes\" as const\n\n    export enum Methods {\n      List = \"Processes.List\",\n      GetLiveness = \"Processes.GetLiveness\"\n    }\n  }\n\n  /**\n   * Log read feature. Random-access reads + stat queries against log files\n   * inside the server's `--cluster-path`. The matching live-tail topic is\n   * exposed via the WebSocket transport (see `StreamTopic.LogTail`).\n   */\n  export namespace Logs {\n    export const Endpoint = \"/api/logs\" as const\n\n    export enum Methods {\n      GetStat = \"Logs.GetStat\",\n      Read = \"Logs.Read\"\n    }\n  }\n\n  /**\n   * WebSocket endpoint for stream subscriptions. Frame protocol lives in\n   * `StreamProtocol.ts`. Path MUST match between server upgrade handler\n   * and client connection URL.\n   */\n  export namespace Stream {\n    export const Path = \"/api/stream\" as const\n  }\n}\n\n// ---------------------------------------------------------------------------\n//  Core handler abstraction — no express dependency.\n//  R = request body type, T = response type.\n//  The server narrows the second/third args to express Request/Response;\n//  this definition only needs to carry R and T for type inference.\n// ---------------------------------------------------------------------------\n\nexport type Handler<R = unknown, T = unknown> = (\n  body: R,\n  ...args: any[]\n) => Promise<T> | T\n\n// ---------------------------------------------------------------------------\n//  Handler map — pure type definition, no runtime object.\n//  The server provides implementations that conform to this interface.\n//  The client infers request/response types from it.\n// ---------------------------------------------------------------------------\n\nexport interface HandlerMap {\n  // OPP — protobuf bodies (preserved verbatim)\n  [ApiPaths.OPP.Methods.Envelope]: Handler<\n    PutEnvelopeRequest,\n    PutEnvelopeResponse\n  >\n  [ApiPaths.OPP.Methods.EnvelopeList]: Handler<\n    ListEnvelopesRequest,\n    ListEnvelopesResponse\n  >\n  [ApiPaths.OPP.Methods.EnvelopeGet]: Handler<\n    GetEnvelopeRequest,\n    GetEnvelopeResponse\n  >\n  // OPP — plain JSON bulk-load of decoded records (no protobuf body)\n  [ApiPaths.OPP.Methods.LoadRecords]: Handler<\n    LoadEnvelopeRecordsRequest,\n    LoadEnvelopeRecordsResponse\n  >\n\n  // Cluster — plain JSON bodies\n  [ApiPaths.Cluster.Methods.GetConfig]: Handler<\n    GetClusterConfigRequest,\n    GetClusterConfigResponse\n  >\n  [ApiPaths.Cluster.Methods.GetState]: Handler<\n    GetClusterStateRequest,\n    GetClusterStateResponse\n  >\n\n  // Processes — plain JSON bodies\n  [ApiPaths.Processes.Methods.List]: Handler<\n    ListProcessesRequest,\n    ListProcessesResponse\n  >\n  [ApiPaths.Processes.Methods.GetLiveness]: Handler<\n    GetProcessLivenessRequest,\n    GetProcessLivenessResponse\n  >\n\n  // Logs — plain JSON bodies\n  [ApiPaths.Logs.Methods.GetStat]: Handler<LogStatRequest, LogStatResponse>\n  [ApiPaths.Logs.Methods.Read]: Handler<LogReadRequest, LogReadResponse>\n}\n\nexport type MessageTypeCtor<T extends object = any> = { new (): MessageType<T> }\n\n/**\n * Runtime protobuf type table — used by the OPP JSON-RPC dispatcher to\n * `fromJson` request bodies and `toJson` responses. Keyed only by the\n * **protobuf** OPP methods; `LoadRecords` is plain JSON and intentionally\n * absent so the dispatcher's \"no entry → plain JSON path\" branch picks\n * it up. Adding an entry for a non-protobuf method here would break\n * runtime serialization.\n */\nexport const HandlerTypeMappings: {\n  [ApiPaths.OPP.Methods.Envelope]: [MessageType<any>, MessageType<any>]\n  [ApiPaths.OPP.Methods.EnvelopeList]: [MessageType<any>, MessageType<any>]\n  [ApiPaths.OPP.Methods.EnvelopeGet]: [MessageType<any>, MessageType<any>]\n} = {\n  [ApiPaths.OPP.Methods.Envelope]: [PutEnvelopeRequest, PutEnvelopeResponse],\n  [ApiPaths.OPP.Methods.EnvelopeList]: [\n    ListEnvelopesRequest,\n    ListEnvelopesResponse\n  ],\n  [ApiPaths.OPP.Methods.EnvelopeGet]: [GetEnvelopeRequest, GetEnvelopeResponse]\n} as const\n\n// ---------------------------------------------------------------------------\n//  Inferred utility types — used by server addRoute(), client, and tests\n// ---------------------------------------------------------------------------\n\n/** Every method name carried by the unary RPC contract. */\nexport type HandlerURIType = keyof HandlerMap\n\n/** Extract the full handler function type for a given URI. */\nexport type InferredHandlerType<U extends HandlerURIType> = HandlerMap[U]\n\n/** Extract the request body type for a given URI. */\nexport type InferredRequestType<U extends HandlerURIType> =\n  HandlerMap[U] extends Handler<infer R, unknown> ? R : never\n\n/** Extract the response type for a given URI. */\nexport type InferredResponseType<U extends HandlerURIType> =\n  HandlerMap[U] extends Handler<unknown, infer T> ? T : never\n\n/** Lift result envelope shape used by some legacy callers. */\nexport type JsonRPCResult<T extends {} = any> = {\n  status: number\n  body: T\n  id: number\n}\n", "import type {\n  ProcessLivenessEvent,\n  ProcessLivenessStreamParams\n} from \"../processes/index.js\"\nimport type { LogTailEvent, LogTailParams } from \"../logs/index.js\"\nimport type {\n  EnvelopeEvent,\n  EnvelopeWatchStreamParams\n} from \"../opp/index.js\"\n\n// ---------------------------------------------------------------------------\n//  Topics\n// ---------------------------------------------------------------------------\n\n/**\n * Closed set of subscription topics carried over the WebSocket transport.\n * Identity-mapped string enum so values are readable in logs and stable\n * across the wire — renaming a member is a breaking protocol change.\n */\nexport enum StreamTopic {\n  ProcessLiveness = \"process-liveness\",\n  LogTail = \"log-tail\",\n  EnvelopeWatch = \"envelope-watch\"\n}\n\n/**\n * Static map of topic → params/event types. The compile-time single source\n * of truth for what a topic accepts and what it emits — both server and\n * client narrow off this interface at the point of subscribe / dispatch.\n */\nexport interface StreamMap {\n  [StreamTopic.ProcessLiveness]: {\n    params: ProcessLivenessStreamParams\n    event: ProcessLivenessEvent\n  }\n  [StreamTopic.LogTail]: {\n    params: LogTailParams\n    event: LogTailEvent\n  }\n  [StreamTopic.EnvelopeWatch]: {\n    params: EnvelopeWatchStreamParams\n    event: EnvelopeEvent\n  }\n}\n\n/** Extract the params type for a given topic. */\nexport type InferredStreamParams<T extends StreamTopic> = StreamMap[T][\"params\"]\n\n/** Extract the event payload type for a given topic. */\nexport type InferredStreamEvent<T extends StreamTopic> = StreamMap[T][\"event\"]\n\n// ---------------------------------------------------------------------------\n//  Frame discriminators + protocol-level enums\n// ---------------------------------------------------------------------------\n\n/**\n * Identity-mapped discriminator for every WebSocket frame the protocol\n * supports. The frame `type` field is checked against this enum first;\n * anything else is treated as an `ErrorFrame` with `Unknown` code.\n */\nexport enum StreamFrameType {\n  Subscribe = \"subscribe\",\n  Subscribed = \"subscribed\",\n  Event = \"event\",\n  Unsubscribe = \"unsubscribe\",\n  Closed = \"closed\",\n  Error = \"error\"\n}\n\n/**\n * Reason a subscription closed. Typed (rather than free-form strings) so\n * client UIs can branch on the cause — e.g. retrying after a transient\n * server-side fault but surfacing a user-visible warning on\n * `UnsupportedTopic`.\n */\nexport enum ClosedReason {\n  ClientRequested = \"client-requested\",\n  ServerShutdown = \"server-shutdown\",\n  UnsupportedTopic = \"unsupported-topic\",\n  InvalidParams = \"invalid-params\",\n  InternalError = \"internal-error\"\n}\n\n/** Protocol-level error codes carried on `ErrorFrame`. Mirrors JSON-RPC convention where applicable. */\nexport enum StreamErrorCode {\n  /** Frame failed to parse as JSON or did not match any known shape. */\n  ParseError = \"parse-error\",\n  /** Frame was structurally valid but its `type` is unknown. */\n  InvalidFrameType = \"invalid-frame-type\",\n  /** Subscribe frame referenced a topic the server doesn't expose. */\n  UnknownTopic = \"unknown-topic\",\n  /** Subscribe frame's params didn't match the topic's params shape. */\n  InvalidParams = \"invalid-params\",\n  /** Server failed to start the subscription for an unspecified reason. */\n  Internal = \"internal-error\"\n}\n\n// ---------------------------------------------------------------------------\n//  Frame types\n// ---------------------------------------------------------------------------\n\n/**\n * Subscribe to a topic. `id` is allocated by the client and echoed on every\n * subsequent frame for that subscription so multiplexing routes correctly.\n */\nexport interface SubscribeFrame<T extends StreamTopic = StreamTopic> {\n  type: StreamFrameType.Subscribe\n  /** Client-allocated subscription id. */\n  id: number\n  /** Topic the client wants to subscribe to. */\n  topic: T\n  /** Topic-specific params; type narrows via `InferredStreamParams<T>`. */\n  params: InferredStreamParams<T>\n}\n\n/** Server acknowledgment that a subscription is live. */\nexport interface SubscribedFrame {\n  type: StreamFrameType.Subscribed\n  /** Echoes the `id` from the matching {@link SubscribeFrame}. */\n  id: number\n}\n\n/** Server-pushed event for an active subscription. */\nexport interface EventFrame<T extends StreamTopic = StreamTopic> {\n  type: StreamFrameType.Event\n  /** Echoes the subscription `id`. */\n  id: number\n  /** Topic-specific event payload; type narrows via `InferredStreamEvent<T>`. */\n  payload: InferredStreamEvent<T>\n}\n\n/** Client-initiated cancellation of a subscription. */\nexport interface UnsubscribeFrame {\n  type: StreamFrameType.Unsubscribe\n  /** Echoes the subscription `id`. */\n  id: number\n}\n\n/**\n * Server-initiated subscription teardown. Sent in response to an\n * `Unsubscribe` (with `ClientRequested`), at server shutdown, or on a\n * fault that doesn't warrant a connection-level error.\n */\nexport interface ClosedFrame {\n  type: StreamFrameType.Closed\n  /** Echoes the subscription `id`. */\n  id: number\n  /** Why the subscription closed. */\n  reason: ClosedReason\n}\n\n/** Connection-level fault — not associated with a specific subscription. */\nexport interface ErrorFrame {\n  type: StreamFrameType.Error\n  /** Typed error code for branching. */\n  code: StreamErrorCode\n  /** Human-readable message; safe to surface in logs. */\n  message: string\n}\n\n/** Discriminated union over every frame the protocol supports. */\nexport type StreamFrame =\n  | SubscribeFrame<StreamTopic>\n  | SubscribedFrame\n  | EventFrame<StreamTopic>\n  | UnsubscribeFrame\n  | ClosedFrame\n  | ErrorFrame\n\n// ---------------------------------------------------------------------------\n//  Type guards\n// ---------------------------------------------------------------------------\n\n/**\n * Structural guard for a parsed `StreamFrame`. Accepts only objects whose\n * `type` matches a known `StreamFrameType`. Doesn't validate per-variant\n * fields beyond the discriminant — the per-variant guards below tighten\n * that when the dispatcher cares.\n */\nexport function isStreamFrame(value: unknown): value is StreamFrame {\n  if (typeof value !== \"object\" || value === null) return false\n  const t = (value as { type?: unknown }).type\n  return (\n    t === StreamFrameType.Subscribe ||\n    t === StreamFrameType.Subscribed ||\n    t === StreamFrameType.Event ||\n    t === StreamFrameType.Unsubscribe ||\n    t === StreamFrameType.Closed ||\n    t === StreamFrameType.Error\n  )\n}\n\n/** Narrow a `StreamFrame` to a `SubscribeFrame`. */\nexport function isSubscribeFrame(\n  frame: StreamFrame\n): frame is SubscribeFrame<StreamTopic> {\n  return frame.type === StreamFrameType.Subscribe\n}\n\n/** Narrow a `StreamFrame` to a `SubscribedFrame`. */\nexport function isSubscribedFrame(frame: StreamFrame): frame is SubscribedFrame {\n  return frame.type === StreamFrameType.Subscribed\n}\n\n/** Narrow a `StreamFrame` to an `EventFrame`. */\nexport function isEventFrame(\n  frame: StreamFrame\n): frame is EventFrame<StreamTopic> {\n  return frame.type === StreamFrameType.Event\n}\n\n/** Narrow a `StreamFrame` to an `UnsubscribeFrame`. */\nexport function isUnsubscribeFrame(\n  frame: StreamFrame\n): frame is UnsubscribeFrame {\n  return frame.type === StreamFrameType.Unsubscribe\n}\n\n/** Narrow a `StreamFrame` to a `ClosedFrame`. */\nexport function isClosedFrame(frame: StreamFrame): frame is ClosedFrame {\n  return frame.type === StreamFrameType.Closed\n}\n\n/** Narrow a `StreamFrame` to an `ErrorFrame`. */\nexport function isErrorFrame(frame: StreamFrame): frame is ErrorFrame {\n  return frame.type === StreamFrameType.Error\n}\n", "/**\n * Symbols used internally within ts-pattern to construct and discriminate\n * Guard, Not, and Select, and AnonymousSelect patterns\n *\n * Symbols have the advantage of not appearing in auto-complete suggestions in\n * user defined patterns, and eliminate the risk of property\n * overlap between ts-pattern internals and user defined patterns.\n *\n * These symbols have to be visible to tsc for type inference to work, but\n * users should not import them\n * @module\n * @private\n * @internal\n */\n\nexport const matcher = Symbol.for('@ts-pattern/matcher');\nexport type matcher = typeof matcher;\n\nexport const unset = Symbol.for('@ts-pattern/unset');\nexport type unset = typeof unset;\n\nexport const isVariadic = Symbol.for('@ts-pattern/isVariadic');\nexport type isVariadic = typeof isVariadic;\n\n// can't be a symbol because this key has to be enumerable.\nexport const anonymousSelectKey = '@ts-pattern/anonymous-select-key';\nexport type anonymousSelectKey = typeof anonymousSelectKey;\n\nexport const override = Symbol.for('@ts-pattern/override');\nexport type override = typeof override;\n", "/**\n * @module\n * @private\n * @internal\n */\n\nimport * as symbols from './symbols';\nimport { SelectionType } from '../types/FindSelected';\nimport { Pattern, Matcher, MatcherType, AnyMatcher } from '../types/Pattern';\n\n// @internal\nexport const isObject = (value: unknown): value is Object =>\n  Boolean(value && typeof value === 'object');\n\n//   @internal\nexport const isMatcher = (\n  x: unknown\n): x is Matcher<unknown, unknown, MatcherType, SelectionType> => {\n  const pattern = x as Matcher<unknown, unknown, MatcherType, SelectionType>;\n  return pattern && !!pattern[symbols.matcher];\n};\n\n// @internal\nconst isOptionalPattern = (\n  x: unknown\n): x is Matcher<unknown, unknown, 'optional', SelectionType> => {\n  return isMatcher(x) && x[symbols.matcher]().matcherType === 'optional';\n};\n\n// tells us if the value matches a given pattern.\n// @internal\nexport const matchPattern = (\n  pattern: any,\n  value: any,\n  select: (key: string, value: unknown) => void\n): boolean => {\n  if (isMatcher(pattern)) {\n    const matcher = pattern[symbols.matcher]();\n    const { matched, selections } = matcher.match(value);\n    if (matched && selections) {\n      Object.keys(selections).forEach((key) => select(key, selections[key]));\n    }\n    return matched;\n  }\n\n  if (isObject(pattern)) {\n    if (!isObject(value)) return false;\n\n    // Tuple pattern\n    if (Array.isArray(pattern)) {\n      if (!Array.isArray(value)) return false;\n      let startPatterns = [];\n      let endPatterns = [];\n      let variadicPatterns: AnyMatcher[] = [];\n\n      for (const i of pattern.keys()) {\n        const subpattern = pattern[i];\n        if (isMatcher(subpattern) && subpattern[symbols.isVariadic]) {\n          variadicPatterns.push(subpattern);\n        } else if (variadicPatterns.length) {\n          endPatterns.push(subpattern);\n        } else {\n          startPatterns.push(subpattern);\n        }\n      }\n\n      if (variadicPatterns.length) {\n        if (variadicPatterns.length > 1) {\n          throw new Error(\n            `Pattern error: Using \\`...P.array(...)\\` several times in a single pattern is not allowed.`\n          );\n        }\n\n        if (value.length < startPatterns.length + endPatterns.length) {\n          return false;\n        }\n\n        const startValues = value.slice(0, startPatterns.length);\n        const endValues =\n          endPatterns.length === 0 ? [] : value.slice(-endPatterns.length);\n        const middleValues = value.slice(\n          startPatterns.length,\n          endPatterns.length === 0 ? Infinity : -endPatterns.length\n        );\n\n        return (\n          startPatterns.every((subPattern, i) =>\n            matchPattern(subPattern, startValues[i], select)\n          ) &&\n          endPatterns.every((subPattern, i) =>\n            matchPattern(subPattern, endValues[i], select)\n          ) &&\n          (variadicPatterns.length === 0\n            ? true\n            : matchPattern(variadicPatterns[0], middleValues, select))\n        );\n      }\n\n      return pattern.length === value.length\n        ? pattern.every((subPattern, i) =>\n            matchPattern(subPattern, value[i], select)\n          )\n        : false;\n    }\n\n    return Reflect.ownKeys(pattern).every((k): boolean => {\n      const subPattern = pattern[k];\n\n      return (\n        (k in value || isOptionalPattern(subPattern)) &&\n        matchPattern(subPattern, value[k], select)\n      );\n    });\n  }\n\n  return Object.is(value, pattern);\n};\n\n// @internal\nexport const getSelectionKeys = (pattern: any): string[] => {\n  if (isObject(pattern)) {\n    if (isMatcher(pattern)) {\n      return pattern[symbols.matcher]().getSelectionKeys?.() ?? [];\n    }\n    if (Array.isArray(pattern)) return flatMap(pattern, getSelectionKeys);\n    return flatMap(Object.values(pattern), getSelectionKeys);\n  }\n  return [];\n};\n\n// @internal\nexport const flatMap = <a, b>(\n  xs: readonly a[],\n  f: (v: a) => readonly b[]\n): b[] => xs.reduce<b[]>((acc, x) => acc.concat(f(x)), []);\n", "import { MatchedValue, Pattern, UnknownProperties } from './types/Pattern';\nimport * as P from './patterns';\nimport { matchPattern } from './internals/helpers';\nimport { WithDefault } from './types/helpers';\n\n/**\n * This constraint allows using additional properties\n * in object patterns. See \"should allow targetting unknown properties\"\n * unit test in `is-matching.test.ts`.\n */\ntype PatternConstraint<T> = T extends readonly any[]\n  ? P.Pattern<T>\n  : T extends object\n  ? P.Pattern<T> & UnknownProperties\n  : P.Pattern<T>;\n\n/**\n * `isMatching` takes pattern and returns a **type guard** function, cheching if a value matches this pattern.\n *\n * [Read  documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n *  const hasName = isMatching({ name: P.string })\n *\n *  declare let input: unknown\n *\n *  if (hasName(input)) {\n *    // `input` inferred as { name: string }\n *    return input.name\n *  }\n */\nexport function isMatching<const p extends Pattern<unknown>>(\n  pattern: p\n): (value: unknown) => value is P.infer<p>;\n/**\n * `isMatching` takes pattern and a value and checks if the value matches this pattern.\n *\n * [Read  documentation for `isMatching` on GitHub](https://github.com/gvergnaud/ts-pattern#ismatching)\n *\n * @example\n *  declare let input: unknown\n *\n *  if (isMatching({ name: P.string }, input)) {\n *    // `input` inferred as { name: string }\n *    return input.name\n *  }\n */\nexport function isMatching<const T, const P extends PatternConstraint<T>>(\n  pattern: P,\n  value: T\n): value is T & WithDefault<P.narrow<T, P>, P.infer<P>>;\n\nexport function isMatching<const p extends Pattern<any>>(\n  ...args: [pattern: p, value?: any]\n): boolean | ((vale: any) => boolean) {\n  if (args.length === 1) {\n    const [pattern] = args;\n    return (value: any): value is MatchedValue<any, P.infer<p>> =>\n      matchPattern(pattern, value, () => {});\n  }\n  if (args.length === 2) {\n    const [pattern, value] = args;\n    return matchPattern(pattern, value, () => {});\n  }\n\n  throw new Error(\n    `isMatching wasn't given the right number of arguments: expected 1 or 2, received ${args.length}.`\n  );\n}\n", "/**\n * The `P` module contains patterns for primitive types, wildcards and\n * other pattern-matching utilities.\n *\n * @module\n */\n\nimport { matchPattern, getSelectionKeys, flatMap } from './internals/helpers';\nimport * as symbols from './internals/symbols';\nimport { matcher } from './internals/symbols';\nimport { isMatching } from './is-matching';\nimport { ExtractPreciseValue } from './types/ExtractPreciseValue';\nimport { Fn } from './types/helpers';\nimport { InvertPattern } from './types/InvertPattern';\nimport {\n  Pattern,\n  UnknownValuePattern,\n  OptionalP,\n  ArrayP,\n  MapP,\n  SetP,\n  AndP,\n  OrP,\n  NotP,\n  GuardP,\n  SelectP,\n  AnonymousSelectP,\n  GuardExcludeP,\n  CustomP,\n  Matcher,\n  StringPattern,\n  UnknownPattern,\n  NumberPattern,\n  BooleanPattern,\n  BigIntPattern,\n  NullishPattern,\n  SymbolPattern,\n  Chainable,\n  BigIntChainable,\n  NumberChainable,\n  StringChainable,\n  ArrayChainable,\n  Variadic,\n  NonNullablePattern,\n  RecordP,\n} from './types/Pattern';\n\nexport type {\n  /**\n   * `Pattern<T>` is the type of all patterns\n   * that can match a value of type `T`.\n   */\n  Pattern,\n\n  /**\n   * `unstable_Fn` can be used to created a\n   * a Matchable instance – a custom type that\n   * can be used as a pattern.\n   *\n   * @experimental This feature is unstable.\n   */\n  Fn as unstable_Fn,\n};\n\nexport { matcher };\n\n/**\n * A `Matchable` is an object implementing\n * the Matcher Protocol. It must have a `[P.matcher]: P.Matcher<NarrowFn>`\n * key, which defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n *  [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matchable<\n  narrowedOrFn,\n  input = unknown,\n  pattern = never\n> = CustomP<input, pattern, narrowedOrFn>;\n\n/**\n * A `Matcher` is an object with `match` function, which\n * defines how this object should be matched by TS-Pattern.\n *\n * @experimental This feature is unstable.\n *\n * @example\n * ```ts\n * class Some<T> implements P.unstable_Matchable {\n *  [P.matcher](): P.unstable_Matcher<Some<T>>\n * }\n * ```\n */\nexport type unstable_Matcher<\n  narrowedOrFn,\n  input = unknown,\n  pattern = never\n> = ReturnType<CustomP<input, pattern, narrowedOrFn>[matcher]>;\n\n/**\n * `P.infer<typeof somePattern>` will return the type of the value\n * matched by this pattern.\n *\n * [Read the documentation for `P.infer` on GitHub](https://github.com/gvergnaud/ts-pattern#pinfer)\n *\n * @example\n * const userPattern = { name: P.string }\n * type User = P.infer<typeof userPattern>\n */\nexport type infer<pattern> = InvertPattern<NoInfer<pattern>, unknown>;\n\n/**\n * `P.narrow<Input, Pattern>` will narrow the input type to only keep\n * the set of values that are compatible with the provided pattern type.\n *\n * [Read the documentation for `P.narrow` on GitHub](https://github.com/gvergnaud/ts-pattern#pnarrow)\n *\n * @example\n * type Input = ['a' | 'b' | 'c', 'a' | 'b' | 'c']\n * const Pattern = ['a', P.union('a', 'b')] as const\n *\n * type Narrowed = P.narrow<Input, typeof Pattern>\n * //     ^? ['a', 'a' | 'b']\n */\nexport type narrow<input, pattern> = ExtractPreciseValue<\n  input,\n  InvertPattern<pattern, input>\n>;\n\nfunction chainable<pattern extends Matcher<any, any, any, any, any>>(\n  pattern: pattern\n): Chainable<pattern> {\n  return Object.assign(pattern, {\n    optional: () => optional(pattern),\n    and: (p2: any) => intersection(pattern, p2),\n    or: (p2: any) => union(pattern, p2),\n    select: (key: any) =>\n      key === undefined ? select(pattern) : select(key, pattern),\n  }) as Chainable<pattern>;\n}\n\nconst variadic = <pattern extends {}>(pattern: pattern): Variadic<pattern> =>\n  Object.assign(pattern, {\n    [Symbol.iterator](): Iterator<pattern, void, undefined> {\n      let i = 0;\n      const variadicPattern = Object.assign(pattern, {\n        [symbols.isVariadic]: true,\n      });\n      const values: IteratorResult<pattern, void>[] = [\n        { value: variadicPattern, done: false },\n        { done: true, value: undefined },\n      ];\n      return {\n        next: () => values[i++] ?? values.at(-1)!,\n      };\n    },\n  });\n\nfunction arrayChainable<pattern extends Matcher<any, any, any, any, any>>(\n  pattern: pattern\n): ArrayChainable<pattern> {\n  return Object.assign(variadic(pattern), {\n    optional: () => arrayChainable(optional(pattern)),\n    select: (key: any) =>\n      arrayChainable(\n        key === undefined ? select(pattern) : select(key, pattern)\n      ),\n  }) as any;\n}\n\n/**\n * `P.optional(subpattern)` takes a sub pattern and returns a pattern which matches if the\n * key is undefined or if it is defined and the sub pattern matches its value.\n *\n * [Read the documentation for `P.optional` on GitHub](https://github.com/gvergnaud/ts-pattern#poptional-patterns)\n *\n * @example\n *  match(value)\n *   .with({ greeting: P.optional('Hello') }, () => 'will match { greeting?: \"Hello\" }')\n */\nexport function optional<\n  input,\n  const pattern extends unknown extends input\n    ? UnknownValuePattern\n    : Pattern<input>\n>(pattern: pattern): Chainable<OptionalP<input, pattern>, 'optional'> {\n  return chainable({\n    [matcher]() {\n      return {\n        match: <UnknownInput>(value: UnknownInput | input) => {\n          let selections: Record<string, unknown[]> = {};\n          const selector = (key: string, value: any) => {\n            selections[key] = value;\n          };\n          if (value === undefined) {\n            getSelectionKeys(pattern).forEach((key) =>\n              selector(key, undefined)\n            );\n            return { matched: true, selections };\n          }\n          const matched = matchPattern(pattern, value, selector);\n          return { matched, selections };\n        },\n        getSelectionKeys: () => getSelectionKeys(pattern),\n        matcherType: 'optional',\n      };\n    },\n  });\n}\n\ntype UnwrapArray<xs> = xs extends readonly (infer x)[] ? x : never;\n\ntype UnwrapSet<xs> = xs extends Set<infer x> ? x : never;\n\ntype UnwrapMapKey<xs> = xs extends Map<infer k, any> ? k : never;\n\ntype UnwrapMapValue<xs> = xs extends Map<any, infer v> ? v : never;\n\ntype UnwrapRecordKey<xs> = xs extends Record<infer k, any> ? k : never;\n\ntype UnwrapRecordValue<xs> = xs extends Record<any, infer v> ? v : never;\n\ntype WithDefault<a, b> = [a] extends [never] ? b : a;\n\n/**\n * `P.array(subpattern)` takes a sub pattern and returns a pattern, which matches\n * arrays if all their elements match the sub pattern.\n *\n * [Read the documentation for `P.array` on GitHub](https://github.com/gvergnaud/ts-pattern#parray-patterns)\n *\n * @example\n *  match(value)\n *   .with({ users: P.array({ name: P.string }) }, () => 'will match { name: string }[]')\n */\nexport function array<input>(): ArrayChainable<ArrayP<input, unknown>>;\nexport function array<\n  input,\n  const pattern extends Pattern<WithDefault<UnwrapArray<input>, unknown>>\n>(pattern: pattern): ArrayChainable<ArrayP<input, pattern>>;\nexport function array(\n  ...args: [pattern?: any]\n): ArrayChainable<ArrayP<any, any>> {\n  return arrayChainable({\n    [matcher]() {\n      return {\n        match: (value: any) => {\n          if (!Array.isArray(value)) return { matched: false };\n\n          if (args.length === 0) return { matched: true };\n\n          const pattern = args[0];\n          let selections: Record<string, unknown[]> = {};\n\n          if (value.length === 0) {\n            getSelectionKeys(pattern).forEach((key) => {\n              selections[key] = [];\n            });\n            return { matched: true, selections };\n          }\n\n          const selector = (key: string, value: unknown) => {\n            selections[key] = (selections[key] || []).concat([value]);\n          };\n\n          const matched = value.every((v) =>\n            matchPattern(pattern, v, selector)\n          );\n\n          return { matched, selections };\n        },\n        getSelectionKeys: () =>\n          args.length === 0 ? [] : getSelectionKeys(args[0]),\n      };\n    },\n  });\n}\n\n/**\n * `P.set(subpattern)` takes a sub pattern and returns a pattern that matches\n * sets if all their elements match the sub pattern.\n *\n * [Read `P.set` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pset-patterns)\n *\n * @example\n *  match(value)\n *   .with({ users: P.set(P.string) }, () => 'will match Set<string>')\n */\nexport function set<input>(): Chainable<SetP<input, unknown>>;\nexport function set<\n  input,\n  const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(pattern: pattern): Chainable<SetP<input, pattern>>;\nexport function set<\n  input,\n  const pattern extends Pattern<WithDefault<UnwrapSet<input>, unknown>>\n>(...args: [pattern?: pattern]): Chainable<SetP<input, pattern>> {\n  return chainable({\n    [matcher]() {\n      return {\n        match: <UnknownInput>(value: UnknownInput | input) => {\n          if (!(value instanceof Set)) return { matched: false };\n\n          let selections: Record<string, unknown[]> = {};\n\n          if (value.size === 0) {\n            return { matched: true, selections };\n          }\n\n          if (args.length === 0) return { matched: true };\n\n          const selector = (key: string, value: unknown) => {\n            selections[key] = (selections[key] || []).concat([value]);\n          };\n\n          const pattern = args[0];\n\n          const matched = setEvery(value, (v) =>\n            matchPattern(pattern, v, selector)\n          );\n\n          return { matched, selections };\n        },\n        getSelectionKeys: () =>\n          args.length === 0 ? [] : getSelectionKeys(args[0]),\n      };\n    },\n  });\n}\n\nconst setEvery = <T>(set: Set<T>, predicate: (value: T) => boolean) => {\n  for (const value of set) {\n    if (predicate(value)) continue;\n    return false;\n  }\n  return true;\n};\n\n/**\n * `P.map(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on maps where all elements inside the map match those two\n * subpatterns.\n *\n * [Read `P.map` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#pmap-patterns)\n *\n * @example\n *  match(value)\n *   .with({ users: P.map(P.map(P.string, P.number)) }, (map) => `map's type is Map<string, number>`)\n */\nexport function map<input>(): Chainable<MapP<input, unknown, unknown>>;\nexport function map<\n  input,\n  const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n  const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(patternKey: pkey, patternValue: pvalue): Chainable<MapP<input, pkey, pvalue>>;\nexport function map<\n  input,\n  const pkey extends Pattern<WithDefault<UnwrapMapKey<input>, unknown>>,\n  const pvalue extends Pattern<WithDefault<UnwrapMapValue<input>, unknown>>\n>(\n  ...args: [patternKey?: pkey, patternValue?: pvalue]\n): Chainable<MapP<input, pkey, pvalue>> {\n  return chainable({\n    [matcher]() {\n      return {\n        match: <UnknownInput>(value: UnknownInput | input) => {\n          if (!(value instanceof Map)) return { matched: false };\n\n          let selections: Record<string, unknown[]> = {};\n\n          if (value.size === 0) {\n            return { matched: true, selections };\n          }\n\n          const selector = (key: string, value: unknown) => {\n            selections[key] = (selections[key] || []).concat([value]);\n          };\n\n          if (args.length === 0) return { matched: true };\n          if (args.length === 1) {\n            throw new Error(\n              `\\`P.map\\` wasn\\'t given enough arguments. Expected (key, value), received ${args[0]?.toString()}`\n            );\n          }\n          const [patternKey, patternValue] = args;\n\n          const matched = mapEvery(value, (v, k) => {\n            const keyMatch = matchPattern(patternKey, k, selector);\n            const valueMatch = matchPattern(patternValue, v, selector);\n            return keyMatch && valueMatch;\n          });\n\n          return { matched, selections };\n        },\n        getSelectionKeys: () =>\n          args.length === 0\n            ? []\n            : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n      };\n    },\n  });\n}\n\nconst mapEvery = <K, T>(\n  map: Map<K, T>,\n  predicate: (value: T, key: K) => boolean\n) => {\n  for (const [key, value] of map.entries()) {\n    if (predicate(value, key)) continue;\n    return false;\n  }\n  return true;\n};\n\n/**\n * `P.record(keyPattern, valuePattern)` takes a subpattern to match against the\n * key, a subpattern to match against the value and returns a pattern that\n * matches on objects where all entries match those two\n * subpatterns.\n *\n * [Read `P.record` documentation on GitHub](https://github.com/gvergnaud/ts-pattern#precord-patterns)\n *\n * @example\n *  match(value)\n *   .with({ users: P.record(P.string, P.number) }, (obj) => `object's type is Record<string, number>`)\n */\nexport function record<\n  input,\n  const pvalue extends Pattern<UnwrapRecordValue<input>>\n>(patternValue: pvalue): Chainable<RecordP<input, StringPattern, pvalue>>;\nexport function record<\n  input,\n  const pkey extends Pattern<WithDefault<UnwrapRecordKey<input>, PropertyKey>>,\n  const pvalue extends Pattern<WithDefault<UnwrapRecordValue<input>, unknown>>\n>(\n  patternKey: pkey,\n  patternValue?: pvalue\n): Chainable<RecordP<input, pkey, pvalue>>;\nexport function record(\n  ...args: [patternKey?: unknown, patternValue?: unknown]\n): Chainable<RecordP<unknown, unknown, unknown>> {\n  return chainable({\n    [matcher]() {\n      return {\n        match: (value: unknown) => {\n          if (\n            value === null ||\n            typeof value !== 'object' ||\n            Array.isArray(value)\n          ) {\n            return { matched: false };\n          }\n\n          if (args.length === 0) {\n            throw new Error(\n              `\\`P.record\\` wasn\\'t given enough arguments. Expected (value) or (key, value), received ${args[0]?.toString()}`\n            );\n          }\n\n          let selections: Record<string, unknown[]> = {};\n\n          const selector = (key: string, value: unknown) => {\n            selections[key] = (selections[key] || []).concat([value]);\n          };\n\n          const [patternKey, patternValue] =\n            args.length === 1 ? [string, args[0]] : args;\n\n          const matched = recordEvery(value, (k, v) => {\n            // since number keys are coerced to strings, we need to coerce them back to numbers if the pattern is `number`\n            const coercedKey =\n              typeof k === 'string' && !Number.isNaN(Number(k))\n                ? Number(k)\n                : null;\n\n            const coercedKeyMatch =\n              coercedKey !== null\n                ? matchPattern(patternKey, coercedKey, selector)\n                : false;\n\n            const keyMatch = matchPattern(patternKey, k, selector);\n\n            const valueMatch = matchPattern(patternValue, v, selector);\n\n            return (keyMatch || coercedKeyMatch) && valueMatch;\n          });\n\n          return { matched, selections };\n        },\n        getSelectionKeys: () =>\n          args.length === 0\n            ? []\n            : [...getSelectionKeys(args[0]), ...getSelectionKeys(args[1])],\n      };\n    },\n  });\n}\n\nconst recordEvery = <K extends PropertyKey, T>(\n  record: Record<K, T>,\n  predicate: (key: K, value: T) => boolean\n) => {\n  const keys = Reflect.ownKeys(record);\n  for (const key of keys) {\n    if (predicate(key as K, record[key as K] as T)) continue;\n    return false;\n  }\n  return true;\n};\n\n/**\n * `P.intersection(...patterns)` returns a pattern which matches\n * only if **every** patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.intersection` on GitHub](https://github.com/gvergnaud/ts-pattern#pintersection-patterns)\n *\n * @example\n *  match(value)\n *   .with(\n *     {\n *       user: P.intersection(\n *         { firstname: P.string },\n *         { lastname: P.string },\n *         { age: P.when(age => age > 21) }\n *       )\n *     },\n *     ({ user }) => 'will match { firstname: string, lastname: string, age: number } if age > 21'\n *   )\n */\nexport function intersection<\n  input,\n  const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<AndP<input, patterns>> {\n  return chainable({\n    [matcher]: () => ({\n      match: (value) => {\n        let selections: Record<string, unknown[]> = {};\n        const selector = (key: string, value: any) => {\n          selections[key] = value;\n        };\n        const matched = (patterns as readonly UnknownValuePattern[]).every(\n          (p) => matchPattern(p, value, selector)\n        );\n        return { matched, selections };\n      },\n      getSelectionKeys: () =>\n        flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n      matcherType: 'and',\n    }),\n  });\n}\n\n/**\n * `P.union(...patterns)` returns a pattern which matches\n * if **at least one** of the patterns provided in parameter match the input.\n *\n * [Read the documentation for `P.union` on GitHub](https://github.com/gvergnaud/ts-pattern#punion-patterns)\n *\n * @example\n *  match(value)\n *   .with(\n *     { type: P.union('a', 'b', 'c') },\n *     ({ type }) => 'will match { type: \"a\" | \"b\" | \"c\" }'\n *   )\n */\nexport function union<\n  input,\n  const patterns extends readonly [Pattern<input>, ...Pattern<input>[]]\n>(...patterns: patterns): Chainable<OrP<input, patterns>> {\n  return chainable({\n    [matcher]: () => ({\n      match: <UnknownInput>(value: UnknownInput | input) => {\n        let selections: Record<string, unknown[]> = {};\n        const selector = (key: string, value: any) => {\n          selections[key] = value;\n        };\n        flatMap(\n          patterns as readonly UnknownValuePattern[],\n          getSelectionKeys\n        ).forEach((key) => selector(key, undefined));\n        const matched = (patterns as readonly UnknownValuePattern[]).some((p) =>\n          matchPattern(p, value, selector)\n        );\n        return { matched, selections };\n      },\n      getSelectionKeys: () =>\n        flatMap(patterns as readonly UnknownValuePattern[], getSelectionKeys),\n      matcherType: 'or',\n    }),\n  });\n}\n\n/**\n * `P.not(pattern)` returns a pattern which matches if the sub pattern\n * doesn't match.\n *\n * [Read the documentation for `P.not` on GitHub](https://github.com/gvergnaud/ts-pattern#pnot-patterns)\n *\n * @example\n *  match<{ a: string | number }>(value)\n *   .with({ a: P.not(P.string) }, (x) => 'will match { a: number }'\n *   )\n */\n\nexport function not<\n  input,\n  const pattern extends Pattern<input> | UnknownValuePattern\n>(pattern: pattern): Chainable<NotP<input, pattern>> {\n  return chainable({\n    [matcher]: () => ({\n      match: <UnknownInput>(value: UnknownInput | input) => ({\n        matched: !matchPattern(pattern, value, () => {}),\n      }),\n      getSelectionKeys: () => [],\n      matcherType: 'not',\n    }),\n  });\n}\n\n/**\n * `P.when((value) => boolean)` returns a pattern which matches\n * if the predicate returns true for the current input.\n *\n * [Read the documentation for `P.when` on GitHub](https://github.com/gvergnaud/ts-pattern#pwhen-patterns)\n *\n * @example\n *  match<{ age: number }>(value)\n *   .with({ age: P.when(age => age > 21) }, (x) => 'will match if value.age > 21'\n *   )\n */\nexport function when<input, predicate extends (value: input) => unknown>(\n  predicate: predicate\n): GuardP<\n  input,\n  predicate extends (value: any) => value is infer narrowed ? narrowed : never\n>;\nexport function when<input, narrowed extends input, excluded>(\n  predicate: (input: input) => input is narrowed\n): GuardExcludeP<input, narrowed, excluded>;\nexport function when<input, predicate extends (value: input) => unknown>(\n  predicate: predicate\n): GuardP<\n  input,\n  predicate extends (value: any) => value is infer narrowed ? narrowed : never\n> {\n  return {\n    [matcher]: () => ({\n      match: <UnknownInput>(value: UnknownInput | input) => ({\n        matched: Boolean(predicate(value as input)),\n      }),\n    }),\n  };\n}\n\n/**\n * `P.select()` is a pattern which will always match,\n * and will inject the selected piece of input in the handler function.\n *\n * [Read the documentation for `P.select` on GitHub](https://github.com/gvergnaud/ts-pattern#pselect-patterns)\n *\n * @example\n *  match<{ age: number }>(value)\n *   .with({ age: P.select() }, (age) => 'age: number'\n *   )\n */\nexport function select(): Chainable<AnonymousSelectP, 'select' | 'or' | 'and'>;\nexport function select<\n  input,\n  const patternOrKey extends\n    | string\n    | (unknown extends input ? UnknownValuePattern : Pattern<input>)\n>(\n  patternOrKey: patternOrKey\n): patternOrKey extends string\n  ? Chainable<SelectP<patternOrKey, 'select' | 'or' | 'and'>>\n  : Chainable<\n      SelectP<symbols.anonymousSelectKey, input, patternOrKey>,\n      'select' | 'or' | 'and'\n    >;\nexport function select<\n  input,\n  const pattern extends unknown extends input\n    ? UnknownValuePattern\n    : Pattern<input>,\n  const k extends string\n>(\n  key: k,\n  pattern: pattern\n): Chainable<SelectP<k, input, pattern>, 'select' | 'or' | 'and'>;\nexport function select(\n  ...args: [keyOrPattern?: unknown | string, pattern?: unknown]\n): Chainable<SelectP<string>, 'select' | 'or' | 'and'> {\n  const key: string | undefined =\n    typeof args[0] === 'string' ? args[0] : undefined;\n  const pattern: unknown =\n    args.length === 2\n      ? args[1]\n      : typeof args[0] === 'string'\n      ? undefined\n      : args[0];\n  return chainable({\n    [matcher]() {\n      return {\n        match: (value) => {\n          let selections: Record<string, unknown> = {\n            [key ?? symbols.anonymousSelectKey]: value,\n          };\n          const selector = (key: string, value: any) => {\n            selections[key] = value;\n          };\n          return {\n            matched:\n              pattern === undefined\n                ? true\n                : matchPattern(pattern, value, selector),\n            selections: selections,\n          };\n        },\n        getSelectionKeys: () =>\n          [key ?? symbols.anonymousSelectKey].concat(\n            pattern === undefined ? [] : getSelectionKeys(pattern)\n          ),\n      };\n    },\n  });\n}\n\nfunction isUnknown(x: unknown): x is unknown {\n  return true;\n}\n\nfunction isNumber<T>(x: T | number): x is number {\n  return typeof x === 'number';\n}\n\nfunction isString<T>(x: T | string): x is string {\n  return typeof x === 'string';\n}\n\nfunction isBoolean<T>(x: T | boolean): x is boolean {\n  return typeof x === 'boolean';\n}\n\nfunction isBigInt<T>(x: T | bigint): x is bigint {\n  return typeof x === 'bigint';\n}\n\nfunction isSymbol<T>(x: T | symbol): x is symbol {\n  return typeof x === 'symbol';\n}\n\nfunction isNullish<T>(x: T | null | undefined): x is null | undefined {\n  return x === null || x === undefined;\n}\n\nfunction isNonNullable(x: unknown): x is {} {\n  return x !== null && x !== undefined;\n}\n\ntype AnyConstructor = abstract new (...args: any[]) => any;\n\nfunction isInstanceOf<T extends AnyConstructor>(classConstructor: T) {\n  return (val: unknown): val is InstanceType<T> =>\n    val instanceof classConstructor;\n}\n\n/**\n * `P.any` is a wildcard pattern, matching **any value**.\n *\n * [Read the documentation for `P.any` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n *  match(value)\n *   .with(P.any, () => 'will always match')\n */\nexport const any: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P.unknown` is a wildcard pattern, matching **unknown value**.\n *\n * [Read the documentation for `P.unknown` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n *  match(value)\n *   .with(P.unknown, () => 'will always match')\n */\nexport const unknown: UnknownPattern = chainable(when(isUnknown));\n\n/**\n * `P._` is a wildcard pattern, matching **any value**.\n * It's an alias to `P.any`.\n *\n * [Read the documentation for `P._` on GitHub](https://github.com/gvergnaud/ts-pattern#p_-wildcard)\n *\n * @example\n *  match(value)\n *   .with(P._, () => 'will always match')\n */\nexport const _ = any;\n\n/**\n * `P.string.startsWith(start)` is a pattern, matching **strings** starting with `start`.\n *\n * [Read the documentation for `P.string.startsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringstartsWith)\n *\n * @example\n *  match(value)\n *   .with(P.string.startsWith('A'), () => 'value starts with an A')\n */\n\nconst startsWith = <input, const start extends string>(\n  start: start\n): GuardP<input, `${start}${string}`> =>\n  when((value) => isString(value) && value.startsWith(start));\n\n/**\n * `P.string.endsWith(end)` is a pattern, matching **strings** ending with `end`.\n *\n * [Read the documentation for `P.string.endsWith` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringendsWith)\n *\n * @example\n *  match(value)\n *   .with(P.string.endsWith('!'), () => 'value ends with an !')\n */\nconst endsWith = <input, const end extends string>(\n  end: end\n): GuardP<input, `${string}${end}`> =>\n  when((value) => isString(value) && value.endsWith(end));\n\n/**\n * `P.string.minLength(min)` is a pattern, matching **strings** with at least `min` characters.\n *\n * [Read the documentation for `P.string.minLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringminLength)\n *\n * @example\n *  match(value)\n *   .with(P.string.minLength(10), () => 'string with more length >= 10')\n */\nconst minLength = <const min extends number>(min: min) =>\n  when((value) => isString(value) && value.length >= min);\n\n/**\n * `P.string.length(len)` is a pattern, matching **strings** with exactly `len` characters.\n *\n * [Read the documentation for `P.string.length` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringlength)\n *\n * @example\n *  match(value)\n *   .with(P.string.length(10), () => 'strings with length === 10')\n */\nconst length = <const len extends number>(len: len) =>\n  when((value) => isString(value) && value.length === len);\n\n/**\n * `P.string.maxLength(max)` is a pattern, matching **strings** with at most `max` characters.\n *\n * [Read the documentation for `P.string.maxLength` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringmaxLength)\n *\n * @example\n *  match(value)\n *   .with(P.string.maxLength(10), () => 'string with more length <= 10')\n */\nconst maxLength = <const max extends number>(max: max) =>\n  when((value) => isString(value) && value.length <= max);\n\n/**\n * `P.string.includes(substr)` is a pattern, matching **strings** containing `substr`.\n *\n * [Read the documentation for `P.string.includes` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringincludes)\n *\n * @example\n *  match(value)\n *   .with(P.string.includes('http'), () => 'value contains http')\n */\nconst includes = <input, const substr extends string>(\n  substr: substr\n): GuardExcludeP<input, string, never> =>\n  when((value) => isString(value) && value.includes(substr));\n\n/**\n * `P.string.regex(expr)` is a pattern, matching **strings** that `expr` regular expression.\n *\n * [Read the documentation for `P.string.regex` on GitHub](https://github.com/gvergnaud/ts-pattern#pstringregex)\n *\n * @example\n *  match(value)\n *   .with(P.string.regex(/^https?:\\/\\//), () => 'url')\n */\nconst regex = <input, const expr extends string | RegExp>(\n  expr: expr\n): GuardExcludeP<input, string, never> =>\n  when((value) => isString(value) && Boolean(value.match(expr)));\n\nconst stringChainable = <pattern extends Matcher<any, any, any, any, any>>(\n  pattern: pattern\n): StringChainable<pattern> =>\n  Object.assign(chainable(pattern), {\n    startsWith: (str: string) =>\n      stringChainable(intersection(pattern, startsWith(str))),\n    endsWith: (str: string) =>\n      stringChainable(intersection(pattern, endsWith(str))),\n    minLength: (min: number) =>\n      stringChainable(intersection(pattern, minLength(min))),\n    length: (len: number) =>\n      stringChainable(intersection(pattern, length(len))),\n    maxLength: (max: number) =>\n      stringChainable(intersection(pattern, maxLength(max))),\n    includes: (str: string) =>\n      stringChainable(intersection(pattern, includes(str))),\n    regex: (str: string) => stringChainable(intersection(pattern, regex(str))),\n  }) as any;\n\n/**\n * `P.string` is a wildcard pattern, matching any **string**.\n *\n * [Read the documentation for `P.string` on GitHub](https://github.com/gvergnaud/ts-pattern#pstring-wildcard)\n *\n * @example\n *  match(value)\n *   .with(P.string, () => 'will match on strings')\n */\nexport const string: StringPattern = stringChainable(when(isString));\n\n/**\n * `P.number.between(min, max)` matches **numbers** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.number.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n *  match(value)\n *   .with(P.number.between(0, 10), () => '0 <= numbers <= 10')\n */\nconst between = <input, const min extends number, const max extends number>(\n  min: min,\n  max: max\n): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && min <= value && max >= value);\n\n/**\n * `P.number.lt(max)` matches **numbers** smaller than `max`.\n *\n * [Read the documentation for `P.number.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n *  match(value)\n *   .with(P.number.lt(10), () => 'numbers < 10')\n */\nconst lt = <input, const max extends number>(\n  max: max\n): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value < max);\n\n/**\n * `P.number.gt(min)` matches **numbers** greater than `min`.\n *\n * [Read the documentation for `P.number.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n *  match(value)\n *   .with(P.number.gt(10), () => 'numbers > 10')\n */\nconst gt = <input, const min extends number>(\n  min: min\n): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value > min);\n\n/**\n * `P.number.lte(max)` matches **numbers** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.number.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n *  match(value)\n *   .with(P.number.lte(10), () => 'numbers <= 10')\n */\nconst lte = <input, const max extends number>(\n  max: max\n): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value <= max);\n\n/**\n * `P.number.gte(min)` matches **numbers** greater than or equal to `min`.\n *\n * [Read the documentation for `P.number.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergte)\n *\n * @example\n *  match(value)\n *   .with(P.number.gte(10), () => 'numbers >= 10')\n */\nconst gte = <input, const min extends number>(\n  min: min\n): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value >= min);\n\n/**\n * `P.number.int()` matches **integer** numbers.\n *\n * [Read the documentation for `P.number.int()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberint)\n *\n * @example\n *  match(value)\n *   .with(P.number.int(), () => 'an integer')\n */\nconst int = <input>(): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && Number.isInteger(value));\n\n/**\n * `P.number.finite` matches **finite numbers**.\n *\n * [Read the documentation for `P.number.finite` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberfinite)\n *\n * @example\n *  match(value)\n *   .with(P.number.finite, () => 'not Infinity')\n */\nconst finite = <input>(): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && Number.isFinite(value));\n\n/**\n * `P.number.positive()` matches **positive** numbers.\n *\n * [Read the documentation for `P.number.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberpositive)\n *\n * @example\n *  match(value)\n *   .with(P.number.positive(), () => 'number > 0')\n */\nconst positive = <input>(): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value > 0);\n\n/**\n * `P.number.negative()` matches **negative** numbers.\n *\n * [Read the documentation for `P.number.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbernegative)\n *\n * @example\n *  match(value)\n *   .with(P.number.negative(), () => 'number < 0')\n */\nconst negative = <input>(): GuardExcludeP<input, number, never> =>\n  when((value) => isNumber(value) && value < 0);\n\nconst numberChainable = <pattern extends Matcher<any, any, any, any, any>>(\n  pattern: pattern\n): NumberChainable<pattern> =>\n  Object.assign(chainable(pattern), {\n    between: (min: number, max: number) =>\n      numberChainable(intersection(pattern, between(min, max))),\n    lt: (max: number) => numberChainable(intersection(pattern, lt(max))),\n    gt: (min: number) => numberChainable(intersection(pattern, gt(min))),\n    lte: (max: number) => numberChainable(intersection(pattern, lte(max))),\n    gte: (min: number) => numberChainable(intersection(pattern, gte(min))),\n    int: () => numberChainable(intersection(pattern, int())),\n    finite: () => numberChainable(intersection(pattern, finite())),\n    positive: () => numberChainable(intersection(pattern, positive())),\n    negative: () => numberChainable(intersection(pattern, negative())),\n  }) as any;\n\n/**\n * `P.number` is a wildcard pattern, matching any **number**.\n *\n * [Read the documentation for `P.number` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumber-wildcard)\n *\n * @example\n *  match(value)\n *   .with(P.number, () => 'will match on numbers')\n */\nexport const number: NumberPattern = numberChainable(when(isNumber));\n\n/**\n * `P.bigint.between(min, max)` matches **bigint** between `min` and `max`,\n * equal to min or equal to max.\n *\n * [Read the documentation for `P.bigint.between` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberbetween)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.between(0, 10), () => '0 <= bigints <= 10')\n */\nconst betweenBigInt = <\n  input,\n  const min extends bigint,\n  const max extends bigint\n>(\n  min: min,\n  max: max\n): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && min <= value && max >= value);\n\n/**\n * `P.bigint.lt(max)` matches **bigint** smaller than `max`.\n *\n * [Read the documentation for `P.bigint.lt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlt)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.lt(10), () => 'bigints < 10')\n */\nconst ltBigInt = <input, const max extends bigint>(\n  max: max\n): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value < max);\n\n/**\n * `P.bigint.gt(min)` matches **bigint** greater than `min`.\n *\n * [Read the documentation for `P.bigint.gt` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumbergt)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.gt(10), () => 'bigints > 10')\n */\nconst gtBigInt = <input, const min extends bigint>(\n  min: min\n): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value > min);\n\n/**\n * `P.bigint.lte(max)` matches **bigint** smaller than or equal to `max`.\n *\n * [Read the documentation for `P.bigint.lte` on GitHub](https://github.com/gvergnaud/ts-pattern#pnumberlte)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.lte(10), () => 'bigints <= 10')\n */\nconst lteBigInt = <input, const max extends bigint>(\n  max: max\n): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value <= max);\n\n/**\n * `P.bigint.gte(min)` matches **bigint** greater than or equal to `min`.\n *\n * [Read the documentation for `P.bigint.gte` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintgte)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.gte(10), () => 'bigints >= 10')\n */\nconst gteBigInt = <input, const min extends bigint>(\n  min: min\n): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value >= min);\n\n/**\n * `P.bigint.positive()` matches **positive** bigints.\n *\n * [Read the documentation for `P.bigint.positive()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintpositive)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.positive(), () => 'bigint > 0')\n */\nconst positiveBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value > 0);\n\n/**\n * `P.bigint.negative()` matches **negative** bigints.\n *\n * [Read the documentation for `P.bigint.negative()` on GitHub](https://github.com/gvergnaud/ts-pattern#pbigintnegative)\n *\n * @example\n *  match(value)\n *   .with(P.bigint.negative(), () => 'bigint < 0')\n */\nconst negativeBigInt = <input>(): GuardExcludeP<input, bigint, never> =>\n  when((value) => isBigInt(value) && value < 0);\n\nconst bigintChainable = <pattern extends Matcher<any, any, any, any, any>>(\n  pattern: pattern\n): BigIntChainable<pattern> =>\n  Object.assign(chainable(pattern), {\n    between: (min: bigint, max: bigint) =>\n      bigintChainable(intersection(pattern, betweenBigInt(min, max))),\n    lt: (max: bigint) => bigintChainable(intersection(pattern, ltBigInt(max))),\n    gt: (min: bigint) => bigintChainable(intersection(pattern, gtBigInt(min))),\n    lte: (max: bigint) =>\n      bigintChainable(intersection(pattern, lteBigInt(max))),\n    gte: (min: bigint) =>\n      bigintChainable(intersection(pattern, gteBigInt(min))),\n    positive: () => bigintChainable(intersection(pattern, positiveBigInt())),\n    negative: () => bigintChainable(intersection(pattern, negativeBigInt())),\n  }) as any;\n\n/**\n * `P.bigint` is a wildcard pattern, matching any **bigint**.\n *\n * [Read the documentation for `P.bigint` on GitHub](https://github.com/gvergnaud/ts-pattern#number-wildcard)\n *\n * @example\n *   .with(P.bigint, () => 'will match on bigints')\n */\nexport const bigint: BigIntPattern = bigintChainable(when(isBigInt));\n\n/**\n * `P.boolean` is a wildcard pattern, matching any **boolean**.\n *\n * [Read the documentation for `P.boolean` on GitHub](https://github.com/gvergnaud/ts-pattern#boolean-wildcard)\n *\n * @example\n *   .with(P.boolean, () => 'will match on booleans')\n */\nexport const boolean: BooleanPattern = chainable(when(isBoolean));\n\n/**\n * `P.symbol` is a wildcard pattern, matching any **symbol**.\n *\n * [Read the documentation for `P.symbol` on GitHub](https://github.com/gvergnaud/ts-pattern#symbol-wildcard)\n *\n * @example\n *   .with(P.symbol, () => 'will match on symbols')\n */\nexport const symbol: SymbolPattern = chainable(when(isSymbol));\n\n/**\n * `P.nullish` is a wildcard pattern, matching **null** or **undefined**.\n *\n * [Read the documentation for `P.nullish` on GitHub](https://github.com/gvergnaud/ts-pattern#nullish-wildcard)\n *\n * @example\n *   .with(P.nullish, (x) => `${x} is null or undefined`)\n */\nexport const nullish: NullishPattern = chainable(when(isNullish));\n\n/**\n * `P.nonNullable` is a wildcard pattern, matching everything except **null** or **undefined**.\n *\n * [Read the documentation for `P.nonNullable` on GitHub](https://github.com/gvergnaud/ts-pattern#nonNullable-wildcard)\n *\n * @example\n *   .with(P.nonNullable, (x) => `${x} isn't null nor undefined`)\n */\nexport const nonNullable: NonNullablePattern = chainable(when(isNonNullable));\n\n/**\n * `P.instanceOf(SomeClass)` is a pattern matching instances of a given class.\n *\n * [Read the documentation for `P.instanceOf` on GitHub](https://github.com/gvergnaud/ts-pattern#pinstanceof-patterns)\n *\n *  @example\n *   .with(P.instanceOf(SomeClass), () => 'will match on SomeClass instances')\n */\nexport function instanceOf<T extends AnyConstructor>(\n  classConstructor: T\n): Chainable<GuardP<unknown, InstanceType<T>>> {\n  return chainable(when(isInstanceOf(classConstructor)));\n}\n\n/**\n * `P.shape(somePattern)` lets you call methods like `.optional()`, `.and`, `.or` and `.select()`\n * On structural patterns, like objects and arrays.\n *\n * [Read the documentation for `P.shape` on GitHub](https://github.com/gvergnaud/ts-pattern#pshape-patterns)\n *\n *  @example\n *   .with(\n *     {\n *       state: P.shape({ status: \"success\" }).optional().select()\n *     },\n *     (state) => 'match the success state, or undefined.'\n *   )\n */\nexport function shape<input, const pattern extends Pattern<input>>(\n  pattern: pattern\n): Chainable<GuardP<input, InvertPattern<pattern, input>>>;\nexport function shape(pattern: UnknownValuePattern) {\n  return chainable(when(isMatching(pattern)));\n}\n", "/**\n * Error when the given input value does not match any included pattern\n * and .exhaustive() was specified\n */\nexport class NonExhaustiveError extends Error {\n  constructor(public input: unknown) {\n    let displayedValue;\n    try {\n      displayedValue = JSON.stringify(input);\n    } catch (e) {\n      displayedValue = input;\n    }\n    super(`Pattern matching error: no pattern matches value ${displayedValue}`);\n  }\n}\n", "import { Pattern } from './types/Pattern';\nimport { Match } from './types/Match';\nimport * as symbols from './internals/symbols';\nimport { matchPattern } from './internals/helpers';\nimport { NonExhaustiveError } from './errors';\n\ntype MatchState<output> =\n  | { matched: true; value: output }\n  | { matched: false; value: undefined };\n\nconst unmatched: MatchState<never> = {\n  matched: false,\n  value: undefined,\n};\n\n/**\n * `match` creates a **pattern matching expression**.\n *  * Use `.with(pattern, handler)` to pattern match on the input.\n *  * Use `.exhaustive()` or `.otherwise(() => defaultValue)` to end the expression and get the result.\n *\n * [Read the documentation for `match` on GitHub](https://github.com/gvergnaud/ts-pattern#match)\n *\n * @example\n *  declare let input: \"A\" | \"B\";\n *\n *  return match(input)\n *    .with(\"A\", () => \"It's an A!\")\n *    .with(\"B\", () => \"It's a B!\")\n *    .exhaustive();\n *\n */\nexport function match<const input, output = symbols.unset>(\n  value: input\n): Match<input, output> {\n  return new MatchExpression(value, unmatched) as any;\n}\n\n/**\n * This class represents a match expression. It follows the\n * builder pattern, we chain methods to add features to the expression\n * until we call `.exhaustive`, `.otherwise` or the unsafe `.run`\n * method to execute it.\n *\n * The types of this class aren't public, the public type definition\n * can be found in src/types/Match.ts.\n */\nclass MatchExpression<input, output> {\n  constructor(private input: input, private state: MatchState<output>) {}\n\n  with(...args: any[]): MatchExpression<input, output> {\n    if (this.state.matched) return this;\n\n    const handler: (selection: unknown, value: input) => output =\n      args[args.length - 1];\n\n    const patterns: Pattern<input>[] = [args[0]];\n    let predicate: ((value: input) => unknown) | undefined = undefined;\n\n    if (args.length === 3 && typeof args[1] === 'function') {\n      // case with guard as second argument\n      predicate = args[1];\n    } else if (args.length > 2) {\n      // case with several patterns\n      patterns.push(...args.slice(1, args.length - 1));\n    }\n\n    let hasSelections = false;\n    let selected: Record<string, unknown> = {};\n    const select = (key: string, value: unknown) => {\n      hasSelections = true;\n      selected[key] = value;\n    };\n\n    const matched =\n      patterns.some((pattern) => matchPattern(pattern, this.input, select)) &&\n      (predicate ? Boolean(predicate(this.input)) : true);\n\n    const selections = hasSelections\n      ? symbols.anonymousSelectKey in selected\n        ? selected[symbols.anonymousSelectKey]\n        : selected\n      : this.input;\n\n    const state = matched\n      ? {\n          matched: true as const,\n          value: handler(selections, this.input),\n        }\n      : unmatched;\n\n    return new MatchExpression(this.input, state);\n  }\n\n  when(\n    predicate: (value: input) => unknown,\n    handler: (selection: input, value: input) => output\n  ): MatchExpression<input, output> {\n    if (this.state.matched) return this;\n\n    const matched = Boolean(predicate(this.input));\n\n    return new MatchExpression<input, output>(\n      this.input,\n      matched\n        ? { matched: true, value: handler(this.input, this.input) }\n        : unmatched\n    );\n  }\n\n  otherwise(handler: (value: input) => output): output {\n    if (this.state.matched) return this.state.value;\n    return handler(this.input);\n  }\n\n  exhaustive(unexpectedValueHandler = defaultCatcher): output {\n    if (this.state.matched) return this.state.value;\n    return unexpectedValueHandler(this.input);\n  }\n\n  run(): output {\n    return this.exhaustive();\n  }\n\n  returnType() {\n    return this;\n  }\n\n  narrow() {\n    return this;\n  }\n}\n\nfunction defaultCatcher(input: unknown): never {\n  throw new NonExhaustiveError(input);\n}\n", "import { match } from \"ts-pattern\"\n\n/**\n * One nodeop JSONL log line, post-`JSON.parse`. Fields mirror the C++\n * `daily_file_sink` JSON formatter — see `wire-sysio/programs/nodeop/logging.json`\n * for the schema reference.\n */\nexport interface JsonLogRecord {\n  /** ISO-8601 timestamp, e.g. `\"2026-04-27T19:58:15.417594Z\"`. */\n  ts: string\n  /** Log level, e.g. `\"debug\"`, `\"info\"`, `\"warn\"`, `\"error\"`. */\n  lvl: string\n  /** Originating thread name (almost always `\"nodeop\"`). */\n  thread: string\n  /** Logger category, e.g. `\"default\"`, `\"net_plugin_impl\"`. */\n  logger: string\n  /** Source file path of the emitting log call. */\n  file: string\n  /** Source line number of the emitting log call. */\n  line: number\n  /** Function name of the emitting log call. */\n  func: string\n  /** The actual log message. */\n  msg: string\n}\n\n/**\n * Identity-mapped log levels emitted by the nodeop JSON formatter. Lowercase\n * matches the on-the-wire shape verbatim so `match()` can compare without\n * casts.\n */\nexport enum JsonLogLevel {\n  trace = \"trace\",\n  debug = \"debug\",\n  info = \"info\",\n  warn = \"warn\",\n  error = \"error\",\n  fatal = \"fatal\"\n}\n\n/**\n * Identity-mapped Ink color names used to colorize log levels. Identity\n * mapping keeps the value identical to Ink's accepted string set.\n */\nexport enum LogLevelColor {\n  gray = \"gray\",\n  yellow = \"yellow\",\n  red = \"red\",\n  redBright = \"redBright\"\n}\n\nexport namespace JsonLogRecord {\n  /** Minimum length of an ISO-8601 timestamp that carries `HH:mm:ss.SSS`. */\n  export const TimestampMinLength = 23\n  /** Char index where the time-of-day component begins in an ISO-8601 string. */\n  export const TimeOfDayStartIndex = 11\n  /** Char index (exclusive) where the millisecond-precision time-of-day ends. */\n  export const TimeOfDayEndIndex = 23\n}\n\n/**\n * Parse a single JSONL line. Returns the raw string when parsing fails or the\n * parsed value isn't a structured record (missing `msg`) — callers always\n * receive something printable.\n */\nexport function parseJsonLogLine(raw: string): JsonLogRecord | string {\n  if (raw.length === 0) return raw\n  try {\n    const obj = JSON.parse(raw)\n    if (\n      typeof obj === \"object\" &&\n      obj !== null &&\n      typeof (obj as { msg?: unknown }).msg === \"string\"\n    ) {\n      return obj as JsonLogRecord\n    }\n  } catch {\n    /* fall through */\n  }\n  return raw\n}\n\n/** Ink color for a JSONL `lvl` field. Unrecognized values render in default fg. */\nexport function colorForLevel(lvl: string): LogLevelColor | undefined {\n  return match(lvl.toLowerCase())\n    .with(JsonLogLevel.trace, () => LogLevelColor.gray)\n    .with(JsonLogLevel.debug, () => LogLevelColor.gray)\n    .with(JsonLogLevel.info, () => undefined)\n    .with(JsonLogLevel.warn, () => LogLevelColor.yellow)\n    .with(JsonLogLevel.error, () => LogLevelColor.red)\n    .with(JsonLogLevel.fatal, () => LogLevelColor.redBright)\n    .otherwise(() => undefined)\n}\n\n/**\n * `HH:mm:ss.SSS` slice of the record's `ts` field.\n *\n * @example `formatTimestamp(\"2026-04-27T19:58:15.417594Z\")` returns `\"19:58:15.417\"`\n */\nexport function formatTimestamp(ts: string): string {\n  return ts.length >= JsonLogRecord.TimestampMinLength\n    ? ts.slice(JsonLogRecord.TimeOfDayStartIndex, JsonLogRecord.TimeOfDayEndIndex)\n    : ts\n}\n\n/**\n * Compact source-location label — just `basename:line`. The full path is\n * stripped so the column stays narrow; full path is still on disk in the\n * underlying record if a debugger ever wants it.\n *\n * @example `formatLocation({ file: \"/.../signature_provider.cpp\", line: 426 })` returns `\"signature_provider.cpp:426\"`\n */\nexport function formatLocation(record: JsonLogRecord): string {\n  const slash = record.file.lastIndexOf(\"/\"),\n    basename = slash === -1 ? record.file : record.file.slice(slash + 1)\n  return `${basename}:${record.line}`\n}\n", "import Fs from \"node:fs\"\n\n/** Byte offsets for each line start in a file. Consumed by log-tail services in the server and the local-disk client. */\nexport interface LineIndex {\n  path: string\n  /** Inode — invalidates the index on rotation. */\n  ino: number\n  /**\n   * `byteOffsets[i]` = byte position of line `i`. May contain one trailing\n   * entry for an in-progress (partial) line if the file's last byte is not\n   * `\\n`. Consumers should bound their iteration by {@link completeLineCount}\n   * rather than `byteOffsets.length`.\n   */\n  byteOffsets: number[]\n  /** File size at time of last scan. */\n  totalBytes: number\n  /**\n   * Count of lines that ended in `\\n` at scan time. When the file's tail is\n   * mid-write (no terminating `\\n`), the renderer would otherwise treat the\n   * partial bytes as a \"line\" — for JSONL that surfaces as a malformed-JSON\n   * row at the bottom of the viewport. Servers and clients expose this as\n   * the `totalLines` counter on `LogStat`, so the partial line stays hidden\n   * until flushed.\n   */\n  completeLineCount: number\n}\n\nnamespace LineIndexInternals {\n  /** Stream chunk size — bounds peak resident memory while indexing a large file. */\n  export const ChunkSize = 1 << 20\n  /** Latin-1 / binary encoding lets us scan bytes without UTF-8 boundary risk; `\\n` is byte 0x0A regardless. */\n  export const ScanEncoding = \"latin1\" as const\n  /** Global regex over `\\n`; reused across every chunk. */\n  export const NewlineRegex = /\\n/g\n  /** Newline byte (LF). Used by tail probe + post-newline arithmetic. */\n  export const NewlineByte = 0x0a\n  /** Newline byte length. Used when computing the next-line start. */\n  export const NewlineByteLength = 1\n}\n\n/**\n * Build a full line-offset index. Streams the file in {@link LineIndexInternals.ChunkSize}\n * chunks and only retains the offset array — never the file contents — so a\n * multi-GB log no longer requires multi-GB resident memory.\n *\n * @param path absolute path of the file to index\n */\nexport async function buildLineIndex(path: string): Promise<LineIndex> {\n  const stat = await Fs.promises.stat(path),\n    byteOffsets = await streamNewlineOffsets(path, 0, stat.size, [0]),\n    tailIsComplete = await tailEndsInNewline(path, stat.size),\n    completeLineCount = computeCompleteLineCount(byteOffsets, tailIsComplete)\n  return {\n    path,\n    ino: stat.ino,\n    byteOffsets,\n    totalBytes: stat.size,\n    completeLineCount\n  }\n}\n\n/**\n * Refresh the index against the current file. Short-circuits when the file\n * hasn't grown, rebuilds fully on inode change (log rotation), and otherwise\n * streams *only* the appended tail bytes — turning a hot-path 200 ms tick into\n * a constant-memory append regardless of total file size.\n *\n * When the prior tail ended in `\\n` the byte position right after that newline\n * is itself the start of the first new line; seed it before streaming so it\n * isn't lost. (Build-time scans drop offsets equal to file size to avoid a\n * phantom EOF line, so this position only re-surfaces at extend time.)\n */\nexport async function extendLineIndex(index: LineIndex): Promise<LineIndex> {\n  const stat = await Fs.promises.stat(index.path)\n  if (stat.ino !== index.ino) return buildLineIndex(index.path)\n  if (stat.size <= index.totalBytes) return index\n  const oldTailIsNewline = await tailEndsInNewline(\n      index.path,\n      index.totalBytes\n    ),\n    seed = oldTailIsNewline\n      ? [...index.byteOffsets, index.totalBytes]\n      : [...index.byteOffsets],\n    byteOffsets = await streamNewlineOffsets(\n      index.path,\n      index.totalBytes,\n      stat.size,\n      seed\n    ),\n    newTailIsComplete = await tailEndsInNewline(index.path, stat.size),\n    completeLineCount = computeCompleteLineCount(byteOffsets, newTailIsComplete)\n  return {\n    ...index,\n    byteOffsets,\n    totalBytes: stat.size,\n    completeLineCount\n  }\n}\n\n/**\n * Number of fully-terminated lines represented by `byteOffsets`. When the\n * file's tail isn't `\\n`, the final entry is the start of an in-progress\n * line and is excluded from the count (clamped at zero so an empty file\n * doesn't go negative).\n */\nfunction computeCompleteLineCount(\n  byteOffsets: number[],\n  tailIsComplete: boolean\n): number {\n  return Math.max(0, byteOffsets.length - (tailIsComplete ? 0 : 1))\n}\n\n/** Read a single byte at `totalBytes - 1`; returns true when it's `\\n` (0x0A). */\nasync function tailEndsInNewline(\n  path: string,\n  totalBytes: number\n): Promise<boolean> {\n  if (totalBytes <= 0) return false\n  const fd = await Fs.promises.open(path, \"r\"),\n    buf = Buffer.alloc(1)\n  try {\n    await fd.read(buf, 0, 1, totalBytes - 1)\n  } finally {\n    await fd.close()\n  }\n  return buf[0] === LineIndexInternals.NewlineByte\n}\n\n/**\n * Read `count` lines starting at `from`. Respects the byte offsets in the\n * index — callers should request [from, from+count) windows.\n */\nexport async function readLines(\n  index: LineIndex,\n  from: number,\n  count: number\n): Promise<string[]> {\n  const start = index.byteOffsets[from] ?? index.totalBytes,\n    end = index.byteOffsets[from + count] ?? index.totalBytes\n  if (start >= end) return []\n  const fd = await Fs.promises.open(index.path, \"r\"),\n    buf = Buffer.alloc(end - start)\n  try {\n    await fd.read(buf, 0, end - start, start)\n  } finally {\n    await fd.close()\n  }\n  const text = buf.toString(\"utf8\")\n  return text.endsWith(\"\\n\") ? text.slice(0, -1).split(\"\\n\") : text.split(\"\\n\")\n}\n\n/**\n * Stream `path` from `startByte` (inclusive) to `endByte` (exclusive) in chunk\n * windows, scanning each chunk for `\\n` and recording the byte position of the\n * NEXT line that starts after each newline. The returned array is the\n * concatenation of `seedOffsets` with every newly-discovered offset that lies\n * strictly before `endByte` (so a trailing `\\n` doesn't yield a phantom EOF\n * line).\n *\n * @param path        file to stream\n * @param startByte   inclusive start byte (use 0 for full builds)\n * @param endByte     exclusive end byte (the file size at scan time)\n * @param seedOffsets pre-existing offsets to extend (use `[0]` for full builds)\n */\nfunction streamNewlineOffsets(\n  path: string,\n  startByte: number,\n  endByte: number,\n  seedOffsets: number[]\n): Promise<number[]> {\n  return new Promise((resolve, reject) => {\n    if (startByte >= endByte) {\n      resolve([...seedOffsets])\n      return\n    }\n    const offsets = [...seedOffsets]\n    let cursor = startByte\n    const stream = Fs.createReadStream(path, {\n      start: startByte,\n      end: endByte - 1,\n      highWaterMark: LineIndexInternals.ChunkSize\n    })\n    stream.on(\"data\", (chunk: Buffer | string) => {\n      const buf =\n        typeof chunk === \"string\"\n          ? Buffer.from(chunk, LineIndexInternals.ScanEncoding)\n          : chunk\n      ;[\n        ...buf\n          .toString(LineIndexInternals.ScanEncoding)\n          .matchAll(LineIndexInternals.NewlineRegex)\n      ]\n        .map(m => cursor + (m.index ?? 0) + LineIndexInternals.NewlineByteLength)\n        .filter(pos => pos < endByte)\n        .forEach(pos => offsets.push(pos))\n      cursor += buf.length\n    })\n    stream.once(\"end\", () => resolve(offsets))\n    stream.once(\"error\", reject)\n  })\n}\n", "import Path from \"node:path\"\n\n/**\n * Subpath segments under a `<cluster-path>` root that the harness uses for\n * runtime artifacts the debugging surface consumes.\n */\nexport namespace ClusterSubpath {\n  /**\n   * Where the `external_debugging_plugin` writes one\n   * `<NN>-<DIRECTION>-<digest>.{data,metadata}` pair per emitted/received\n   * envelope. The `data/` segment matches the harness's\n   * `ClusterConfig.dataPath` convention.\n   */\n  export const OppDebugging = Path.join(\"data\", \"opp-debugging\")\n}\n\n/**\n * Resolve the OPP debugging dump directory for a cluster. Mirrors the\n * directory the `external_debugging_plugin` writes to, the harness's\n * `ClusterManager.OPPDebuggingSubpath`, and the `OPPTrackingService.StorageSubpath`\n * the TUI used to derive locally — all three originate here now.\n */\nexport function oppDebuggingPath(clusterPath: string): string {\n  return Path.join(clusterPath, ClusterSubpath.OppDebugging)\n}\n\n/**\n * `true` when `candidate` resolves underneath `root`. Both arguments are\n * resolved before comparison so symlinks and relative segments do not bypass\n * the check. Used by the server's log-reading routes to reject any path\n * outside the cluster directory it was started with.\n */\nexport function isPathUnder(candidate: string, root: string): boolean {\n  const resolvedCandidate = Path.resolve(candidate),\n    resolvedRoot = Path.resolve(root),\n    rootWithSep = resolvedRoot.endsWith(Path.sep)\n      ? resolvedRoot\n      : resolvedRoot + Path.sep\n  return (\n    resolvedCandidate === resolvedRoot ||\n    resolvedCandidate.startsWith(rootWithSep)\n  )\n}\n", "import Fs from \"node:fs\"\nimport Path from \"node:path\"\nimport { asOption } from \"@3fv/prelude-ts\"\nimport { match } from \"ts-pattern\"\n\nimport {\n  ClusterStateNodeRole,\n  type ClusterState,\n  type ClusterStateNode\n} from \"@wireio/cluster-tool-shared\"\n\nimport { PidSourceKind, type PidSource } from \"../processes/index.js\"\nimport { currentDateStamp } from \"./dateStamp.js\"\n\nexport namespace PidSources {\n  /** Filename suffix used by harness ProcessManager for pid files. */\n  export const PidExt = \".pid\" as const\n  /** Relative subpath of the anvil data dir under a cluster root. */\n  export const AnvilSubpath = \"data/anvil\" as const\n  /**\n   * Relative subpath of the solana-test-validator pid dir. The harness's\n   * `ProcessManager.toProcessPath` derives this dir from the label by\n   * `label.replaceAll(\"-\", \"_\")`, so `solana-test-validator` lands in\n   * `data/solana_test_validator/`. The sibling `data/solana_validator/`\n   * directory is the validator's *ledger*, not its pid dir.\n   */\n  export const SolanaSubpath = \"data/solana_test_validator\" as const\n  /** Subdirectory under every source's `directory` that holds its log files. */\n  export const LogsSubdir = \"logs\" as const\n  /** Filename suffix used by nodeop's JSONL daily-file sink. */\n  export const JsonlExt = \".jsonl\" as const\n  /** Filename prefix for the plain stderr-captured daily log. */\n  export const PlainLogPrefix = \"log_\" as const\n  /** Filename suffix for the plain stderr-captured daily log. */\n  export const PlainLogExt = \".log\" as const\n  /** `name` that identifies the genesis-bootstrap node in `ClusterStateNode`. */\n  export const BiosNodeId = \"bios\" as const\n}\n\n/**\n * Kind for a `ClusterStateNode` based on its role: `bios` → {@link\n * PidSourceKind.Bios}, `producer` → {@link PidSourceKind.Producer}, and\n * `operator` → {@link PidSourceKind.BatchOperator} when the node has a\n * `batchOperatorAccount`, otherwise {@link PidSourceKind.Underwriter}.\n */\nfunction kindForNode(node: ClusterStateNode): PidSourceKind {\n  return match(node.role)\n    .with(ClusterStateNodeRole.bios, () => PidSourceKind.Bios)\n    .with(ClusterStateNodeRole.producer, () => PidSourceKind.Producer)\n    .with(ClusterStateNodeRole.operator, () =>\n      node.batchOperatorAccount != null\n        ? PidSourceKind.BatchOperator\n        : PidSourceKind.Underwriter\n    )\n    .exhaustive()\n}\n\n/** Internal raw pid record produced by the directory scan. */\ninterface RawPid {\n  label: string\n  pidPath: string\n}\n\n/** List pid files under `dir` if it exists. Returns `[]` when missing. */\nfunction readPidFiles(dir: string): RawPid[] {\n  if (!Fs.existsSync(dir)) return []\n  return Fs.readdirSync(dir)\n    .filter(f => f.endsWith(PidSources.PidExt))\n    .map(f => ({\n      label: f.slice(0, -PidSources.PidExt.length),\n      pidPath: Path.join(dir, f)\n    }))\n}\n\n/** Pid files in a `ClusterStateNode`'s `nodePath`, tagged with its {@link PidSourceKind}. */\nfunction sourcesForNode(node: ClusterStateNode): PidSource[] {\n  const kind = kindForNode(node)\n  return readPidFiles(node.nodePath).map(raw => ({\n    label: raw.label,\n    pidPath: raw.pidPath,\n    directory: node.nodePath,\n    kind,\n    node\n  }))\n}\n\n/** Pid files in a known non-node subdir (anvil, solana-test-validator). */\nfunction sourcesForSubdir(\n  clusterPath: string,\n  subpath: string,\n  kind: PidSourceKind\n): PidSource[] {\n  const dir = Path.join(clusterPath, subpath)\n  return readPidFiles(dir).map(raw => ({\n    label: raw.label,\n    pidPath: raw.pidPath,\n    directory: dir,\n    kind\n  }))\n}\n\n/**\n * Enumerate every monitored process for a cluster. Discovered by filesystem\n * scan — no label construction, no nodeId parsing. Covers:\n *   - producer / bios / batch-operator / underwriter nodeop processes\n *   - anvil (if present)\n *   - solana-test-validator (if present)\n *\n * @param clusterPath cluster root (absolute)\n * @param state parsed `cluster-state.json`, or null when the cluster hasn't bootstrapped\n */\nexport function collectPidSources(\n  clusterPath: string,\n  state: ClusterState | null\n): PidSource[] {\n  if (!state) return []\n  const nodeSources: PidSource[] = state.nodes.flatMap(sourcesForNode)\n  const anvilSources = sourcesForSubdir(\n      clusterPath,\n      PidSources.AnvilSubpath,\n      PidSourceKind.Anvil\n    ),\n    solanaSources = sourcesForSubdir(\n      clusterPath,\n      PidSources.SolanaSubpath,\n      PidSourceKind.SolanaValidator\n    )\n  // Stable sort by label so re-renders don't reshuffle the list out from\n  // under a cursor that's tracking by index. Filesystem order from\n  // `Fs.readdirSync` is implementation-defined and can vary if pid files\n  // are recreated on respawn.\n  return [...nodeSources, ...anvilSources, ...solanaSources].sort((a, b) =>\n    a.label.localeCompare(b.label)\n  )\n}\n\n/**\n * Resolve the preferred log file for a source.\n *\n * Scans `<source.directory>/logs/` for `*.jsonl` files (nodeop's JSONL\n * daily-file sink). When at least one is present the lex-latest one wins —\n * the JSONL filenames embed an ISO date so lexical order is chronological.\n * When no JSONL is available (anvil / solana / pre-rotation) the today plain\n * `log_<YYYYMMDD>.log` path is returned.\n *\n * @param source process whose log to surface in the viewer\n * @param now    date used for the plain-log fallback filename; defaults to current time\n */\nexport function logPathForSource(\n  source: PidSource,\n  now: Date = new Date()\n): string {\n  const logsDir = Path.join(source.directory, PidSources.LogsSubdir),\n    jsonl = latestJsonlIn(logsDir)\n  if (jsonl) return Path.join(logsDir, jsonl)\n  return Path.join(\n    logsDir,\n    `${PidSources.PlainLogPrefix}${currentDateStamp(now)}${PidSources.PlainLogExt}`\n  )\n}\n\n/** Lex-latest `*.jsonl` filename in `logsDir`, or null when there are none. */\nfunction latestJsonlIn(logsDir: string): string {\n  if (!Fs.existsSync(logsDir)) return null\n  const matches = Fs.readdirSync(logsDir)\n    .filter(f => f.endsWith(PidSources.JsonlExt))\n    .sort()\n  return matches.length === 0 ? null : matches[matches.length - 1]\n}\n\n/** Read pid from a pid file; null on missing / malformed / non-positive. */\nexport function readPid(pidPath: string): number {\n  return asOption(pidPath)\n    .filter(p => Fs.existsSync(p))\n    .map(p => Fs.readFileSync(p, \"utf8\").trim())\n    .map(s => parseInt(s, 10))\n    .filter(n => !isNaN(n) && n > 0)\n    .getOrNull()\n}\n\n/** Null-safe `process.kill(pid, 0)` liveness probe. */\nexport function pidIsAlive(pid: number | null): boolean {\n  return asOption(pid)\n    .map(p => {\n      try {\n        process.kill(p, 0)\n        return true\n      } catch {\n        return false\n      }\n    })\n    .getOrElse(false)\n}\n", "/**\n * On-disk filenames for a cluster directory. The TUI and any other\n * out-of-process tooling read these to discover a cluster's config and\n * runtime state.\n */\nexport namespace ClusterFiles {\n  /** Resolved cluster config written by `wire-cluster-tool create`. */\n  export const ConfigFilename = \"cluster-config.json\" as const\n  /** Serialized cluster state written after bootstrap. */\n  export const StateFilename = \"cluster-state.json\" as const\n  /**\n   * Serialized `ClusterKeyStore` (per-node key sets + provisioned operator\n   * accounts), written 0600. `cluster-tool`-private — NEVER served over the\n   * debugging-server RPC surface.\n   */\n  export const KeysFilename = \"cluster-keys.json\" as const\n}\n", "/**\n * Role a cluster node plays. Identity-mapped string enum matching\n * `cluster-tool`'s `NodeRole` (`bios` / `producer` / `operator`) — the\n * identical string values mean a `cluster-tool` `NodeRole` member satisfies\n * this type with no cast.\n */\nexport enum ClusterStateNodeRole {\n  bios = \"bios\",\n  producer = \"producer\",\n  operator = \"operator\"\n}\n\n/** One `nodeop` instance's `{ http, p2p }` listen ports. */\nexport interface ClusterStateNodePorts {\n  /** HTTP (RPC) listen port. */\n  http: number\n  /** P2P listen port. */\n  p2p: number\n}\n\n/**\n * Post-bootstrap snapshot of a single cluster node, planned deterministically\n * by `cluster-tool`'s `NodeConfig.plan` and persisted read-only for tooling\n * and for `wire-cluster-tool run`'s relaunch path. Carries no key material —\n * see `cluster-keys.json` (`ClusterFiles.KeysFilename`) for that.\n */\nexport interface ClusterStateNode {\n  /** Canonical node name (`bios`, `node_00`, …). */\n  name: string\n  /** Role this node plays. */\n  role: ClusterStateNodeRole\n  /** Absolute on-disk directory for this node's data + logs. */\n  nodePath: string\n  /** This node's `{ http, p2p }` listen ports. */\n  ports: ClusterStateNodePorts\n  /** Producer account names scheduled on this node (empty for pure operator nodes). */\n  producers: string[]\n  /** Batch-operator account this node acts for, when `role === operator`. */\n  batchOperatorAccount: string | null\n  /** Underwriter account this node acts for, when `role === operator`. */\n  underwriterAccount: string | null\n}\n\n/**\n * Post-bootstrap snapshot of cluster runtime layout. Written once by\n * `wire-cluster-tool create` (via `ClusterManager.create`'s persist phase)\n * and reloaded — read-only — by `run`, the debugging server, the TUI, and\n * `PidSources`. Secret-free by design: signing key material lives in the\n * separate `cluster-keys.json`, never here.\n */\nexport interface ClusterState {\n  /** ISO-8601 timestamp of when this snapshot was written. */\n  createdAt: string\n  /** Every node in the cluster — bios, producers, and operator nodes alike. */\n  nodes: ClusterStateNode[]\n  /** Absolute path of the cluster's `kiod` wallet directory. */\n  walletPath: string\n  /** Absolute path of anvil's `--dump-state` / `--load-state` file. */\n  anvilStateFile: string\n  /** Absolute path of the solana-test-validator ledger directory. */\n  solanaLedgerPath: string\n  /** Absolute path of the primary IDL shared with batch operators, or `null` when no Solana outpost is configured. */\n  solanaIdlFile: string | null\n}\n", "/**\n * The transport a resolved port will be bound with. TCP ports are fully\n * covered by `get-port`'s probe; UDP ports (the validator's gossip socket and\n * dynamic-range sockets) additionally require a UDP-bind probe — see\n * `BindConfigProvider` in `cluster-tool` for the failure class this closes.\n */\nexport enum BindConfigPortProtocol {\n  tcp = \"tcp\",\n  udp = \"udp\"\n}\n\n/** One nodeop's `{ http, p2p }` listen ports. */\nexport interface BindConfigNodeopPorts {\n  /** HTTP (RPC) listen port. */\n  http: number\n  /** P2P listen port. */\n  p2p: number\n}\n\n/** The full nodeop port set across the cluster (one pair per node, per role). */\nexport interface BindConfigNodeopClusterPorts {\n  /** The bios node's port pair. */\n  bios: BindConfigNodeopPorts\n  /** One port pair per producer node. */\n  producers: BindConfigNodeopPorts[]\n  /** One port pair per batch-operator node. */\n  batch: BindConfigNodeopPorts[]\n  /** One port pair per underwriter node. */\n  underwriters: BindConfigNodeopPorts[]\n}\n\n/** A daemon that listens on one address + one port (kiod, anvil, debuggingServer). */\nexport interface BindConfigDaemon {\n  /** Listen address (loopback by default; `0.0.0.0` under bind-all). */\n  address: string\n  /** Listen port. */\n  port: number\n}\n\n/** nodeop: one bind address, the cluster-wide nodeop port set. */\nexport interface BindConfigNodeop {\n  /** Listen address shared by every nodeop in the cluster. */\n  address: string\n  /** The cluster-wide node\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   *\n   * op port set, by role. */\n  ports: BindConfigNodeopClusterPorts\n}\n\n/** An inclusive contiguous port window (`first`..`last`). */\nexport interface BindConfigPortRange {\n  /** First port of the window (inclusive). */\n  first: number\n  /** Last port of the window (inclusive). */\n  last: number\n}\n\n/**\n * solana ports — `http` is the RPC port, `faucet` the airdrop faucet.\n * `gossip` is the validator's `--gossip-port`: agave 4.x binds the test\n * validator's gossip socket at its FIXED default (8000) instead of carving it\n * from the dynamic range, so a second concurrent validator panics with\n * `gossip_addr bind_to port 8000: Address already in use` unless each cluster\n * passes its own resolved gossip port.\n * `dynamicRange` is the validator's `--dynamic-port-range` window\n * (TPU/TVU/repair sockets). Without a per-cluster window every\n * solana-test-validator carves its dynamic sockets from the SAME agave default\n * range; two concurrent validators then UDP-double-bind (the kernel allows it\n * silently) and each forwards transactions into the other's TPU, which drops\n * foreign-genesis packets — airdrops/txs return signatures that never land.\n */\nexport interface BindConfigSolanaPorts {\n  /** JSON-RPC listen port. */\n  http: number\n  /** Airdrop faucet port. */\n  faucet: number\n  /** The validator's `--gossip-port` (see the interface note). */\n  gossip: number\n  /** The validator's `--dynamic-port-range` window (see the interface note). */\n  dynamicRange: BindConfigPortRange\n}\n\n/** solana-test-validator: one bind address + its port set. */\nexport interface BindConfigSolana {\n  /** Listen address. */\n  address: string\n  /** The validator's resolved port set. */\n  ports: BindConfigSolanaPorts\n}\n\n/**\n * A cluster's complete network binding — the five daemons' resolved\n * address/port shapes. THE canonical `BindConfig` type — plain data;\n * `BindConfigProvider` (cluster-tool) resolves, validates, and registers it.\n * Persisted verbatim as the `bind` member of `cluster-config.json`.\n */\nexport interface BindConfig {\n  /** kiod wallet daemon binding. */\n  kiod: BindConfigDaemon\n  /** nodeop fleet binding. */\n  nodeop: BindConfigNodeop\n  /** anvil (Ethereum) binding. */\n  anvil: BindConfigDaemon\n  /** solana-test-validator binding. */\n  solana: BindConfigSolana\n  /** embedded debugging server binding. */\n  debuggingServer: BindConfigDaemon\n}\n\n/**\n * Shapes treated as indivisible when deriving caller overrides: a pinned value\n * must be supplied whole or not at all (half a port window is meaningless).\n */\nexport type BindAtom = BindConfigPortRange\n\n/**\n * Caller-override projection of a resolved bind shape: every field optional,\n * recursing through nested shapes and arrays, while {@link BindAtom} shapes\n * stay pin-whole. Deriving (rather than hand-writing) the options family means\n * a field added to a resolved shape appears in its options automatically —\n * the drift class hand-maintained option mirrors invite is unrepresentable.\n */\nexport type BindOverrides<T> = {\n  [K in keyof T]?: T[K] extends BindAtom\n    ? T[K]\n    : T[K] extends ReadonlyArray<infer Element>\n      ? BindOverrides<Element>[]\n      : T[K] extends object\n        ? BindOverrides<T[K]>\n        : T[K]\n}\n\n/** Caller bind options for a single-port daemon (kiod, anvil, debuggingServer). */\nexport type BindDaemonOptions = BindOverrides<BindConfigDaemon>\n\n/** Caller bind options for one nodeop's `{ http, p2p }` pair. */\nexport type BindNodeopPortsOptions = BindOverrides<BindConfigNodeopPorts>\n\n/** Caller bind options for the cluster-wide nodeop port set. */\nexport type BindNodeopClusterPortsOptions =\n  BindOverrides<BindConfigNodeopClusterPorts>\n\n/** Caller bind options for the nodeop fleet. */\nexport type BindNodeopOptions = BindOverrides<BindConfigNodeop>\n\n/**\n * Caller bind options for the solana-test-validator's ports. A pinned\n * `gossip` port must be free (TCP + UDP) or resolution throws; a pinned\n * `dynamicRange` must be supplied whole ({@link BindAtom}) with every port\n * free, or resolution throws.\n */\nexport type BindSolanaPortsOptions = BindOverrides<BindConfigSolanaPorts>\n\n/** Caller bind options for the solana-test-validator. */\nexport type BindSolanaOptions = BindOverrides<BindConfigSolana>\n\n/**\n * Caller-facing bind overrides — exactly the optional projection of\n * {@link BindConfig} (all fields optional; `BindConfigProvider.resolve`\n * fills the rest). NOT a `Partial` of any runtime class — the options derive\n * from the DATA shapes alone.\n */\nexport type BindOptions = BindOverrides<BindConfig>\n\n/** Topology + bind-all the port resolver needs (counts mirror ClusterBuildOptions). */\nexport interface ClusterTopologyOptions {\n  /** Number of producer nodes. */\n  producerCount?: number\n  /** Number of batch-operator nodes. */\n  batchOperatorCount?: number\n  /** Number of underwriter nodes. */\n  underwriterCount?: number\n  /** Bind every daemon on `0.0.0.0` instead of loopback. */\n  bindAll?: boolean\n}\n", "import type { Level } from \"@wireio/shared\"\nimport type { ChainTokenAmount } from \"../types/ChainTokenAmount.js\"\nimport type { BindConfig } from \"./BindConfig.js\"\n\n/**\n * Report output format — value matches the file extension. THE one\n * declaration; `cluster-tool`'s `Report.Format` aliases it\n * (`export import Format = ClusterConfigReportFormat`).\n */\nexport enum ClusterConfigReportFormat {\n  csv = \"csv\",\n  md = \"md\",\n  html = \"html\"\n}\n\n/** The resolved report write target (`Report.Config`'s persisted shape). */\nexport interface ClusterConfigReport {\n  /** Absolute directory the report files are written into. */\n  path: string\n  /** Report file basename (`<path>/<basename>.<format>`). */\n  basename: string\n  /** Formats rendered on write. */\n  formats: ClusterConfigReportFormat[]\n}\n\n/** Per-sink log levels (`@wireio/shared`'s `Level` identity string enum). */\nexport interface ClusterConfigLoggingLevels {\n  /** Console sink level. */\n  console: Level\n  /** File sink level. */\n  file: Level\n}\n\n/**\n * Log-file format. `jsonl` (one JSON object per line) is grep-/`jq`-friendly;\n * `text` is the human-readable console-style form. THE one declaration;\n * `cluster-tool`'s `LogFileAppender.Format` aliases it\n * (`export import Format = ClusterConfigLoggingFileFormat`).\n */\nexport enum ClusterConfigLoggingFileFormat {\n  text = \"text\",\n  jsonl = \"jsonl\"\n}\n\n/** Resolved logging configuration as persisted. */\nexport interface ClusterConfigLogging {\n  /** Per-sink log levels. */\n  levels: ClusterConfigLoggingLevels\n  /** File-appender output format. */\n  fileFormat: ClusterConfigLoggingFileFormat\n}\n\n/** Per-(chain,token) collateral minimum used by operator-eligibility config. */\nexport interface CollateralRequirement {\n  /** SlugName / uint64 chain identifier. */\n  chainCode: number\n  /** SlugName / uint64 token identifier. */\n  tokenCode: number\n  /** Minimum bonded amount for eligibility, in the token's base units. */\n  minimumBond: number\n}\n\n/** Absolute paths of the resolved binaries a cluster runs. */\nexport interface ClusterExecutablePaths {\n  /** WIRE chain node. */\n  nodeop: string\n  /** Key daemon. */\n  kiod: string\n  /** WIRE CLI client. */\n  clio: string\n  /** Ethereum dev chain. */\n  anvil: string\n  /** Solana dev validator. */\n  solanaTestValidator: string\n}\n\n/**\n * THE canonical cluster configuration — the plain JSON shape persisted to\n * `cluster-config.json` (`ClusterFiles.ConfigFilename`) and flowed through\n * the harness at runtime. `ClusterConfigProvider` (cluster-tool) resolves,\n * loads, and saves it; the debugging server, TUI, and flows consume it\n * read-only.\n */\nexport interface ClusterConfig {\n  /** wire-sysio build directory (binaries + contract artifacts). */\n  buildPath: string\n  /** Root directory of this cluster's on-disk state. */\n  clusterPath: string\n  /** `<clusterPath>/data` — node data dirs, outpost state, OPP debugging. */\n  dataPath: string\n  /** `<clusterPath>/wallet` — the kiod wallet directory. */\n  walletPath: string\n  /** Number of producer accounts. */\n  producerCount: number\n  /** Number of producer nodes the producers are scheduled across. */\n  nodeCount: number\n  /** Number of batch-operator nodes. */\n  batchOperatorCount: number\n  /** Number of underwriter nodes. */\n  underwriterCount: number\n  /** Depot epoch duration, seconds (global — see the epoch-duration rule). */\n  epochDurationSec: number\n  /** Staking warmup, in epochs. */\n  warmupEpochs: number\n  /** Staking cooldown, in epochs. */\n  cooldownEpochs: number\n  /** wire-ethereum repo root. */\n  ethereumPath: string\n  /** wire-solana repo root. */\n  solanaPath: string\n  /** Resolved network binding for every daemon. */\n  bind: BindConfig\n  /** Resolved binary locations. */\n  executables: ClusterExecutablePaths\n  /** Report write target. */\n  report: ClusterConfigReport\n  /** Logging configuration. */\n  logging: ClusterConfigLogging\n  /** Batch-operator eligibility minimums, per (chain, token). */\n  requiredBatchOperatorCollateral: CollateralRequirement[]\n  /** Underwriter eligibility minimums, per (chain, token). */\n  requiredUnderwriterCollateral: CollateralRequirement[]\n  /** Producer eligibility minimums, per (chain, token). */\n  requiredProducerCollateral: CollateralRequirement[]\n  /**\n   * Per-underwriter collateral fan-out (one row per underwriter, one entry\n   * per chain), or `null` for the resolver's defaults. `null` (not absence)\n   * so the slot round-trips through JSON persistence.\n   */\n  underwriterCollateral: ChainTokenAmount[][] | null\n  /**\n   * Genesis finalizer BLS public key, or `null` before key provisioning has\n   * produced one. `null` (not absence) so the slot round-trips through JSON.\n   */\n  initialFinalizerKey: string | null\n}\n", "import { asOption } from \"@3fv/prelude-ts\"\n// lodash ships only a CJS entry — native ESM consumers (ink v5+, our TUI)\n// can't destructure named exports from the default import in the import\n// statement itself. Importing the default and destructuring at runtime\n// works identically for TypeScript (esModuleInterop) and native Node ESM.\nimport { isString } from \"@wireio/shared\"\n\n// Re-export generated types from @wireio/opp-typescript-models.\n// The debugging protos (sysio/opp/debugging/) are compiled into the\n// same package as the rest of the OPP types.\nimport { DebugOutpostEndpointsType } from \"@wireio/opp-typescript-models\"\n\n/**\n * Derive the endpoints key string used in storage filenames.\n * Uses the enum's own reverse mapping — no manual string table to maintain.\n */\nexport function endpointsTypeToKey(\n  type: DebugOutpostEndpointsType\n): string | null {\n  return asOption(DebugOutpostEndpointsType[type]).filter(isString).getOrNull()\n}\n", "/**\n * Canonical defaults shared by the debugging server and its clients.\n *\n * Server namespace defaults (`DebuggingServer.DefaultPort`, etc.) and client\n * defaults (`DebuggingServerClient.DefaultURL`) both read from here — the\n * values MUST NOT be duplicated across the two packages. Changing a value\n * here changes both halves of the wire protocol in lockstep.\n */\n\nexport namespace DebuggingDefaults {\n  /**\n   * Localhost bind/target. Changing this moves the debugging service off\n   * loopback — only do so when deliberately exposing it on a LAN.\n   */\n  export const Host = \"127.0.0.1\"\n\n  /**\n   * TCP port the server listens on and the client connects to. Changing\n   * this requires restarting every client; there is no discovery.\n   */\n  export const Port = 9876\n\n  /**\n   * URL scheme for the HTTP transport. TLS is not currently wired up —\n   * flipping to \"https\" requires provisioning a cert and routing through it.\n   */\n  export const Scheme = \"http\"\n\n  /**\n   * JSON-RPC 2.0 protocol version string. Clients and servers reject\n   * requests whose `jsonrpc` field does not match exactly. Bumping this\n   * breaks backwards compatibility with older peers.\n   */\n  export const JsonrpcVersion = \"2.0\"\n\n  /**\n   * Express JSON body parser limit. Envelopes containing large protobuf\n   * blobs brush against this — raise it if legitimate payloads start\n   * getting rejected with 413.\n   */\n  export const BodyLimit = \"10mb\"\n\n  /**\n   * Subpath segments appended to `$HOME` to resolve the default OPP\n   * storage root. Exported so the TUI and other tools can locate data\n   * written by a server whose `--opp-storage-path` wasn't overridden.\n   */\n  export namespace StorageSubpath {\n    export const ConfigDir = \".config\"\n    export const OppData = \"wire/debugging/opp/data\"\n  }\n\n  /** Fully resolved `<scheme>://<host>:<port>` for the default deployment. */\n  export const URL = `${Scheme}://${Host}:${Port}`\n}\n", "import Assert from \"node:assert\"\n\nimport {\n  DebuggingDefaults,\n  type HandlerURIType,\n  type InferredRequestType,\n  type InferredResponseType\n} from \"@wireio/debugging-shared\"\n\n/**\n * Strongly-typed JSON-RPC 2.0 client bound to a fully-qualified endpoint URL.\n *\n * `invoke()` resolves request/response types from `HandlerMap` at the call\n * site — callers get compile-time checking of both params AND the awaited\n * result without writing generics themselves.\n *\n * The client is pure transport: no health check, no config object, no URL\n * composition. For a batteries-included wrapper with a ping round-trip and\n * default host/port resolution, use `DebuggingServerClient`.\n *\n * @example\n * const rpc = new JsonRPCClient(\"http://127.0.0.1:9876/api/opp\")\n * const resp = await rpc.invoke(ApiPaths.OPP.Methods.EnvelopeList, {\n *   epochStart: 0n,\n *   epochEnd: 0n,\n *   endpointsType: DebugOutpostEndpointsType.UNKNOWN,\n *   timestampStart: 0n,\n *   timestampEnd: 0n\n * })\n */\nexport class JsonRPCClient {\n  /**\n   * Monotonic request id. JSON-RPC 2.0 doesn't require monotonic ids, but\n   * correlating request → response via equality is the simplest valid scheme.\n   */\n  private nextId = JsonRPCClient.InitialRequestId\n\n  /**\n   * @param url - Fully-qualified endpoint URL including the path segment\n   *              (e.g. `http://127.0.0.1:9876/api/opp`). The client does\n   *              not compose scheme/host/port itself — callers own that.\n   */\n  constructor(readonly url: string) {}\n\n  /**\n   * Invoke a JSON-RPC 2.0 method.\n   *\n   * @param method - A key of `HandlerMap` (typically an enum member like\n   *                 `ApiPaths.OPP.Methods.Envelope`). Narrowing happens\n   *                 purely at the type level; at runtime this is just a\n   *                 string written into the request envelope.\n   * @param params - Request body, typed from the handler entry.\n   * @returns The decoded `result` field, typed from the handler entry.\n   * @throws When the HTTP fetch fails, the envelope is malformed, or the\n   *         server returns a JSON-RPC `error` field.\n   */\n  async invoke<P extends HandlerURIType>(\n    method: P,\n    params: InferredRequestType<P>\n  ): Promise<InferredResponseType<P>> {\n    const id = this.nextId++\n\n    const resp = await fetch(this.url, {\n      method: JsonRPCClient.HttpMethod,\n      headers: JsonRPCClient.Headers,\n      body: JSON.stringify(\n        {\n          jsonrpc: DebuggingDefaults.JsonrpcVersion,\n          method,\n          params,\n          id\n        },\n        JsonRPCClient.bigintReplacer\n      )\n    })\n\n    Assert.ok(\n      resp.ok,\n      `JSON-RPC POST failed: ${resp.status} ${resp.statusText}`\n    )\n\n    const body = (await resp.json()) as JsonRPCClient.ResponseEnvelope\n\n    Assert.ok(\n      body.jsonrpc === DebuggingDefaults.JsonrpcVersion,\n      `Invalid JSON-RPC version in response: ${body.jsonrpc}`\n    )\n    Assert.ok(\n      body.id === id,\n      `JSON-RPC id mismatch: expected ${id}, got ${body.id}`\n    )\n\n    if (body.error) {\n      throw new Error(\n        `JSON-RPC error ${body.error.code}: ${body.error.message}`\n      )\n    }\n\n    Assert.ok(\"result\" in body, \"JSON-RPC response missing 'result'\")\n    return body.result as InferredResponseType<P>\n  }\n}\n\nexport namespace JsonRPCClient {\n  /**\n   * Starting value for the request-id counter. JSON-RPC 2.0 permits any id\n   * (numeric, string, or null). Starting at 1 keeps logs readable and\n   * preserves the \"1-indexed request\" convention most JSON-RPC tooling uses.\n   */\n  export const InitialRequestId = 1\n\n  /** HTTP verb used for every RPC invocation. */\n  export const HttpMethod = \"POST\" as const\n\n  /** HTTP headers attached to every RPC invocation. */\n  export const Headers = {\n    \"Content-Type\": \"application/json\",\n    Accept: \"application/json\"\n  } as const\n\n  /**\n   * `JSON.stringify` replacer that turns `bigint` values into their\n   * decimal string form. `JSON.stringify` would otherwise throw\n   * `TypeError: Do not know how to serialize a BigInt`.\n   *\n   * Server-side, protobuf-ts's JSON parser accepts uint64 fields as\n   * either string or number, so this round-trips losslessly.\n   */\n  export function bigintReplacer(_key: string, value: unknown): unknown {\n    return typeof value === \"bigint\" ? value.toString() : value\n  }\n\n  /**\n   * Shape of a parsed JSON-RPC 2.0 response envelope. Only one of `result`\n   * or `error` is ever populated per the spec, but we keep both optional\n   * here — runtime `Assert.ok` handles the enforcement.\n   */\n  export interface ResponseEnvelope<T = unknown> {\n    jsonrpc: string\n    id: number | string | null\n    result?: T\n    error?: {\n      code: number\n      message: string\n      data?: unknown\n    }\n  }\n}\n", "import * as Fs from \"node:fs\"\nimport * as Path from \"node:path\"\nimport {\n  ClusterFiles,\n  type ClusterConfig,\n  type ClusterState\n} from \"@wireio/cluster-tool-shared\"\nimport { createHash } from \"node:crypto\"\n\nimport Bluebird from \"bluebird\"\nimport { match } from \"ts-pattern\"\n\nimport {\n  EnvelopeEventKind,\n  StreamTopic,\n  buildLineIndex,\n  collectPidSources,\n  endpointsTypeToKey,\n  extendLineIndex,\n  oppDebuggingPath,\n  parseEnvelopeStorageKey,\n  pidIsAlive,\n  plainify,\n  readEnvelopeRecordsFromDir,\n  readPid,\n  readLines,\n  resolveEndpointsType,\n  type DebugOPPEnvelopeRecord,\n  type EnvelopeEvent,\n  type InferredStreamEvent,\n  type InferredStreamParams,\n  type LineIndex,\n  type LoadEnvelopeRecordsRequest,\n  type LoadEnvelopeRecordsResponse,\n  type LogReadRequest,\n  type LogStat,\n  type LogTailEvent,\n  type LogTailParams,\n  type PidSource,\n  type ProcessLivenessEvent,\n  type ProcessLivenessSnapshot\n} from \"@wireio/debugging-shared\"\nimport {\n  DebugEnvelopeMetadataRecord,\n  DebugOutpostEndpointsType,\n  EnvelopeListEntry,\n  Envelope,\n  GetEnvelopeResponse,\n  ListEnvelopesResponse,\n  PutEnvelopeResponse,\n  type ListEnvelopesRequest,\n  type PutEnvelopeRequest\n} from \"@wireio/opp-typescript-models\"\n\nimport { DebuggingClient } from \"../DebuggingClient.js\"\nimport { DebuggingSubscription } from \"../subscriptions/index.js\"\n\n/** Caller-facing options for {@link LocalFileDebuggingClient.create}. */\nexport interface LocalFileDebuggingClientOptions {\n  /** Absolute path to the cluster directory. `cluster-config.json` must exist. */\n  clusterPath: string\n}\n\n/** Fully-resolved runtime config. */\nexport interface LocalFileDebuggingClientConfig extends Required<LocalFileDebuggingClientOptions> {}\n\n/**\n * Disk-backed `DebuggingClient` for the case where the consumer shares the\n * filesystem with the cluster (the dev-loop scenario). Reads the same files\n * the `external_debugging_plugin` and the harness's process manager write.\n *\n * Streams are implemented via `Fs.watch` (envelope dumps) and timers\n * (process liveness, log tail) — same cadences the TUI used to drive\n * directly before the abstraction landed.\n */\nexport class LocalFileDebuggingClient extends DebuggingClient {\n  /**\n   * Validate the cluster path and return a ready-to-use client. Reading\n   * files is deferred to the first method call; the only synchronous check\n   * here is \"does `cluster-config.json` exist?\", which fails fast on a\n   * misconfigured `--cluster-path` argument.\n   */\n  static async create(\n    options: LocalFileDebuggingClientOptions\n  ): Promise<LocalFileDebuggingClient> {\n    const config: LocalFileDebuggingClientConfig = {\n      clusterPath: Path.resolve(options.clusterPath)\n    }\n    const configFile = Path.join(\n      config.clusterPath,\n      ClusterFiles.ConfigFilename\n    )\n    if (!Fs.existsSync(configFile)) {\n      throw new Error(\n        `LocalFileDebuggingClient: cluster-config.json not found at ${configFile}`\n      )\n    }\n    return new LocalFileDebuggingClient(config)\n  }\n\n  /** Active subscriptions keyed by their client-allocated id. */\n  private readonly subscriptions = new Map<number, LocalSubscriptionTeardown>()\n\n  /** Monotonic id allocator for subscriptions. */\n  private nextSubscriptionId = LocalFileDebuggingClient.InitialSubscriptionId\n\n  protected constructor(readonly config: LocalFileDebuggingClientConfig) {\n    super()\n  }\n\n  // -------------------------------------------------------------------------\n  //  Lifecycle\n  // -------------------------------------------------------------------------\n\n  async connect(): Promise<void> {\n    /* no-op for local-disk transport */\n  }\n\n  async disconnect(): Promise<void> {\n    ;[...this.subscriptions.values()].forEach(teardown => teardown())\n    this.subscriptions.clear()\n  }\n\n  // -------------------------------------------------------------------------\n  //  Cluster\n  // -------------------------------------------------------------------------\n\n  async getClusterConfig(): Promise<ClusterConfig> {\n    const file = Path.join(\n        this.config.clusterPath,\n        ClusterFiles.ConfigFilename\n      ),\n      raw = await Fs.promises.readFile(file, \"utf8\")\n    return JSON.parse(raw) as ClusterConfig\n  }\n\n  async getClusterState(): Promise<ClusterState> {\n    const file = Path.join(this.config.clusterPath, ClusterFiles.StateFilename)\n    if (!Fs.existsSync(file)) return null\n    const raw = await Fs.promises.readFile(file, \"utf8\")\n    return JSON.parse(raw) as ClusterState\n  }\n\n  // -------------------------------------------------------------------------\n  //  Process monitor\n  // -------------------------------------------------------------------------\n\n  async listProcessSources(): Promise<PidSource[]> {\n    const state = await this.getClusterState()\n    return collectPidSources(this.config.clusterPath, state)\n  }\n\n  async getProcessLiveness(\n    labels: string[]\n  ): Promise<ProcessLivenessSnapshot[]> {\n    const sources = await this.listProcessSources(),\n      filtered =\n        labels.length === 0\n          ? sources\n          : sources.filter(s => labels.includes(s.label)),\n      now = Date.now()\n    return filtered.map(s => snapshotForSource(s, now))\n  }\n\n  // -------------------------------------------------------------------------\n  //  Logs\n  // -------------------------------------------------------------------------\n\n  async getLogStat(path: string): Promise<LogStat> {\n    const idx = await buildLineIndex(path)\n    return lineIndexToStat(idx)\n  }\n\n  async readLogWindow(req: LogReadRequest): Promise<string[]> {\n    const idx = await buildLineIndex(req.path)\n    return readLines(idx, req.fromLine, req.count)\n  }\n\n  // -------------------------------------------------------------------------\n  //  OPP envelope debug\n  // -------------------------------------------------------------------------\n\n  async listEnvelopes(\n    req: ListEnvelopesRequest\n  ): Promise<ListEnvelopesResponse> {\n    const storageDir = oppDebuggingPath(this.config.clusterPath)\n    if (!Fs.existsSync(storageDir)) {\n      return ListEnvelopesResponse.create({ entries: [], total: 0 })\n    }\n    const allFiles = await Fs.promises.readdir(storageDir),\n      dataFiles = allFiles\n        .filter(f => f.endsWith(LocalFileDebuggingClient.DataExt))\n        .sort()\n    const resolved = await Promise.all(\n      dataFiles.map(dataFile => resolveListEntry(dataFile, storageDir, req))\n    )\n    const entries = resolved.filter((e): e is EnvelopeListEntry => e !== null)\n    return ListEnvelopesResponse.create({ entries, total: entries.length })\n  }\n\n  async getEnvelope(key: string): Promise<GetEnvelopeResponse> {\n    const storageDir = oppDebuggingPath(this.config.clusterPath),\n      dataPath = Path.join(\n        storageDir,\n        `${key}${LocalFileDebuggingClient.DataExt}`\n      ),\n      metadataPath = Path.join(\n        storageDir,\n        `${key}${LocalFileDebuggingClient.MetadataExt}`\n      )\n    let envelopeData: Uint8Array\n    try {\n      envelopeData = await Fs.promises.readFile(dataPath)\n    } catch (err: any) {\n      if (err.code === \"ENOENT\") {\n        throw new Error(`Envelope not found: ${key}`)\n      }\n      throw err\n    }\n    const { batchOpNames, checksum } = await readMetadataSummary(metadataPath),\n      parsed = parseEnvelopeStorageKey(key),\n      stat = await Fs.promises.stat(dataPath)\n    return {\n      key,\n      epochIndex: parsed?.epochIndex ?? 0,\n      endpointsType: parsed\n        ? resolveEndpointsType(parsed.endpointsKey)\n        : DebugOutpostEndpointsType.UNKNOWN,\n      checksum,\n      batchOpNames,\n      timestamp: BigInt(Math.floor(stat.mtimeMs)),\n      dataSize: envelopeData.length,\n      envelopeData: Buffer.from(envelopeData)\n    }\n  }\n\n  async loadEnvelopeRecords(\n    req: LoadEnvelopeRecordsRequest\n  ): Promise<LoadEnvelopeRecordsResponse> {\n    const records = await readEnvelopeRecordsFromDir(\n      oppDebuggingPath(this.config.clusterPath),\n      {\n        epochStart: req.epochStart,\n        epochEnd: req.epochEnd,\n        endpointsType: req.endpointsType\n      }\n    )\n    return { records }\n  }\n\n  /**\n   * Helper used by harness/test code to seed the local OPP debugging dir.\n   * The standard write path is the sysio plugin; this method exists so unit\n   * tests and the in-process server fixture can produce envelopes through\n   * the same disk-key shape without re-implementing the storage geometry.\n   */\n  async putEnvelope(req: PutEnvelopeRequest): Promise<PutEnvelopeResponse> {\n    const storageDir = oppDebuggingPath(this.config.clusterPath)\n    await Fs.promises.mkdir(storageDir, { recursive: true })\n    // `envelopeData` is typed `Uint8Array` by the generated proto message, but\n    // a request arriving over the NetDebuggingClient's JSON transport carries\n    // it as a base64 string (JSON has no binary type). Widen to the honest\n    // runtime union at the boundary (plain assignment — no cast) and branch\n    // with a compiler-native `typeof` guard: ts-pattern's `P.string` mis-infers\n    // this arm against TS 6's generic `Uint8Array<ArrayBufferLike>` builtin.\n    const envelopeData: Uint8Array | string = req.envelopeData\n    const envelopeBytes =\n        typeof envelopeData === \"string\"\n          ? Buffer.from(envelopeData, \"base64\")\n          : Buffer.from(envelopeData),\n      checksum = createHash(\"sha256\")\n        .update(envelopeBytes)\n        .digest(\"hex\")\n        .substring(0, LocalFileDebuggingClient.ChecksumHexChars),\n      envelope = Envelope.fromBinary(envelopeBytes),\n      epochIndex = String(envelope.epochIndex).padStart(\n        LocalFileDebuggingClient.EpochIndexPadWidth,\n        \"0\"\n      ),\n      endpointsKey = endpointsTypeToKey(req.endpointsType),\n      baseKey = `${epochIndex}-${endpointsKey}-${checksum}`,\n      dataFile = Path.join(\n        storageDir,\n        `${baseKey}${LocalFileDebuggingClient.DataExt}`\n      ),\n      metadataFile = Path.join(\n        storageDir,\n        `${baseKey}${LocalFileDebuggingClient.MetadataExt}`\n      )\n    let dataExisted = false\n    try {\n      await Fs.promises.writeFile(dataFile, envelopeBytes, { flag: \"wx\" })\n    } catch (err: any) {\n      if (err.code === \"EEXIST\") {\n        dataExisted = true\n      } else {\n        throw err\n      }\n    }\n    const metadata = await readOrInitMetadata(\n      metadataFile,\n      checksum,\n      req.batchOpName\n    )\n    await Fs.promises.writeFile(\n      metadataFile,\n      DebugEnvelopeMetadataRecord.toBinary(metadata)\n    )\n    return PutEnvelopeResponse.create({\n      key: baseKey,\n      dataExisted,\n      batchOpNames: metadata.batchOpNames\n    })\n  }\n\n  // -------------------------------------------------------------------------\n  //  Streams\n  // -------------------------------------------------------------------------\n\n  async subscribe<T extends StreamTopic>(\n    topic: T,\n    params: InferredStreamParams<T>\n  ): Promise<DebuggingSubscription<InferredStreamEvent<T>>> {\n    const id = this.nextSubscriptionId++,\n      sub = new DebuggingSubscription<InferredStreamEvent<T>>(id, topic, () => {\n        const teardown = this.subscriptions.get(id)\n        this.subscriptions.delete(id)\n        teardown?.()\n      })\n    // One unavoidable cast per arm, at this facade's dispatch point (per\n    // `one-generic-facade-per-concept.md`): TS cannot correlate the generic\n    // `T` narrowed by `match(topic)` with `InferredStreamEvent<T>` resolving\n    // to the arm's concrete event type.\n    const teardown = await match(topic as StreamTopic)\n      .with(StreamTopic.LogTail, () =>\n        this.startLogTail(\n          sub as DebuggingSubscription<LogTailEvent>,\n          params as LogTailParams\n        )\n      )\n      .with(StreamTopic.ProcessLiveness, () =>\n        this.startProcessLiveness(\n          sub as DebuggingSubscription<ProcessLivenessEvent>\n        )\n      )\n      .with(StreamTopic.EnvelopeWatch, () =>\n        this.startEnvelopeWatch(sub as DebuggingSubscription<EnvelopeEvent>)\n      )\n      .exhaustive()\n    this.subscriptions.set(id, teardown)\n    return sub\n  }\n\n  // -------------------------------------------------------------------------\n  //  Stream implementations (private)\n  // -------------------------------------------------------------------------\n\n  private async startLogTail(\n    sub: DebuggingSubscription<LogTailEvent>,\n    params: LogTailParams\n  ): Promise<LocalSubscriptionTeardown> {\n    let index: LineIndex | null = null,\n      stopped = false\n    try {\n      index = await buildLineIndex(params.path)\n    } catch {\n      // File missing right now — start with no index; tick() will retry.\n    }\n    const tick = async () => {\n      if (stopped) return\n      try {\n        const next = index\n          ? await extendLineIndex(index)\n          : await buildLineIndex(params.path)\n        if (\n          index &&\n          next.totalBytes === index.totalBytes &&\n          next.ino === index.ino\n        ) {\n          return\n        }\n        const fromLine = index?.completeLineCount ?? 0,\n          appendedCount = next.completeLineCount - fromLine,\n          lines =\n            appendedCount > 0\n              ? await readLines(next, fromLine, appendedCount)\n              : []\n        index = next\n        sub.emitEvent({\n          path: params.path,\n          appendedFromLine: fromLine,\n          lines,\n          totalBytes: next.totalBytes,\n          totalLines: next.completeLineCount,\n          ino: next.ino\n        })\n      } catch {\n        /* transient; try again on next tick */\n      }\n    }\n    await tick()\n    const timer = setInterval(\n      () => void tick(),\n      LocalFileDebuggingClient.LogTailPollMs\n    )\n    return () => {\n      stopped = true\n      clearInterval(timer)\n    }\n  }\n\n  private async startProcessLiveness(\n    sub: DebuggingSubscription<ProcessLivenessEvent>\n  ): Promise<LocalSubscriptionTeardown> {\n    let prev = new Map<string, ProcessLivenessSnapshot>(),\n      stopped = false\n    const tick = async () => {\n      if (stopped) return\n      const sources = await this.listProcessSources(),\n        now = Date.now(),\n        next = new Map<string, ProcessLivenessSnapshot>()\n      sources.forEach(src => {\n        const baseline = snapshotForSource(src, now),\n          previous = prev.get(src.label),\n          exitedAt = computeExitedAt(baseline, previous, now)\n        next.set(src.label, { ...baseline, exitedAt })\n      })\n      const setSnapshots: ProcessLivenessSnapshot[] = [],\n        seen = new Set<string>(next.keys())\n      next.forEach((snap, label) => {\n        const prior = prev.get(label)\n        if (\n          !prior ||\n          prior.pid !== snap.pid ||\n          prior.alive !== snap.alive ||\n          prior.exitedAt !== snap.exitedAt\n        ) {\n          setSnapshots.push(snap)\n        }\n      })\n      const removedLabels = [...prev.keys()].filter(label => !seen.has(label))\n      prev = next\n      if (setSnapshots.length > 0 || removedLabels.length > 0) {\n        sub.emitEvent({ setSnapshots, removedLabels })\n      }\n    }\n    await tick()\n    const timer = setInterval(\n      () => void tick(),\n      LocalFileDebuggingClient.ProcessLivenessPollMs\n    )\n    return () => {\n      stopped = true\n      clearInterval(timer)\n    }\n  }\n\n  private async startEnvelopeWatch(\n    sub: DebuggingSubscription<EnvelopeEvent>\n  ): Promise<LocalSubscriptionTeardown> {\n    const storageDir = oppDebuggingPath(this.config.clusterPath)\n    await Fs.promises.mkdir(storageDir, { recursive: true })\n    const seen = new Set<string>()\n    const watcher = Fs.watch(\n      storageDir,\n      { persistent: true },\n      (_evt, filename) => {\n        if (!filename) return\n        void this.tryEmitFromFilename(\n          sub,\n          storageDir,\n          filename.toString(),\n          seen,\n          /* hydrating */ false\n        )\n      }\n    )\n    // Defer the initial hydrate dump to the next tick so consumers who\n    // register listeners immediately after `await subscribe(...)` returns\n    // still catch every replayed event.\n    const hydrate = async (): Promise<void> => {\n      const existing = await Fs.promises.readdir(storageDir),\n        baseKeys = existing\n          .filter(f => f.endsWith(LocalFileDebuggingClient.MetadataExt))\n          .map(f => f.slice(0, -LocalFileDebuggingClient.MetadataExt.length))\n      await Bluebird.each(baseKeys, async baseKey => {\n        if (sub.isClosed()) return\n        const pair = await this.readEnvelopePair(storageDir, baseKey)\n        if (!pair) return\n        seen.add(baseKey)\n        sub.emitEvent({\n          kind: EnvelopeEventKind.Hydrated,\n          epoch: pair.epoch,\n          record: pair.record\n        })\n      })\n    }\n    setImmediate(() => void hydrate())\n    return () => {\n      try {\n        watcher.close()\n      } catch {\n        /* ignore */\n      }\n    }\n  }\n\n  private async tryEmitFromFilename(\n    sub: DebuggingSubscription<EnvelopeEvent>,\n    storageDir: string,\n    filename: string,\n    seen: Set<string>,\n    hydrating: boolean\n  ): Promise<void> {\n    if (!filename.endsWith(LocalFileDebuggingClient.MetadataExt)) return\n    const baseKey = filename.slice(\n      0,\n      -LocalFileDebuggingClient.MetadataExt.length\n    )\n    if (seen.has(baseKey)) return\n    const pair = await this.readEnvelopePair(storageDir, baseKey)\n    if (!pair) return\n    seen.add(baseKey)\n    sub.emitEvent({\n      kind: hydrating ? EnvelopeEventKind.Hydrated : EnvelopeEventKind.Added,\n      epoch: pair.epoch,\n      record: pair.record\n    })\n  }\n\n  /** Read + decode `.data` + `.metadata` pair; null when either file is missing/malformed. */\n  private async readEnvelopePair(\n    storageDir: string,\n    baseKey: string\n  ): Promise<LocalFileDebuggingClient.EnvelopeRecordPair> {\n    const parsed = parseEnvelopeStorageKey(baseKey)\n    if (!parsed) return null\n    const dataPath = Path.join(\n        storageDir,\n        baseKey + LocalFileDebuggingClient.DataExt\n      ),\n      metaPath = Path.join(\n        storageDir,\n        baseKey + LocalFileDebuggingClient.MetadataExt\n      )\n    try {\n      const [dataBytes, metaBytes] = await Promise.all([\n        Fs.promises.readFile(dataPath),\n        Fs.promises.readFile(metaPath)\n      ])\n      return {\n        epoch: parsed.epochIndex,\n        record: {\n          checksum: parsed.checksum,\n          endpointsType: resolveEndpointsType(parsed.endpointsKey),\n          envelope: plainify(Envelope.fromBinary(dataBytes)),\n          metadata: plainify(DebugEnvelopeMetadataRecord.fromBinary(metaBytes)),\n          receivedAt: Date.now()\n        }\n      }\n    } catch {\n      return null\n    }\n  }\n}\n\nexport namespace LocalFileDebuggingClient {\n  /** Initial subscription id. Monotonic counter — value isn't load-bearing. */\n  export const InitialSubscriptionId = 1\n  /** File-growth poll interval for `LogTail`, ms. */\n  export const LogTailPollMs = 200\n  /** Process-liveness poll interval, ms. Mirrors prior TUI cadence. */\n  export const ProcessLivenessPollMs = 5_000\n  /** Envelope `.data` file extension. */\n  export const DataExt = \".data\" as const\n  /** Envelope `.metadata` file extension. */\n  export const MetadataExt = \".metadata\" as const\n  /** sha256 hex chars retained in storage keys + `EnvelopeListEntry.checksum`. */\n  export const ChecksumHexChars = 16\n  /** Hex chars packed into the `DebugEnvelopeMetadataRecord.checksum` u64. */\n  export const MetadataChecksumHexChars = 12\n  /** Zero-pad width applied to `epoch_index` when forming storage keys. */\n  export const EpochIndexPadWidth = 8\n\n  /** Decoded `.data` + `.metadata` pair for one stored envelope. */\n  export interface EnvelopeRecordPair {\n    epoch: number\n    record: DebugOPPEnvelopeRecord\n  }\n\n  /** Result of appending to (or freshly initializing) a metadata record. */\n  export interface MetadataUpdateResult {\n    checksum: bigint\n    batchOpNames: string[]\n  }\n\n  /** `batchOpNames` + hex `checksum` read from a metadata file. */\n  export interface MetadataSummary {\n    batchOpNames: string[]\n    checksum: string\n  }\n}\n\n// ---------------------------------------------------------------------------\n//  Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Teardown thunk returned by stream-startup methods. */\ntype LocalSubscriptionTeardown = () => void\n\n/** Snapshot a single source's pid + liveness; `exitedAt` resolved separately. */\nfunction snapshotForSource(\n  source: PidSource,\n  now: number\n): ProcessLivenessSnapshot {\n  const pid = readPid(source.pidPath),\n    alive = pidIsAlive(pid)\n  return {\n    label: source.label,\n    pid,\n    alive,\n    lastCheckedAt: now,\n    exitedAt: alive ? null : now\n  }\n}\n\n/** Decide the `exitedAt` field given current + prior snapshots. */\nfunction computeExitedAt(\n  current: ProcessLivenessSnapshot,\n  prior: ProcessLivenessSnapshot | undefined,\n  now: number\n): number {\n  return match({ alive: current.alive, prev: prior })\n    .with({ alive: true }, () => null)\n    .with({ alive: false, prev: { alive: true } }, () => now)\n    .otherwise(({ prev }) => prev?.exitedAt ?? null) as number | null\n}\n\n/** Convert a `LineIndex` snapshot into the wire-friendly `LogStat`. */\nfunction lineIndexToStat(index: LineIndex): LogStat {\n  return {\n    path: index.path,\n    ino: index.ino,\n    totalBytes: index.totalBytes,\n    totalLines: index.completeLineCount\n  }\n}\n\n/** Resolve a single `.data` filename into a populated `EnvelopeListEntry`. */\nasync function resolveListEntry(\n  dataFile: string,\n  storageDir: string,\n  filter: ListEnvelopesRequest\n): Promise<EnvelopeListEntry> {\n  const parsed = parseEnvelopeStorageKey(\n    dataFile.replace(LocalFileDebuggingClient.DataExt, \"\")\n  )\n  if (!parsed) return null\n  if (filter.epochStart > 0 && parsed.epochIndex < filter.epochStart)\n    return null\n  if (filter.epochEnd > 0 && parsed.epochIndex > filter.epochEnd) return null\n  if (filter.endpointsType !== DebugOutpostEndpointsType.UNKNOWN) {\n    const filterKey = endpointsTypeToKey(filter.endpointsType)\n    if (filterKey && parsed.endpointsKey !== filterKey) return null\n  }\n  const dataPath = Path.join(storageDir, dataFile),\n    metadataPath = Path.join(\n      storageDir,\n      dataFile.replace(\n        LocalFileDebuggingClient.DataExt,\n        LocalFileDebuggingClient.MetadataExt\n      )\n    ),\n    stat = await Fs.promises.stat(dataPath),\n    timestampMs = stat.mtimeMs\n  if (\n    Number(filter.timestampStart) > 0 &&\n    timestampMs < Number(filter.timestampStart)\n  )\n    return null\n  if (\n    Number(filter.timestampEnd) > 0 &&\n    timestampMs > Number(filter.timestampEnd)\n  )\n    return null\n  const batchOpNames = await readMetadataBatchOpNames(metadataPath)\n  return EnvelopeListEntry.create({\n    key: parsed.key,\n    epochIndex: parsed.epochIndex,\n    endpointsType: resolveEndpointsType(parsed.endpointsKey),\n    checksum: parsed.checksum,\n    batchOpNames,\n    timestamp: BigInt(Math.floor(timestampMs)),\n    dataSize: stat.size\n  })\n}\n\n/** Append `batchOpName` into an existing metadata file or initialize a new one. */\nasync function readOrInitMetadata(\n  metadataFile: string,\n  checksum: string,\n  batchOpName: string\n): Promise<LocalFileDebuggingClient.MetadataUpdateResult> {\n  try {\n    const existingBytes = await Fs.promises.readFile(metadataFile),\n      decoded = DebugEnvelopeMetadataRecord.fromBinary(existingBytes),\n      batchOpNames = [...decoded.batchOpNames]\n    if (!batchOpNames.includes(batchOpName)) batchOpNames.push(batchOpName)\n    return { checksum: decoded.checksum, batchOpNames }\n  } catch {\n    return {\n      checksum: BigInt(\n        `0x${checksum.substring(0, LocalFileDebuggingClient.MetadataChecksumHexChars)}`\n      ),\n      batchOpNames: [batchOpName]\n    }\n  }\n}\n\n/** Read just `batchOpNames` from a metadata file. */\nasync function readMetadataBatchOpNames(\n  metadataPath: string\n): Promise<string[]> {\n  try {\n    const metaBytes = await Fs.promises.readFile(metadataPath)\n    return [...DebugEnvelopeMetadataRecord.fromBinary(metaBytes).batchOpNames]\n  } catch {\n    return []\n  }\n}\n\n/** Read both `batchOpNames` and the hex checksum from a metadata file. */\nasync function readMetadataSummary(\n  metadataPath: string\n): Promise<LocalFileDebuggingClient.MetadataSummary> {\n  try {\n    const metaBytes = await Fs.promises.readFile(metadataPath),\n      meta = DebugEnvelopeMetadataRecord.fromBinary(metaBytes)\n    return {\n      batchOpNames: [...meta.batchOpNames],\n      checksum: meta.checksum.toString(16)\n    }\n  } catch {\n    return { batchOpNames: [], checksum: \"\" }\n  }\n}\n", "import { EventEmitter } from \"eventemitter3\"\n\nimport type { ClosedReason, StreamTopic } from \"@wireio/debugging-shared\"\n\n/**\n * Event surface for a subscription. Identity-mapped string enum so listener\n * keys read the same on the wire and in code.\n */\nexport enum DebuggingSubscriptionEventName {\n  Event = \"event\",\n  Closed = \"closed\"\n}\n\n/**\n * Typed event map enforced by `eventemitter3` at compile time. Listeners\n * for `event` receive the topic-specific payload `T`; listeners for\n * `closed` receive a typed reason from `@wireio/debugging-shared`.\n *\n * Keys are spelled as string literals (rather than computed from\n * `DebuggingSubscriptionEventName`) so consumers can use either the\n * literal or the enum interchangeably without TypeScript fighting them.\n */\nexport interface DebuggingSubscriptionEvents<T> {\n  event: (payload: T) => void\n  closed: (reason: ClosedReason) => void\n}\n\n/**\n * Single, transport-agnostic subscription handle. Both\n * `LocalFileDebuggingClient` and `NetDebuggingClient` return instances of\n * this exact class so consumers (TUI services, future tools) treat\n * subscriptions identically regardless of transport.\n *\n * Implementations register an `onClose` thunk that the subscription invokes\n * when the consumer calls `close()`. This gives the transport a clean teardown\n * hook without exposing transport details on the subscription surface.\n */\nexport class DebuggingSubscription<T> extends EventEmitter<\n  DebuggingSubscriptionEvents<T>\n> {\n  /**\n   * Whether `close()` has been invoked or the transport already pushed a\n   * `closed` event. Idempotent — subsequent calls are no-ops.\n   */\n  private closed = false\n\n  /**\n   * Buffer for `event` payloads pushed by the transport before the\n   * consumer has had a chance to attach a listener. Without this, the\n   * race between `await subscribe(...)` returning and the next\n   * `sub.on(\"event\", ...)` call meant the first hydration events\n   * (which can arrive on the same tick as `Subscribed`) were silently\n   * dropped — `EventEmitter3` ignores `emit` to a listenerless event.\n   *\n   * Drained the moment a listener is attached.\n   */\n  private pendingEvents: T[] = []\n\n  /**\n   * Closed-reason captured before any `closed` listener was attached.\n   * Surfaces only when the transport pushes a `Closed` frame in the\n   * same tick window as the Subscribed/listener attach race.\n   */\n  private pendingCloseReason: ClosedReason | null = null\n\n  /**\n   * @param id Subscription id allocated by the consumer. Used by the WS\n   *           transport to route server-pushed events to the right\n   *           subscription instance.\n   * @param topic The stream topic this subscription belongs to.\n   * @param onCloseInternal Transport-supplied teardown hook; invoked exactly once\n   *                from `close()`.\n   */\n  constructor(\n    readonly id: number,\n    readonly topic: StreamTopic,\n    private readonly onCloseInternal: (reason: ClosedReason) => void\n  ) {\n    super()\n  }\n\n  /** Emit a payload to every listener. Called by transports, not consumers. */\n  emitEvent(payload: T): void {\n    if (this.closed) return\n    if (this.listenerCount(DebuggingSubscriptionEventName.Event) === 0) {\n      this.pendingEvents.push(payload)\n      return\n    }\n    this.emit(DebuggingSubscriptionEventName.Event, payload)\n  }\n\n  /**\n   * Mark the subscription closed and notify listeners. Idempotent — no-op on\n   * a closed subscription. Called by transports when the server pushes a\n   * `Closed` frame, OR when `close()` is invoked from the consumer.\n   */\n  notifyClosed(reason: ClosedReason): void {\n    if (this.closed) return\n    this.closed = true\n    if (this.listenerCount(DebuggingSubscriptionEventName.Closed) === 0) {\n      this.pendingCloseReason = reason\n    } else {\n      this.emit(DebuggingSubscriptionEventName.Closed, reason)\n    }\n    // Listeners may be re-registered later (e.g. async consumer); keep\n    // them attached so any pending events that were queued before close\n    // can still drain when their listener finally arrives.\n  }\n\n  /**\n   * Cancel the subscription. Invokes the transport's teardown hook (which\n   * sends an `Unsubscribe` frame on a WS transport, or stops a polling\n   * timer on the local transport) and emits `closed`.\n   */\n  close(reason: ClosedReason): void {\n    if (this.closed) return\n    this.onCloseInternal(reason)\n    this.notifyClosed(reason)\n  }\n\n  /** Whether the subscription is no longer accepting events. */\n  isClosed(): boolean {\n    return this.closed\n  }\n\n  /**\n   * Override `on` to drain any events buffered before the listener was\n   * attached. Drains on the next tick so the consumer's call site\n   * (`subscription.on(\"event\", handler)`) finishes synchronously before\n   * the first replayed event fires — preserving the contract that\n   * listeners receive events strictly after registration.\n   */\n  override on(\n    event: keyof DebuggingSubscriptionEvents<T>,\n    fn: (...args: any[]) => void,\n    context?: any\n  ): this {\n    // eventemitter3's typed `on` overloads collapse on a union key, so we\n    // call through `super` with a relaxed cast — runtime behavior is\n    // identical to the typed version.\n    ;(super.on as any)(event, fn, context)\n    if (\n      event === DebuggingSubscriptionEventName.Event &&\n      this.pendingEvents.length > 0\n    ) {\n      const drain = this.pendingEvents\n      this.pendingEvents = []\n      setImmediate(() =>\n        drain.forEach(p => this.emit(DebuggingSubscriptionEventName.Event, p))\n      )\n    }\n    if (\n      event === DebuggingSubscriptionEventName.Closed &&\n      this.pendingCloseReason !== null\n    ) {\n      const reason = this.pendingCloseReason\n      this.pendingCloseReason = null\n      setImmediate(() =>\n        this.emit(DebuggingSubscriptionEventName.Closed, reason)\n      )\n    }\n    return this\n  }\n}\n", "import Assert from \"node:assert\"\nimport type { ClusterConfig, ClusterState } from \"@wireio/cluster-tool-shared\"\nimport { defaults } from \"lodash\"\n\nimport {\n  ApiPaths,\n  DebuggingDefaults,\n  FROM_JSON_OPTIONS,\n  type GetClusterConfigResponse,\n  type GetClusterStateResponse,\n  type GetProcessLivenessRequest,\n  type GetProcessLivenessResponse,\n  type InferredStreamEvent,\n  type InferredStreamParams,\n  type ListProcessesResponse,\n  type LoadEnvelopeRecordsRequest,\n  type LoadEnvelopeRecordsResponse,\n  type LogReadRequest,\n  type LogReadResponse,\n  type LogStat,\n  type LogStatRequest,\n  type PidSource,\n  type ProcessLivenessSnapshot,\n  type StreamTopic\n} from \"@wireio/debugging-shared\"\nimport {\n  GetEnvelopeResponse,\n  ListEnvelopesResponse,\n  type GetEnvelopeRequest,\n  type ListEnvelopesRequest\n} from \"@wireio/opp-typescript-models\"\nimport type { JsonValue } from \"@protobuf-ts/runtime\"\n\nimport { DebuggingClient } from \"../DebuggingClient.js\"\nimport { JsonRPCClient } from \"../rpc/JsonRPCClient.js\"\nimport { DebuggingSubscription } from \"../subscriptions/index.js\"\nimport { WebSocketStreamClient } from \"./WebSocketStreamClient.js\"\n\n/** Caller-facing knobs for {@link NetDebuggingClient.create}. */\nexport interface NetDebuggingClientOptions {\n  /** Server base URL, e.g. `\"http://localhost:9876\"`. */\n  baseUrl?: string\n}\n\n/** Fully-resolved runtime config. */\nexport interface NetDebuggingClientConfig extends Required<NetDebuggingClientOptions> {}\n\n/**\n * `DebuggingClient` over HTTP+WebSocket. Per-feature {@link JsonRPCClient}\n * instances handle unary calls; a single {@link WebSocketStreamClient}\n * multiplexes every stream subscription.\n *\n * `create()` performs a `GET /api/ping` round-trip and opens the WS\n * connection so callers can fail fast on a misconfigured `baseUrl`.\n */\nexport class NetDebuggingClient extends DebuggingClient {\n  static async create(\n    options: NetDebuggingClientOptions = {}\n  ): Promise<NetDebuggingClient> {\n    const config = defaults(\n      { ...options },\n      { baseUrl: NetDebuggingClient.DefaultURL }\n    ) as NetDebuggingClientConfig\n\n    const pingUrl = `${config.baseUrl}${ApiPaths.Ping}`,\n      pingResp = await fetch(pingUrl)\n    Assert.ok(\n      pingResp.status === 200,\n      `Debugging server not reachable at ${pingUrl}`\n    )\n\n    const oppRpc = new JsonRPCClient(\n        `${config.baseUrl}${ApiPaths.OPP.Endpoint}`\n      ),\n      clusterRpc = new JsonRPCClient(\n        `${config.baseUrl}${ApiPaths.Cluster.Endpoint}`\n      ),\n      processesRpc = new JsonRPCClient(\n        `${config.baseUrl}${ApiPaths.Processes.Endpoint}`\n      ),\n      logsRpc = new JsonRPCClient(`${config.baseUrl}${ApiPaths.Logs.Endpoint}`),\n      ws = new WebSocketStreamClient(config.baseUrl)\n    return new NetDebuggingClient(\n      config,\n      oppRpc,\n      clusterRpc,\n      processesRpc,\n      logsRpc,\n      ws\n    )\n  }\n\n  protected constructor(\n    readonly config: NetDebuggingClientConfig,\n    private readonly oppRpc: JsonRPCClient,\n    private readonly clusterRpc: JsonRPCClient,\n    private readonly processesRpc: JsonRPCClient,\n    private readonly logsRpc: JsonRPCClient,\n    private readonly ws: WebSocketStreamClient\n  ) {\n    super()\n  }\n\n  // -------------------------------------------------------------------------\n  //  Lifecycle\n  // -------------------------------------------------------------------------\n\n  async connect(): Promise<void> {\n    await this.ws.connect()\n  }\n\n  async disconnect(): Promise<void> {\n    await this.ws.disconnect()\n  }\n\n  // -------------------------------------------------------------------------\n  //  Cluster\n  // -------------------------------------------------------------------------\n\n  async getClusterConfig(): Promise<ClusterConfig> {\n    const resp = (await this.clusterRpc.invoke(\n      ApiPaths.Cluster.Methods.GetConfig,\n      {}\n    )) as GetClusterConfigResponse\n    return resp\n  }\n\n  async getClusterState(): Promise<ClusterState> {\n    const resp = (await this.clusterRpc.invoke(\n      ApiPaths.Cluster.Methods.GetState,\n      {}\n    )) as GetClusterStateResponse\n    return resp.state\n  }\n\n  // -------------------------------------------------------------------------\n  //  Process monitor\n  // -------------------------------------------------------------------------\n\n  async listProcessSources(): Promise<PidSource[]> {\n    const resp = (await this.processesRpc.invoke(\n      ApiPaths.Processes.Methods.List,\n      {}\n    )) as ListProcessesResponse\n    return resp.sources\n  }\n\n  async getProcessLiveness(\n    labels: string[]\n  ): Promise<ProcessLivenessSnapshot[]> {\n    const params: GetProcessLivenessRequest = { labels },\n      resp = (await this.processesRpc.invoke(\n        ApiPaths.Processes.Methods.GetLiveness,\n        params\n      )) as GetProcessLivenessResponse\n    return resp.snapshots\n  }\n\n  // -------------------------------------------------------------------------\n  //  Logs\n  // -------------------------------------------------------------------------\n\n  async getLogStat(path: string): Promise<LogStat> {\n    const params: LogStatRequest = { path }\n    return (await this.logsRpc.invoke(\n      ApiPaths.Logs.Methods.GetStat,\n      params\n    )) as LogStat\n  }\n\n  async readLogWindow(req: LogReadRequest): Promise<string[]> {\n    const resp = (await this.logsRpc.invoke(\n      ApiPaths.Logs.Methods.Read,\n      req\n    )) as LogReadResponse\n    return resp.lines\n  }\n\n  // -------------------------------------------------------------------------\n  //  OPP envelope debug\n  //\n  //  Server-side these go through protobuf-ts JSON encoding (the wire\n  //  format is JSON). We round-trip the response back through\n  //  `MessageType.fromJson()` so callers receive a proper protobuf-ts\n  //  message with the right field types (`bigint` for uint64,\n  //  `Uint8Array` for bytes).\n  // -------------------------------------------------------------------------\n\n  async listEnvelopes(\n    req: ListEnvelopesRequest\n  ): Promise<ListEnvelopesResponse> {\n    const json = await this.oppRpc.invoke(\n      ApiPaths.OPP.Methods.EnvelopeList,\n      req\n    )\n    // `invoke`'s inferred type is the protobuf-ts message interface\n    // (`ListEnvelopesResponse`, with real `bigint`/`Uint8Array` field types),\n    // but the value crossing the wire is plain parsed JSON matching\n    // protobuf-ts's own `JsonValue` shape — the two are genuinely\n    // structurally incompatible (bigint has no JsonValue member), so a\n    // single-step assertion doesn't typecheck either direction.\n    return ListEnvelopesResponse.fromJson(\n      json as unknown as JsonValue,\n      FROM_JSON_OPTIONS\n    )\n  }\n\n  async getEnvelope(key: string): Promise<GetEnvelopeResponse> {\n    const params: GetEnvelopeRequest = { key },\n      json = await this.oppRpc.invoke(ApiPaths.OPP.Methods.EnvelopeGet, params)\n    // Same protobuf-ts JSON-boundary mismatch as `listEnvelopes` above.\n    return GetEnvelopeResponse.fromJson(\n      json as unknown as JsonValue,\n      FROM_JSON_OPTIONS\n    )\n  }\n\n  async loadEnvelopeRecords(\n    req: LoadEnvelopeRecordsRequest\n  ): Promise<LoadEnvelopeRecordsResponse> {\n    return (await this.oppRpc.invoke(\n      ApiPaths.OPP.Methods.LoadRecords,\n      req\n    )) as LoadEnvelopeRecordsResponse\n  }\n\n  // -------------------------------------------------------------------------\n  //  Streams\n  // -------------------------------------------------------------------------\n\n  async subscribe<T extends StreamTopic>(\n    topic: T,\n    params: InferredStreamParams<T>\n  ): Promise<DebuggingSubscription<InferredStreamEvent<T>>> {\n    return this.ws.subscribe(topic, params)\n  }\n}\n\nexport namespace NetDebuggingClient {\n  /** Network defaults re-surfaced from {@link DebuggingDefaults} for factory ergonomics. */\n  export const DefaultHost = DebuggingDefaults.Host\n  export const DefaultPort = DebuggingDefaults.Port\n  export const DefaultScheme = DebuggingDefaults.Scheme\n  export const DefaultURL = DebuggingDefaults.URL\n}\n", "import createWebSocketStream from './lib/stream.js';\nimport extension from './lib/extension.js';\nimport PerMessageDeflate from './lib/permessage-deflate.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport subprotocol from './lib/subprotocol.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport {\n  createWebSocketStream,\n  extension,\n  PerMessageDeflate,\n  Receiver,\n  Sender,\n  subprotocol,\n  WebSocket,\n  WebSocketServer\n};\n\nexport default WebSocket;\n", "import { WebSocket } from \"ws\"\nimport {\n  ApiPaths,\n  ClosedReason,\n  StreamFrameType,\n  StreamTopic,\n  isClosedFrame,\n  isErrorFrame,\n  isEventFrame,\n  isStreamFrame,\n  isSubscribedFrame,\n  type EventFrame,\n  type InferredStreamEvent,\n  type InferredStreamParams,\n  type StreamFrame,\n  type SubscribeFrame,\n  type UnsubscribeFrame\n} from \"@wireio/debugging-shared\"\n\nimport { DebuggingSubscription } from \"../subscriptions/index.js\"\n\n/**\n * Per-subscription bookkeeping held by {@link WebSocketStreamClient}.\n * Stored in a map keyed by the client-allocated `id` so inbound frames\n * (`Event`, `Closed`) can route to the right consumer subscription.\n */\ninterface ActiveSubscription<T extends StreamTopic> {\n  topic: T\n  subscription: DebuggingSubscription<InferredStreamEvent<T>>\n  /** Resolves with `true` once the server sends `Subscribed`. */\n  ack: Promise<void>\n  ackResolve: () => void\n  ackReject: (err: Error) => void\n}\n\n/**\n * Single-connection WebSocket transport for stream subscriptions. Holds\n * one open WS per `WebSocketStreamClient` instance, multiplexes every\n * topic over it, and routes inbound frames by subscription id.\n *\n * Reconnection is out of scope for v1 — when the server drops the\n * connection, every active subscription receives a `Closed` event with\n * `ServerShutdown` and the consumer is expected to discard the client.\n */\nexport class WebSocketStreamClient {\n  private ws: WebSocket | null = null\n  private nextId = WebSocketStreamClient.InitialSubscriptionId\n  private readonly subs = new Map<number, ActiveSubscription<StreamTopic>>()\n\n  /**\n   * @param baseUrl Server origin like `http://127.0.0.1:9876`. The WS\n   *                client appends `ApiPaths.Stream.Path` and swaps the\n   *                scheme to `ws(s)`.\n   */\n  constructor(readonly baseUrl: string) {}\n\n  /**\n   * Open the WebSocket. Returns once the underlying socket is `OPEN`\n   * (resolves to no value).\n   */\n  async connect(): Promise<void> {\n    if (this.ws) return\n    const url = `${this.baseUrl.replace(/^http/, \"ws\")}${ApiPaths.Stream.Path}`,\n      ws = new WebSocket(url)\n    this.ws = ws\n    await new Promise<void>((resolve, reject) => {\n      ws.once(\"open\", () => resolve())\n      ws.once(\"error\", reject)\n    })\n    ws.on(\"message\", raw => this.onMessage(raw.toString()))\n    ws.on(\"close\", () => this.onClose())\n  }\n\n  /**\n   * Cleanly close the WebSocket. Each active subscription receives\n   * `closed(ServerShutdown)` so consumer cleanup runs even when the\n   * client is shutting itself down.\n   */\n  async disconnect(): Promise<void> {\n    this.subs.forEach(sub =>\n      sub.subscription.notifyClosed(ClosedReason.ServerShutdown)\n    )\n    this.subs.clear()\n    if (!this.ws) return\n    const ws = this.ws\n    this.ws = null\n    ws.close()\n  }\n\n  /**\n   * Subscribe to `topic` with the typed `params`. Resolves with the\n   * `DebuggingSubscription` once the server has acknowledged with\n   * `Subscribed`. Inbound `Event` frames are routed to the subscription's\n   * `event` listener; `Closed` and protocol errors fire `closed`.\n   */\n  async subscribe<T extends StreamTopic>(\n    topic: T,\n    params: InferredStreamParams<T>\n  ): Promise<DebuggingSubscription<InferredStreamEvent<T>>> {\n    if (!this.ws) {\n      throw new Error(\"WebSocketStreamClient: connect() before subscribe()\")\n    }\n    const id = this.nextId++,\n      sub = new DebuggingSubscription<InferredStreamEvent<T>>(\n        id,\n        topic,\n        reason => this.sendUnsubscribe(id, reason)\n      )\n    let ackResolve!: () => void, ackReject!: (err: Error) => void\n    const ack = new Promise<void>((res, rej) => {\n      ackResolve = res\n      ackReject = rej\n    })\n    const record: ActiveSubscription<T> = {\n      topic,\n      subscription: sub,\n      ack,\n      ackResolve,\n      ackReject\n    }\n    this.subs.set(id, record as unknown as ActiveSubscription<StreamTopic>)\n    const subscribeFrame: SubscribeFrame<T> = {\n      type: StreamFrameType.Subscribe,\n      id,\n      topic,\n      params\n    }\n    this.send(subscribeFrame)\n    await ack\n    return sub\n  }\n\n  // -------------------------------------------------------------------------\n  //  Internals\n  // -------------------------------------------------------------------------\n\n  private onMessage(raw: string): void {\n    let parsed: unknown\n    try {\n      parsed = JSON.parse(raw)\n    } catch {\n      return\n    }\n    if (!isStreamFrame(parsed)) return\n    const frame = parsed as StreamFrame\n    if (isSubscribedFrame(frame)) {\n      const rec = this.subs.get(frame.id)\n      rec?.ackResolve()\n    } else if (isEventFrame(frame)) {\n      const rec = this.subs.get(frame.id)\n      if (!rec) return\n      rec.subscription.emitEvent(\n        (frame as EventFrame<StreamTopic>).payload as never\n      )\n    } else if (isClosedFrame(frame)) {\n      const rec = this.subs.get(frame.id)\n      if (!rec) return\n      this.subs.delete(frame.id)\n      rec.subscription.notifyClosed(frame.reason)\n    } else if (isErrorFrame(frame)) {\n      // Protocol-level error — terminate every active subscription with\n      // an InternalError reason; the consumer must reconnect.\n      this.subs.forEach(rec => {\n        rec.ackReject(new Error(frame.message))\n        rec.subscription.notifyClosed(ClosedReason.InternalError)\n      })\n      this.subs.clear()\n    }\n  }\n\n  private onClose(): void {\n    this.subs.forEach(rec =>\n      rec.subscription.notifyClosed(ClosedReason.ServerShutdown)\n    )\n    this.subs.clear()\n    this.ws = null\n  }\n\n  private sendUnsubscribe(id: number, _reason: ClosedReason): void {\n    if (!this.subs.has(id)) return\n    this.subs.delete(id)\n    const frame: UnsubscribeFrame = {\n      type: StreamFrameType.Unsubscribe,\n      id\n    }\n    this.send(frame)\n  }\n\n  private send(frame: StreamFrame): void {\n    if (!this.ws || this.ws.readyState !== this.ws.OPEN) return\n    this.ws.send(JSON.stringify(frame))\n  }\n}\n\nexport namespace WebSocketStreamClient {\n  /** Initial subscription id. Monotonic counter; value not load-bearing. */\n  export const InitialSubscriptionId = 1\n}\n", "import { Envelope } from \"@wireio/opp-typescript-models\"\nimport { bufToHex, formatTimestamp } from \"./formatter.js\"\n\n/**\n * Renders the decoded OPP envelope section of the plain inspect view. Follows\n * the `Renderer { render(): string }` shape used across the harness; the raw\n * envelope bytes are injected via the constructor.\n */\nexport class EnvelopeRenderer {\n  constructor(private readonly envelopeData: Uint8Array) {}\n\n  /** The multi-line envelope section, or a decode-failure line on bad bytes. */\n  render(): string {\n    try {\n      const envelope = Envelope.fromBinary(this.envelopeData)\n      const head = [\n        \"\",\n        \"--- Envelope Contents ---\",\n        `  Epoch Index:     ${envelope.epochIndex}`,\n        `  Epoch Timestamp: ${formatTimestamp(Number(envelope.epochTimestamp))}`,\n        `  Envelope Hash:   ${bufToHex(envelope.envelopeHash)}`,\n        `  Previous Hash:   ${bufToHex(envelope.previousEnvelopeHash)}`,\n        `  Messages:        ${envelope.messages.length}`\n      ]\n\n      const messageLines = envelope.messages.flatMap((msg, i) => {\n        const payload = msg.payload\n        const header = msg.header\n          ? [\n              `    Message ID:    ${bufToHex(msg.header.messageId)}`,\n              `    Prev Msg ID:   ${bufToHex(msg.header.previousMessageId)}`,\n              `    Timestamp:     ${formatTimestamp(Number(msg.header.timestamp))}`\n            ]\n          : []\n        const payloadLines = payload\n          ? [\n              `    Version:       ${payload.version}`,\n              `    Attestations:  ${payload.attestations.length}`,\n              ...payload.attestations.map(\n                (att, a) =>\n                  `      [${a}] type=${att.type} data_size=${att.dataSize}`\n              )\n            ]\n          : []\n        return [\"\", `  Message[${i}]`, ...header, ...payloadLines]\n      })\n\n      return [...head, ...messageLines].join(\"\\n\")\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err)\n      return `\\n--- Envelope decode failed: ${message} ---`\n    }\n  }\n}\n", "import { endpointsTypeToKey } from \"@wireio/debugging-shared\"\nimport {\n  EnvelopeListEntry,\n  Envelope,\n  GetEnvelopeResponse\n} from \"@wireio/opp-typescript-models\"\nimport { EnvelopeRenderer } from \"./EnvelopeRenderer.js\"\n\n/** Output format produced by {@link formatList} and {@link formatInspect}. */\nexport enum OutputFormat {\n  plain = \"plain\",\n  json = \"json\"\n}\n\n/**\n * Fixed-width column sizes for `OutputFormat.plain` list rendering. Change\n * these in tandem \u2014 the header and the row builder both read from the same\n * namespace, so widening a column here widens it everywhere.\n */\nnamespace ColumnWidth {\n  export const Epoch = 8\n  export const Endpoints = 28\n  export const Checksum = 18\n  export const Operators = 30\n  export const Size = 8\n  export const Timestamp = 24\n}\n\n/**\n * Display constants for the plain formatter (companion namespace, like\n * {@link ColumnWidth}).\n */\nnamespace Formatter {\n  /** Printed when the endpoints enum resolves to an unknown variant. */\n  export const UnknownEndpoints = \"UNKNOWN\"\n  /** Caps the rendered hex width for byte-buffer fields. */\n  export const BufHexChars = 32\n  /**\n   * Source-buffer length (bytes) that trips the `\"...\"` suffix \u2014 compared\n   * against the ORIGINAL byte count, not the trimmed hex length, so keep it\n   * consistent with `BufHexChars / 2`.\n   */\n  export const BufHexEllipsisBytes = 16\n}\n\n/**\n * Format a list of envelope entries as either a fixed-width table or JSON.\n *\n * @param entries - Envelope list entries returned by `EnvelopeList`.\n * @param format  - Target output format.\n * @returns Newline-joined table (plain) or a pretty-printed JSON array.\n *\n * @example\n * stdout.info(formatList(resp.entries, OutputFormat.plain))\n */\nexport function formatList(\n  entries: EnvelopeListEntry[],\n  format: OutputFormat\n): string {\n  if (format === OutputFormat.json) {\n    return JSON.stringify(entries.map(entryToPlainObject), null, 2)\n  }\n\n  if (entries.length === 0) {\n    return \"No envelopes found.\"\n  }\n\n  const header = [\n    padRight(\"EPOCH\", ColumnWidth.Epoch),\n    padRight(\"ENDPOINTS\", ColumnWidth.Endpoints),\n    padRight(\"CHECKSUM\", ColumnWidth.Checksum),\n    padRight(\"OPERATORS\", ColumnWidth.Operators),\n    padRight(\"SIZE\", ColumnWidth.Size),\n    padRight(\"TIMESTAMP\", ColumnWidth.Timestamp)\n  ].join(\"  \")\n\n  const separator = \"-\".repeat(header.length)\n\n  const rows = entries.map(e =>\n    [\n      padRight(String(e.epochIndex), ColumnWidth.Epoch),\n      padRight(\n        endpointsTypeToKey(e.endpointsType) ?? Formatter.UnknownEndpoints,\n        ColumnWidth.Endpoints\n      ),\n      padRight(e.checksum, ColumnWidth.Checksum),\n      padRight(e.batchOpNames.join(\", \"), ColumnWidth.Operators),\n      padRight(String(e.dataSize), ColumnWidth.Size),\n      padRight(formatTimestamp(Number(e.timestamp)), ColumnWidth.Timestamp)\n    ].join(\"  \")\n  )\n\n  return [header, separator, ...rows].join(\"\\n\")\n}\n\n/**\n * Format a single envelope detail view, optionally decoding the embedded\n * protobuf payload.\n *\n * @param resp   - Response body from `EnvelopeGet`.\n * @param format - Target output format.\n * @returns Multi-line string (plain) or pretty-printed JSON object.\n *\n * @example\n * stdout.info(formatInspect(resp, OutputFormat.json))\n */\nexport function formatInspect(\n  resp: GetEnvelopeResponse,\n  format: OutputFormat\n): string {\n  if (format === OutputFormat.json) {\n    return JSON.stringify(inspectToPlainObject(resp), null, 2)\n  }\n\n  const headerLines = [\n    `Key:           ${resp.key}`,\n    `Epoch:         ${resp.epochIndex}`,\n    `Endpoints:     ${endpointsTypeToKey(resp.endpointsType) ?? Formatter.UnknownEndpoints}`,\n    `Checksum:      ${resp.checksum}`,\n    `Operators:     ${resp.batchOpNames.join(\", \")}`,\n    `Data Size:     ${resp.dataSize} bytes`,\n    `Timestamp:     ${formatTimestamp(Number(resp.timestamp))}`\n  ]\n\n  const envelopeSection = resp.envelopeData?.length\n    ? new EnvelopeRenderer(resp.envelopeData).render()\n    : null\n\n  return [...headerLines, ...(envelopeSection ? [envelopeSection] : [])].join(\n    \"\\n\"\n  )\n}\n\n// ---------------------------------------------------------------------------\n//  Helpers\n// ---------------------------------------------------------------------------\n\n/** Shape an envelope list entry for JSON output. */\nfunction entryToPlainObject(e: EnvelopeListEntry): Record<string, unknown> {\n  return {\n    key: e.key,\n    epochIndex: e.epochIndex,\n    endpointsType: endpointsTypeToKey(e.endpointsType) ?? Formatter.UnknownEndpoints,\n    checksum: e.checksum,\n    batchOpNames: e.batchOpNames,\n    dataSize: e.dataSize,\n    timestamp: Number(e.timestamp),\n    timestampIso: formatTimestamp(Number(e.timestamp))\n  }\n}\n\n/** Shape an envelope inspect response for JSON output. */\nfunction inspectToPlainObject(\n  resp: GetEnvelopeResponse\n): Record<string, unknown> {\n  const obj: Record<string, unknown> = {\n    key: resp.key,\n    epochIndex: resp.epochIndex,\n    endpointsType: endpointsTypeToKey(resp.endpointsType) ?? Formatter.UnknownEndpoints,\n    checksum: resp.checksum,\n    batchOpNames: resp.batchOpNames,\n    dataSize: resp.dataSize,\n    timestamp: Number(resp.timestamp),\n    timestampIso: formatTimestamp(Number(resp.timestamp))\n  }\n\n  if (resp.envelopeData?.length) {\n    try {\n      const envelope = Envelope.fromBinary(resp.envelopeData)\n      obj.envelope = {\n        epochIndex: envelope.epochIndex,\n        epochTimestamp: Number(envelope.epochTimestamp),\n        envelopeHash: bufToHex(envelope.envelopeHash),\n        previousEnvelopeHash: bufToHex(envelope.previousEnvelopeHash),\n        messageCount: envelope.messages.length,\n        messages: envelope.messages.map((msg, i) => ({\n          index: i,\n          messageId: msg.header ? bufToHex(msg.header.messageId) : null,\n          previousMessageId: msg.header\n            ? bufToHex(msg.header.previousMessageId)\n            : null,\n          timestamp: msg.header ? Number(msg.header.timestamp) : null,\n          version: msg.payload?.version ?? null,\n          attestationCount: msg.payload?.attestations.length ?? 0,\n          attestations: (msg.payload?.attestations ?? []).map(a => ({\n            type: a.type,\n            dataSize: a.dataSize\n          }))\n        }))\n      }\n    } catch (err: any) {\n      obj.envelopeDecodeError = err.message\n    }\n  }\n\n  return obj\n}\n\n/** ISO-8601 timestamp, or `\"-\"` for missing/zero values. */\nexport function formatTimestamp(ms: number): string {\n  return ms <= 0 ? \"-\" : new Date(ms).toISOString()\n}\n\n/**\n * Truncated hex representation of a byte buffer. Returns `\"(empty)\"` for\n * missing/zero-length input and appends `\"...\"` when the source exceeds\n * {@link Formatter.BufHexEllipsisBytes} bytes.\n */\nexport function bufToHex(buf: Uint8Array | undefined): string {\n  if (!buf || buf.length === 0) return \"(empty)\"\n  const hex = Buffer.from(buf).toString(\"hex\").substring(0, Formatter.BufHexChars)\n  return buf.length > Formatter.BufHexEllipsisBytes ? `${hex}...` : hex\n}\n\n/** Right-pad `s` to `width` columns, truncating if already longer. */\nfunction padRight(s: string, width: number): string {\n  return s.length >= width\n    ? s.substring(0, width)\n    : s + \" \".repeat(width - s.length)\n}\n", "import {\n  getLogger,\n  getLoggingManager,\n  type Appender,\n  type Logger,\n  type LogRecord\n} from \"@wireio/shared\"\n\n/** Category (prefix) marking a logger whose records are raw stdout \u2014 the clean data channel. */\nconst StdoutCategory = \"stdout\"\n/** Category (prefix) marking a logger whose records are raw stderr. */\nconst StderrCategory = \"stderr\"\n\nconst hasStream = (category: string, stream: string): boolean =>\n  category === stream || category.startsWith(`${stream}:`)\n\n/**\n * The package's single log appender. Routes by category so every channel goes\n * through the framework (no `console.*`, per `use-logging-framework.md`):\n *\n * - a `getStdoutLogger()` logger \u2192 its raw message on **stdout** (no\n *   timestamp/level/prefix), so piped data output stays machine-clean. This is\n *   the ONLY place `process.stdout.write` is permitted.\n * - a `getStderrLogger()` logger \u2192 its raw message on **stderr**.\n * - every other logger (`getLogger(__filename)` diagnostics) \u2192 a formatted line\n *   on **stderr**, keeping stdout a pure data channel.\n *\n * Installed once (module load) via `setAppenders`, preempting the\n * `@wireio/shared` lazy `ConsoleAppender` (which would ALSO print the stdout\n * category and double up the output).\n */\nclass StdStreamAppender implements Appender {\n  append(record: LogRecord): void {\n    if (hasStream(record.category, StdoutCategory)) {\n      process.stdout.write(record.message + \"\\n\")\n      return\n    }\n    if (hasStream(record.category, StderrCategory)) {\n      process.stderr.write(record.message + \"\\n\")\n      return\n    }\n    const args = (record.args ?? [])\n      .map(arg => (typeof arg === \"string\" ? arg : JSON.stringify(arg)))\n      .join(\" \")\n    const suffix = args.length > 0 ? ` ${args}` : \"\"\n    process.stderr.write(\n      `[${record.category}] (${record.level}) ${record.message}${suffix}\\n`\n    )\n  }\n}\n\ngetLoggingManager().setAppenders(new StdStreamAppender())\n\n/**\n * A logger whose records are written RAW to **stdout** \u2014 the clean, pipeable\n * data channel (tables, inspect dumps, machine-readable output). Per-file\n * diagnostics still go through `const log = getLogger(__filename)`; this is the\n * separate data channel.\n *\n * @param name - Optional sub-category (`stdout:<name>`); routing is unaffected.\n * @returns The stdout data logger.\n */\nexport function getStdoutLogger(name?: string): Logger {\n  return getLogger(name ? `${StdoutCategory}:${name}` : StdoutCategory)\n}\n\n/**\n * A logger whose records are written RAW to **stderr** (unformatted status/data\n * that must bypass the diagnostic formatter but stay off stdout).\n *\n * @param name - Optional sub-category (`stderr:<name>`); routing is unaffected.\n * @returns The stderr raw logger.\n */\nexport function getStderrLogger(name?: string): Logger {\n  return getLogger(name ? `${StderrCategory}:${name}` : StderrCategory)\n}\n", "import { DebuggingServerClient } from \"@wireio/debugging-client-shared\"\nimport { ApiPaths } from \"@wireio/debugging-shared\"\n\nimport { formatList, OutputFormat } from \"../formatter.js\"\nimport { getStdoutLogger } from \"../logger.js\"\nimport { DebugOutpostEndpointsType } from \"@wireio/opp-typescript-models\"\n\nconst stdout = getStdoutLogger()\n\nexport interface ListArgs {\n  server: string\n  format: string\n  epoch?: number\n  epochStart?: number\n  epochEnd?: number\n  endpoints?: string\n  start?: string\n  end?: string\n}\n\nexport async function handleList(argv: ListArgs): Promise<void> {\n  const client = await DebuggingServerClient.create({ baseUrl: argv.server })\n  const format =\n    argv.format === OutputFormat.json ? OutputFormat.json : OutputFormat.plain\n\n  // Build filter params\n  const epochStart = argv.epochStart ?? argv.epoch ?? 0\n  const epochEnd = argv.epochEnd ?? argv.epoch ?? 0\n\n  // Resolve endpoints filter\n  let endpointsType = DebugOutpostEndpointsType.UNKNOWN\n  if (argv.endpoints) {\n    const upper = argv.endpoints.toUpperCase()\n    const match = Object.entries(DebugOutpostEndpointsType).find(\n      ([name]) => name.toUpperCase() === upper\n    )\n    if (match) {\n      endpointsType = match[1] as DebugOutpostEndpointsType\n    }\n  }\n\n  // Parse timestamp filters (ISO string or unix ms)\n  const timestampStart = parseTimestamp(argv.start)\n  const timestampEnd = parseTimestamp(argv.end)\n\n  const result = await client.call(ApiPaths.OPP.Methods.EnvelopeList, {\n    epochStart,\n    epochEnd,\n    endpointsType,\n    timestampStart: BigInt(timestampStart),\n    timestampEnd: BigInt(timestampEnd)\n  })\n\n  stdout.info(formatList(result.entries, format))\n\n  if (format === OutputFormat.plain) {\n    stdout.info(`\\nTotal: ${result.total} envelope(s)`)\n  }\n}\n\nfunction parseTimestamp(value: string | undefined): number {\n  if (!value) return 0\n  const asNum = Number(value)\n  if (!isNaN(asNum)) return asNum\n  const asDate = new Date(value)\n  if (!isNaN(asDate.getTime())) return asDate.getTime()\n  return 0\n}\n", "import { DebuggingServerClient } from \"@wireio/debugging-client-shared\"\nimport { ApiPaths } from \"@wireio/debugging-shared\"\n\nimport { formatInspect, OutputFormat } from \"../formatter.js\"\nimport { getStdoutLogger } from \"../logger.js\"\n\nconst stdout = getStdoutLogger()\n\nexport interface InspectArgs {\n  server: string\n  format: string\n  key: string\n}\n\nexport async function handleInspect(argv: InspectArgs): Promise<void> {\n  const client = await DebuggingServerClient.create({ baseUrl: argv.server })\n  const format =\n    argv.format === OutputFormat.json ? OutputFormat.json : OutputFormat.plain\n\n  const result = await client.call(ApiPaths.OPP.Methods.EnvelopeGet, {\n    key: argv.key\n  })\n\n  stdout.info(formatInspect(result, format))\n}\n", "/**\n * Resolve after `ms` milliseconds \u2014 the async-primitives topic util (the `tail`\n * poll loop's delay lives here, not as a one-function `sleep.ts`).\n *\n * @param ms - Delay in milliseconds.\n * @returns A promise that resolves once the delay elapses.\n */\nexport function sleep(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms))\n}\n", "import { DebuggingServerClient } from \"@wireio/debugging-client-shared\"\nimport { ApiPaths } from \"@wireio/debugging-shared\"\nimport {\n  DebugOutpostEndpointsType,\n  EnvelopeListEntry\n} from \"@wireio/opp-typescript-models\"\n\nimport { getLogger } from \"@wireio/shared\"\nimport { formatList, OutputFormat } from \"../formatter.js\"\nimport { getStdoutLogger } from \"../logger.js\"\nimport { sleep } from \"../utils/asyncUtils.js\"\n\nconst log = getLogger(__filename)\nconst stdout = getStdoutLogger()\n\nexport interface TailArgs {\n  server: string\n  format: string\n  pollMs: number\n  endpoints?: string\n}\n\nexport async function handleTail(argv: TailArgs): Promise<void> {\n  const client = await DebuggingServerClient.create({ baseUrl: argv.server })\n  const format =\n    argv.format === OutputFormat.json ? OutputFormat.json : OutputFormat.plain\n\n  // Resolve endpoints filter\n  let endpointsType = DebugOutpostEndpointsType.UNKNOWN\n  if (argv.endpoints) {\n    const upper = argv.endpoints.toUpperCase()\n    const match = Object.entries(DebugOutpostEndpointsType).find(\n      ([name]) => name.toUpperCase() === upper\n    )\n    if (match) {\n      endpointsType = match[1] as DebugOutpostEndpointsType\n    }\n  }\n\n  // Track already-seen keys to only print new entries\n  const seenKeys = new Set<string>()\n\n  // Initial fetch \u2014 seed seenKeys with what's already there\n  const initial = await client.call(ApiPaths.OPP.Methods.EnvelopeList, {\n    epochStart: 0,\n    epochEnd: 0,\n    endpointsType,\n    timestampStart: BigInt(0),\n    timestampEnd: BigInt(0)\n  })\n  initial.entries.forEach(e => seenKeys.add(e.key))\n\n  if (format === OutputFormat.plain) {\n    log.info(\n      `Watching for new envelopes (poll every ${argv.pollMs}ms, ${seenKeys.size} existing)...`\n    )\n  }\n\n  // Poll loop\n  const shutdown = () => {\n    process.exit(0)\n  }\n  process.on(\"SIGINT\", shutdown)\n  process.on(\"SIGTERM\", shutdown)\n\n  while (true) {\n    await sleep(argv.pollMs)\n\n    const result = await client.call(ApiPaths.OPP.Methods.EnvelopeList, {\n      epochStart: 0,\n      epochEnd: 0,\n      endpointsType,\n      timestampStart: BigInt(0),\n      timestampEnd: BigInt(0)\n    })\n\n    const newEntries: EnvelopeListEntry[] = result.entries.filter(\n      e => !seenKeys.has(e.key)\n    )\n\n    if (newEntries.length > 0) {\n      newEntries.forEach(e => seenKeys.add(e.key))\n      stdout.info(formatList(newEntries, format))\n    }\n  }\n}\n", "#!/usr/bin/env node\nimport \"source-map-support/register\"\nimport Yargs from \"yargs\"\nimport { getLogger } from \"@wireio/shared\"\nimport { DebuggingServerClient } from \"@wireio/debugging-client-shared\"\n\nimport { handleList } from \"./commands/list.js\"\nimport { handleInspect } from \"./commands/inspect.js\"\nimport { handleTail } from \"./commands/tail.js\"\nimport { OutputFormat } from \"./formatter.js\"\nimport { pick } from \"lodash\"\n\nconst log = getLogger(__filename)\n\nenum Command {\n  list = \"list\",\n  inspect = \"inspect\",\n  tail = \"tail\"\n}\n\n/**\n * Run a command handler, logging any failure through the framework (never\n * `console.*`) before a non-zero exit. Data output already went through the\n * `stdout` logger inside the handler.\n */\nasync function run(handler: () => Promise<void>): Promise<void> {\n  try {\n    await handler()\n  } catch (err) {\n    log.error(`command failed: ${err instanceof Error ? err.message : String(err)}`)\n    process.exit(1)\n  }\n}\n\nYargs(process.argv.slice(2))\n  .option(\"server\", {\n    type: \"string\",\n    default: DebuggingServerClient.DefaultURL,\n    describe: \"Debugging server URL\"\n  })\n  .option(\"format\", {\n    type: \"string\",\n    choices: [OutputFormat.plain, OutputFormat.json],\n    default: OutputFormat.plain,\n    describe: \"Output format\"\n  })\n  .command(\n    Command.list,\n    \"List stored envelopes\",\n    yargs =>\n      yargs\n        .option(\"epoch\", {\n          type: \"number\",\n          describe: \"Filter by single epoch index\"\n        })\n        .option(\"epoch-start\", {\n          type: \"number\",\n          describe: \"Filter by epoch range start (inclusive)\"\n        })\n        .option(\"epoch-end\", {\n          type: \"number\",\n          describe: \"Filter by epoch range end (inclusive)\"\n        })\n        .option(\"endpoints\", {\n          type: \"string\",\n          describe: \"Filter by endpoints type name\"\n        })\n        .option(\"start\", {\n          type: \"string\",\n          describe: \"Filter by start timestamp (ISO or unix ms)\"\n        })\n        .option(\"end\", {\n          type: \"string\",\n          describe: \"Filter by end timestamp (ISO or unix ms)\"\n        }),\n    async argv =>\n      run(() =>\n        handleList({\n          server: argv.server,\n          format: argv.format,\n          epoch: argv.epoch,\n          epochStart: argv.epochStart,\n          epochEnd: argv.epochEnd,\n          endpoints: argv.endpoints,\n          start: argv.start,\n          end: argv.end\n        })\n      )\n  )\n  .command(\n    Command.inspect,\n    \"Inspect a specific envelope by storage key\",\n    yargs =>\n      yargs.option(\"key\", {\n        type: \"string\",\n        demandOption: true,\n        describe: \"Storage key (from list output)\"\n      }),\n    async argv => run(() => handleInspect(pick(argv, \"server\", \"format\", \"key\")))\n  )\n  .command(\n    Command.tail,\n    \"Watch for new envelopes in real-time\",\n    yargs =>\n      yargs\n        .option(\"poll-ms\", {\n          type: \"number\",\n          default: 2_000,\n          describe: \"Poll interval in ms\"\n        })\n        .option(\"endpoints\", {\n          type: \"string\",\n          describe: \"Filter by endpoints type name\"\n        }),\n    async argv =>\n      run(() => handleTail(pick(argv, \"server\", \"format\", \"pollMs\", \"endpoints\")))\n  )\n  .demandCommand(1)\n  .strict()\n  .parse()\n"],
  "mappings": "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AAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QAAI,QAAO;AAAA,QACtf,QAAO;AAAA,QAAK,QAAO;AAAA,QAAK,QAAO;AAAA,QAAK,QAAO;AAAA,QAAK,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QACnf,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS;AAAA,QAAI,UAAS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,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;;;ACbrwD,IAAM,YAAY,CAAC,QAAQ,cAAc;AAC/C,MAAI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",
  "names": ["exports", "exports", "exports", "normalize", "i", "join", "relative", "obj", "s", "length", "exports", "has", "set", "i", "exports", "exports", "sourceFile", "i", "map", "exports", "exports", "x", "y", "p", "r", "i", "j", "exports", "c", "s", "i", "length", "j", "needle", "section", "ret", "exports", "i", "map", "length", "exports", "exports", "module", "obj", "length", "exports", "module", "i", "ret", "path", "e", "state", "exports", "module", "module", "getCallerFile", "_", "stack", "exports", "module", "isNil", "exports", "module", "isObject", "exports", "module", "exports", "module", "exports", "module", "Symbol", "exports", "module", "Symbol", "e", "exports", "module", "exports", "module", "Symbol", "exports", "module", "exports", "module", "exports", "module", "isString", "exports", "module", "isNumber", "exports", "module", "isObject", "isFunction", "exports", "d", "b", "p", "a", "i", "length", "_a", "Node", "List", "toArray", "ListIterator", "ForwardListIterator", "BackwardsListIterator", "n", "empty", "first", "from", "sequence", "list", "times", "nth", "prepend", "k", "newOffset", "append", "last", "map", "pluck", "foldl", "of", "foldr", "l", "scan", "forEach", "_", "filter", "partition", "join", "flatten", "concat", "state", "every", "some", "none", "find", "findLast", "findIndex", "s", "j", "left", "right", "top", "c", "update", "_b", "take", "takeWhile", "takeLastWhile", "dropWhile", "splitAt", "l2", "buffer", "remove", "drop", "dropLast", "pop", "tail", "reverse", "isList", "isPrimitive", "isEmpty", "exports", "module", "undefined", "e", "length", "values", "collection", "n", "getValue", "map", "set", "runInContext", "_", "Array", "Date", "Error", "Function", "Math", "Object", "RegExp", "String", "TypeError", "Buffer", "Symbol", "Uint8Array", "DataView", "Map", "Promise", "Set", "WeakMap", "isObject", "result", "iteratee", "entries", "size", "keys", "get", "key", "setTimeout", "includes", "isFunction", "object", "last", "indexOf", "constant", "obj", "clearTimeout", "guard", "index", "ary", "othValue", "flatten", "transform", "count", "concat", "drop", "dropWhile", "findIndex", "join", "nth", "remove", "reverse", "tail", "take", "takeWhile", "chain", "toArray", "parent", "clone", "every", "filter", "find", "findLast", "forEach", "isString", "partition", "reduce", "negate", "shuffle", "some", "isBoolean", "isEmpty", "isError", "isFinite", "isNaN", "isNumber", "isNil", "defaults", "has", "pick", "update", "camelCase", "parseInt", "flow", "mixin", "maxBy", "min", "minBy", "value", "exports", "module", "n", "t", "r", "e", "u", "i", "o", "y", "c", "a", "s", "h", "p", "_", "v", "b", "d", "w", "k", "x", "j", "A", "I", "O", "R", "S", "W", "L", "B", "T", "$", "M", "F", "N", "P", "K", "Z", "Ut", "Y", "J", "Dt", "Qt", "Xt", "f", "l", "g", "nr", "tr", "rr", "er", "ur", "ir", "or", "fr", "cr", "Lr", "ar", "lr", "sr", "hr", "pr", "_r", "vr", "gr", "yr", "dr", "br", "wr", "mr", "xr", "jr", "Ar", "kr", "Ir", "Or", "Rr", "zr", "Fr", "Er", "Sr", "Tr", "Wr", "Cr", "Ur", "Br", "$r", "Nr", "Pr", "qr", "Gr", "Hr", "Jr", "Yr", "ne", "te", "ee", "ue", "oe", "fe", "_e", "de", "m", "ui", "ic", "_c", "_a", "Fs", "exports", "exports", "module", "exports", "module", "n", "a", "b", "length", "isError", "isFunction", "keys", "func", "mixin", "pairs", "rearg", "name", "options", "_", "exports", "module", "_", "exports", "module", "has", "EventEmitter", "i", "length", "j", "exports", "t", "require_base64", "exports", "i", "b", "p", "exports", "i", "t", "exports", "UnknownFieldHandler", "a", "b", "WireType", "exports", "b", "i", "exports", "n", "exports", "t", "s", "exports", "assert", "exports", "i", "exports", "a", "b", "_a", "_b", "c", "exports", "exports", "i", "exports", "ScalarType", "LongType", "RepeatType", "_a", "_b", "_c", "i", "exports", "exports", "_a", "keys", "n", "k", "i", "map", "exports", "exports", "_a", "e", "exports", "_a", "jsonValue", "i", "exports", "exports", "_a", "length", "d", "T", "L", "e", "exports", "a", "b", "T", "i", "t", "d", "exports", "exports", "reflectionMergePartial", "i", "T", "k", "exports", "a", "b", "t", "T", "i", "exports", "MessageType", "a", "b", "_a", "length", "exports", "exports", "k", "num", "values", "exports", "exports", "module", "obj", "has", "o", "ret", "e", "require_util", "e", "T", "ret", "i", "obj", "r", "keys", "count", "from", "filter", "v", "exports", "module", "schedule", "o", "exports", "module", "j", "length", "i", "receiver", "ret", "exports", "module", "e", "self", "isNode", "receiver", "exports", "module", "es5", "inherits", "notEnumerableProp", "e", "i", "ret", "j", "exports", "module", "Promise", "errorObj", "isObject", "obj", "ret", "e", "x", "resolve", "exports", "module", "Promise", "values", "_", "i", "exports", "module", "Promise", "ret", "exports", "module", "Promise", "es5", "canAttachTrace", "promises", "i", "ret", "e", "event", "resolve", "j", "obj", "length", "captureStackTrace", "receiver", "o", "exports", "module", "tryCatch", "errorObj", "e", "i", "keys", "j", "exports", "module", "Promise", "errorObj", "finallyHandler", "ret", "fail", "j", "i", "exports", "module", "maybeWrapAsError", "es5", "obj", "ret", "keys", "i", "exports", "module", "Promise", "tryCatch", "ret", "exports", "module", "Promise", "_", "e", "ret", "obj", "exports", "module", "Promise", "tryCatch", "errorObj", "i", "e", "exports", "module", "Promise", "thrower", "exports", "module", "Promise", "exports", "module", "Promise", "canEvaluate", "tryCatch", "errorObj", "i", "last", "ret", "exports", "module", "Promise", "canEvaluate", "isIdentifier", "ret", "keys", "i", "obj", "exports", "module", "Promise", "TypeError", "errorObj", "tryCatch", "yieldHandlers", "i", "ret", "receiver", "exports", "module", "Promise", "tryCatch", "errorObj", "promises", "i", "values", "length", "receiver", "ret", "j", "map", "exports", "module", "Promise", "tryCatch", "errorObj", "ret", "receiver", "exports", "module", "Promise", "withAppended", "maybeWrapAsError", "canEvaluate", "TypeError", "e", "obj", "ret", "i", "j", "filter", "keys", "min", "parameterCount", "receiver", "_", "count", "fn", "exports", "module", "Promise", "isObject", "es5", "mapToEntries", "map", "ret", "entries", "length", "i", "obj", "keys", "promises", "exports", "module", "Promise", "promises", "ret", "i", "exports", "module", "Promise", "tryCatch", "promises", "values", "i", "length", "j", "reduce", "ret", "exports", "module", "Promise", "values", "ret", "promises", "exports", "module", "Promise", "RangeError", "values", "count", "e", "i", "some", "promises", "ret", "exports", "module", "Promise", "ret", "exports", "module", "Promise", "TypeError", "inherits", "errorObj", "tryCatch", "thrower", "e", "i", "ret", "d", "length", "exports", "module", "Promise", "promises", "ret", "exports", "module", "Promise", "promises", "exports", "module", "Promise", "promises", "exports", "module", "TypeError", "reflectHandler", "Promise", "es5", "errorObj", "tryCatch", "self", "j", "i", "ret", "promises", "obj", "_", "receiver", "r", "x", "isPromise", "v", "p", "exports", "module", "e", "exports", "module", "exports", "module", "resolve", "dir", "readdirSync", "filter", "platform", "arch", "a", "b", "extension", "i", "runtime", "abi", "require_node_gyp_build", "exports", "module", "exports", "module", "mask", "length", "i", "exports", "module", "e", "exports", "module", "concat", "i", "length", "e", "exports", "module", "exports", "module", "PerMessageDeflate", "data", "require_fallback", "exports", "module", "i", "exports", "module", "e", "exports", "module", "i", "e", "exports", "module", "PerMessageDeflate", "concat", "Receiver", "n", "exports", "module", "PerMessageDeflate", "Sender", "length", "_", "i", "exports", "module", "Event", "exports", "module", "i", "format", "extension", "k", "values", "v", "exports", "module", "EventEmitter", "createHash", "PerMessageDeflate", "Receiver", "Sender", "format", "WebSocket", "receiver", "key", "e", "length", "exports", "module", "WebSocket", "createWebSocketStream", "err", "exports", "module", "i", "protocol", "exports", "module", "EventEmitter", "createHash", "extension", "PerMessageDeflate", "subprotocol", "WebSocket", "WebSocketServer", "map", "h", "_a", "r", "i", "c", "w", "i", "emojiRegex", "last", "code", "import_util", "import_path", "i", "x", "e", "i", "c", "DefaultValuesForTypeKey", "mixin", "defaults", "key", "i", "j", "k", "args", "x", "a", "keys", "value", "v", "val", "argv", "e", "env", "obj", "aliases", "o", "c", "y", "guessType", "self", "import_fs", "env", "require", "import_path", "import_fs", "import_util", "import_path", "values", "obj", "i", "y18n", "y18n", "import_node_module", "__dirname", "require", "getCallerFile", "shim", "cmd", "i", "length", "global", "i", "result", "usage", "validation", "shim", "visit", "o", "module", "command", "c", "a", "d", "defaults", "filter", "obj", "shim", "self", "i", "fail", "command", "k", "keys", "ui", "usage", "a", "b", "e", "v", "values", "maxWidth", "usage", "command", "shim", "_a", "_b", "_c", "i", "y", "c", "filter", "s", "desc", "argv", "a", "b", "i", "j", "usage", "shim", "self", "_a", "s", "a", "k", "i", "key", "b", "d", "shim", "isObject", "obj", "receiver", "state", "shim", "keys", "global", "_a", "k", "min", "resolve", "obj", "v", "x", "b", "i", "type", "key", "value", "set", "_b", "_c", "validation", "a", "completion", "y", "NestedError", "o", "o", "_isNil", "isObject", "_isObject", "isPromise", "isFunction", "o", "_isString", "_isNumber", "isFunction", "_isFunction", "isFunction", "isPromise", "fn", "localErrorHandler", "DeferredStatus", "Level", "i", "inspect", "v", "hash", "i", "obj", "obj2", "h", "Ordering", "obj", "o", "v", "r", "i", "v", "n", "count", "inspect", "x", "length", "v2", "hash", "tail", "x", "h", "i", "c", "mutate", "v", "hash", "count", "k", "newValue", "map", "y", "hamt", "v", "h", "k", "sortOn", "x", "keys", "inspect", "v", "a", "b", "inspect", "s", "i", "v", "n", "count", "inspect", "x", "length", "r", "v2", "tail", "y", "hash", "v", "map", "k", "x", "i", "y", "a", "b", "r", "count", "hamt", "entries", "h", "v", "k", "x", "map", "a", "b", "keys", "inspect", "v", "r", "i", "x", "v2", "hash", "inspect", "n", "count", "e", "x", "r", "v", "p", "inspect", "import_isNil", "import_isObject", "import_isString", "import_isNumber", "import_isFunction", "applyTypeGuardExtras", "o", "isNil", "o", "_isNil", "isObject", "o", "isNil", "_isObject", "isPromise", "isFunction", "isString", "o", "isNil", "_isString", "isFunction", "applyTypeGuardExtras", "o", "isNil", "_isFunction", "isBoolean", "o", "PrimitiveProducers", "DefaultAssertOptions", "assertOptions", "AssertError", "assertLift", "isFunction", "assert", "assertOptions", "_a", "isString", "globalErrorHandler", "getValue", "globalErrorHandler", "isPromise", "isNil", "guardFn", "guard", "fn", "localErrorHandler", "v", "o", "x", "r", "p", "isBoolean", "isFunction", "left", "_", "inspect", "inspect", "r", "x", "p", "r", "x", "y", "a", "x", "y", "a", "b", "r", "o", "isObject", "isFunction", "import_lodash", "args", "LogContextContainer", "s", "category", "isObject", "import_lodash", "log", "log", "import_node_assert", "import_lodash", "import_runtime", "import_runtime", "ChainKind", "ChainKeyType", "WireKeyType", "UnderwriteRequestStatus", "TokenKind", "ReserveStatus", "AttestationType", "EmissionsBlockReason", "StakeStatus", "OperatorType", "OperatorStatus", "ChainRequestStatus", "MessageDirection", "MessageStatus", "EnvelopeStatus", "AttestationStatus", "UnderwriteStatus", "ChallengeStatus", "NodeOwnerTier", "DisputeStatus", "length", "d", "import_runtime", "length", "d", "i", "OperatorAction_ActionType", "length", "d", "i", "import_runtime", "length", "d", "i", "import_runtime", "DebugOutpostEndpointsType", "length", "d", "i", "v", "k", "v", "EnvelopeRecordFile", "filter", "a", "b", "EnvelopeEventKind", "PidSourceKind", "ApiPaths", "OPP", "Methods", "Cluster", "Processes", "Logs", "Stream", "StreamTopic", "StreamFrameType", "ClosedReason", "StreamErrorCode", "t", "matcher", "Symbol", "for", "isVariadic", "anonymousSelectKey", "isObject", "value", "Boolean", "isMatcher", "x", "symbols", "matchPattern", "pattern", "select", "matched", "selections", "match", "Object", "keys", "forEach", "key", "Array", "isArray", "startPatterns", "endPatterns", "variadicPatterns", "i", "subpattern", "push", "length", "Error", "startValues", "slice", "endValues", "middleValues", "Infinity", "every", "subPattern", "Reflect", "ownKeys", "k", "matcherType", "is", "getSelectionKeys", "_pattern$symbols$matc", "_pattern$symbols$matc2", "_pattern$symbols$matc3", "call", "flatMap", "values", "xs", "f", "reduce", "acc", "concat", "chainable", "pattern", "Object", "assign", "optional", "and", "p2", "intersection", "or", "union", "select", "key", "optional", "pattern", "chainable", "matcher", "match", "value", "selections", "selector", "key", "getSelectionKeys", "forEach", "undefined", "matched", "matchPattern", "matcherType", "intersection", "patterns", "chainable", "matcher", "match", "value", "selections", "selector", "key", "matched", "every", "p", "matchPattern", "getSelectionKeys", "flatMap", "matcherType", "union", "forEach", "undefined", "some", "when", "predicate", "Boolean", "select", "args", "pattern", "length", "symbols", "concat", "isUnknown", "x", "isNumber", "isString", "isBigInt", "any", "unknown", "stringChainable", "pattern", "Object", "assign", "chainable", "startsWith", "str", "intersection", "start", "when", "value", "isString", "endsWith", "end", "minLength", "min", "length", "len", "maxLength", "max", "includes", "substr", "regex", "expr", "Boolean", "match", "string", "numberChainable", "between", "isNumber", "lt", "gt", "lte", "gte", "int", "Number", "isInteger", "finite", "isFinite", "positive", "negative", "number", "bigintChainable", "betweenBigInt", "isBigInt", "bigint", "boolean", "x", "symbol", "nullish", "nonNullable", "NonExhaustiveError", "Error", "constructor", "input", "displayedValue", "JSON", "stringify", "e", "super", "this", "unmatched", "matched", "value", "undefined", "match", "MatchExpression", "state", "with", "args", "handler", "length", "patterns", "predicate", "push", "slice", "hasSelections", "selected", "select", "key", "some", "pattern", "matchPattern", "Boolean", "symbols", "when", "otherwise", "exhaustive", "unexpectedValueHandler", "defaultCatcher", "run", "returnType", "narrow", "JsonLogLevel", "LogLevelColor", "JsonLogRecord", "import_node_fs", "LineIndexInternals", "Fs", "from", "count", "resolve", "ClusterSubpath", "Path", "import_node_fs", "import_node_path", "ClusterFiles", "ClusterStateNodeRole", "BindConfigPortProtocol", "ClusterConfigReportFormat", "ClusterConfigLoggingFileFormat", "PidSources", "Fs", "Path", "state", "a", "b", "p", "Fs", "s", "n", "DebuggingDefaults", "StorageSubpath", "Assert", "JsonRPCClient", "Assert", "DebuggingServerClient", "Fs", "Path", "DebuggingSubscriptionEventName", "EventEmitter", "p", "state", "s", "entries", "e", "teardown", "Bluebird", "LocalFileDebuggingClient", "filter", "import_node_assert", "import_lodash", "WebSocket", "resolve", "WebSocketStreamClient", "Assert", "NetDebuggingClient", "i", "a", "ColumnWidth", "Formatter", "entries", "format", "e", "obj", "i", "a", "s", "format", "stdout", "format", "resolve", "log", "stdout", "format", "e", "import_lodash", "log", "log"]
}
